Android conserve-t-il les fichiers .apk? si oui où?

187

Une fois qu'Android a installé une application à partir de Marketplace, conserve-t-il le fichier .apk?

Existe-t-il un emplacement standard où Android conserverait ces fichiers?

Gubatron
la source

Réponses:

125

Les applications préinstallées sont dans le /system/appdossier. Les applications installées par l'utilisateur sont dans /data/app. Je suppose que vous ne pouvez pas accéder à moins que vous n'ayez un téléphone enraciné. Je n'ai pas de téléphone enraciné ici mais essayez ce code:

public class Testing extends Activity {
    private static final String TAG = "TEST";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        File appsDir = new File("/data/app");

        String[] files = appsDir.list();

        for (int i = 0 ; i < files.length ; i++ ) {
            Log.d(TAG, "File: "+files[i]);

        }
    }

Il répertorie les apks dans ma magie htc enracinée et dans l'émeu.

Macarse
la source
Cela a fonctionné comme un charme sur Motorola Droid et également sur Nexus One, tous deux non enracinés.
Gubatron
Ok, vous n'avez jamais dit ce que vous vouliez d'eux :)
Macarse
Je veux pouvoir les lire et faire des choses avec eux. Heureusement, ils sont lisibles.
Gubatron
3
La bonne chose est que non seulement les fichiers sont «listables», ils sont également lisibles, donc ils correspondent à mon objectif.
Gubatron
J'ai lu ailleurs que les fichiers APK dans / data / app ne correspondent qu'aux applications téléchargées depuis le Play Store. Est-ce correct ou inclut-il quelque chose que l'utilisateur a installé?
Christian
135

Vous pouvez utiliser le gestionnaire de packages ( pm) adb shellpour lister les packages:

adb shell pm list packages | sort

et pour afficher où se trouve le .apkfichier:

adb shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk

Et adb pullpour télécharger l'apk.

adb pull data/app/com.king.candycrushsaga-1/base.apk
Mariusz Jamro
la source
2
chaque application a un dossier avec le même nom que le nom du package mais «-1» ou «-2» à la fin, une idée pourquoi?
shadygoneinsane
Pour spécifier le chemin ou le nom du fichier cible,adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
manikanta
95

Si vous souhaitez simplement obtenir un fichier APK de quelque chose que vous avez précédemment installé, procédez comme suit:

  1. Obtenez AirDroid sur Google Play
  2. Accédez à votre téléphone à l'aide d'AirDroid à partir du navigateur Web de votre PC
  3. Allez dans Applications et sélectionnez l'application installée
  4. Cliquez sur le bouton "télécharger" pour télécharger la version APK de cette application à partir de votre téléphone

Vous n'avez pas besoin de rooter votre téléphone, d'utiliser adbou d'écrire quoi que ce soit.

Jan Przybylo
la source
2
Évalué parce que cela ne répond pas vraiment à la question. Que faire si l'OP voulait utiliser ADB, afin qu'il puisse être utilisé sur des appareils où le débogage est autorisé, mais où le mot de passe est oublié ou l'écran est cassé.
Hack5
moyen plus simple d'obtenir un fichier apk pour un appareil sans racine.
fahmi hammadi
Merci. La cause du vote positif répond à la question en disant: "Il les garde dans / data, mais seulement si vous effectuez la procédure X"
ntg le
26

Il n'y a pas d'emplacement standard, mais vous pouvez utiliser le PackageManager pour en savoir plus sur les packages et la classe ApplicationInfo que vous pouvez obtenir à partir de là contient diverses informations sur un package particulier: le chemin vers son .apk, le chemin vers son répertoire de données, le chemin à un .apk de ressources uniquement (pour les applications verrouillées en avant), etc. Notez que vous pouvez ou non avoir la permission de lire ces répertoires en fonction de votre relation avec l'autre application; cependant, toutes les applications sont capables de lire la ressource .apk (qui est également le vrai .apk pour les applications non verrouillées en avant).

Si vous ne faites que fouiller dans le shell, les applications actuellement non verrouillées en avant se trouvent dans /data/app/.apk. L'utilisateur du shell peut lire un .apk spécifique, bien qu'il ne puisse pas lister le répertoire. Dans une prochaine version, la convention de dénomination sera légèrement modifiée, donc ne comptez pas qu'elle reste la même, mais si vous obtenez le chemin du .apk du gestionnaire de paquets, vous pouvez l'utiliser dans le shell.

hackbod
la source
2
qu'est-ce qu'une "application verrouillée en avant"?
Tony Chan
1
Il s'agit d'un ancien mécanisme de protection contre la copie qui installait le .apk avec des autorisations qui permettaient uniquement à cette application de le lire.
hackbod
18

Les applications préinstallées sont généralement dans / system / app et les applications installées par l'utilisateur sont dans / data / app.

Vous pouvez utiliser "adb pull", mais vous devez connaître le chemin complet du fichier APK. Sur l'émulateur, vous pouvez obtenir une liste de répertoires en utilisant "adb shell" + "ls". Mais sur un appareil Android, vous ne pourrez pas le faire dans le dossier "/ data" pour des raisons de sécurité. Alors, comment déterminez-vous le chemin complet du fichier APK?

Vous pouvez obtenir une liste complète de toutes les applications installées en écrivant un programme qui interroge le PackageManager. Extrait de code court ci-dessous:

PackageManager  pm = getPackageManager();
List<PackageInfo> pkginfo_list = pm.getInstalledPackages(PackageManager.GET_ACTIVITIES);
List<ApplicationInfo> appinfo_list = pm.getInstalledApplications(0);
for (int x=0; x < pkginfo_list.size(); x++){             
  PackageInfo pkginfo = pkginfo_list.get(x);
  pkg_path[x] = appinfo_list.get(x).publicSourceDir;  //store package path in array
}

Vous pouvez également trouver des applications qui donneront de telles informations. Il y en a beaucoup. Essayez celui-ci (AppSender).

xmaslatte
la source
9

Si vous recherchez le chemin d'une application spécifique, une solution rapide et sale consiste simplement à grep le rapport de bogue:

$ adb bugreport | grep 'dir=/data/app' 

Je ne sais pas si cela fournira une liste exhaustive, il peut donc être utile d'exécuter l'application en premier.

tomwhipple
la source
9

Installer à partir du marché

C'est le comportement du marché de conserver l'apk après l'installation. Google play ne conserve pas l'apk après l'installation. D'autres marchés tiers peuvent avoir des comportements différents.

Installer à partir de l'outil de développement / débogage (adb, eclipse, android studio)

Lorsque nous installons l'apk à partir de l'outil de débogage, directement invoqué adb installou depuis eclipse / android studio, l'apk sera transféré ( adb push) vers un répertoire public en lecture et en écriture, généralement /data/local/tmp/. Après cela, l'outil utilisera la pmcommande pour installer, il supprimera l'apk temporaire /data/local/tmp/après l'installation réussie.

Nous pourrions obtenir ces informations à partir de la sortie de débogage comme suit.

$ adb install bin/TestApplication.apk 
3155 KB/s (843375 bytes in 0.260s)
    pkg: /data/local/tmp/TestApplication.apk
Success

Comment le système conserve l'apk

Bien sûr, le système doit stocker tous les apks quelque part. Il y a trois endroits pour que le système conserve les apks en fonction des différents types d'apks:

  1. pour l'application stock

    Ceux-ci sont généralement expédiés dans l'appareil par le fabricant, y compris l'application principale pour le fonctionnement du système et le service Google, vous pouvez les trouver sous le répertoire /system/appet /system/priv-app.

  2. application installée par l'utilisateur

    La plupart des apks entrent dans cette catégorie. Ces apks sont généralement installés à partir du marché par les utilisateurs ou adb installsans -soption. Vous pouvez les trouver dans le répertoire /data/appd'un périphérique enraciné.

  3. app sur sdcard

    Si l'apk active son emplacement d'installation dans sdcard avec android:installLocation="auto"dans son manifeste, l'application peut être déplacée vers sdcard à partir du menu du gestionnaire d'applications du système. Ces apks sont généralement situés dans le dossier sécurisé de sdcard /mnt/sdcard/asec.

    Une autre façon de forcer l'emplacement d'installation à sdcard consiste à utiliser la commande adb install -s apk-to-install.apk.

À noter, les fichiers de l'application pré-installée ne sont plus dans un seul .apkfichier. Il existe un dossier contenant des fichiers pour chaque application préinstallée dans le répertoire /system/appou /system/priv-apppour la dernière version d'Android.

alijandro
la source
8

Vous pouvez extraire des applications avec ADB. Ils sont dans / data / App /, je crois.

adb pull (location on device) (where to save)

Notez que vous devez rooter votre téléphone pour extraire des applications protégées contre la copie.

Bryan Denny
la source
5

Dans / data / app mais pour la protection contre la copie, je ne pense pas que vous puissiez y accéder.

Robby Pond
la source
2
Alors, comment fonctionne exactement une application qui permet le partage d'APK via Bluetooth? Comment font-ils?
Un utilisateur SO
5

Si vous êtes rooté, téléchargez l'application Root Explorer. Meilleur gestionnaire de fichiers pour les utilisateurs enracinés. Quoi qu'il en soit, System / app a tous les apks par défaut fournis avec le téléphone, et data / apk a tous les apks des applications que vous avez installées. Appuyez longuement sur l'apk de votre choix (dans l'Explorateur racine), accédez à votre dossier / sdcard et collez-le.

Tanzer
la source
4

Utilisez ceci pour lister tous les .apks sous / data / app /

adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
gilm
la source
4
  • données / application
  • système / application
  • système / priv-app
  • mnt / asec (lorsqu'il est installé dans sdcard)

Vous pouvez extraire les .apks de n'importe lequel d'entre eux:

adb pull / mnt / asec

Ignorante
la source
3

Les fichiers .apk peuvent être situés dans le répertoire / data / app /. En utilisant ES File Explorer, nous pouvons accéder à ces fichiers .APK.

vgokul129
la source
2

si vous utilisez eclipse goto DDMS, puis l'explorateur de fichiers, vous verrez le dossier System / Apps et les apks sont là

Jawad Amjad
la source
0

Lorsque j'ai installé mon application sur l'émulateur, il a montré mon fichier .apk dans

data / app Ensuite, j'ai utilisé ls data / app // pour voir s'il existe ou non

Après avoir installé votre application, utilisez simplement la commande ls vie shell et vérifiez le répertoire souhaité, mais cela dépend du type d'application que vous essayez d'installer. J'ai utilisé cette méthode pour installer Point si quelque chose ne va pas.

DeAviator
la source
J'essaie également de localiser les apks, mais ce que j'ai trouvé, c'est que vous ne pouvez pas localiser tous les apks, donc je suggère la méthode d'enracinement. Je n'ai pas pu obtenir tous les apks installés. Il est donc préférable de rooter votre téléphone et d'obtenir tous les apks en utilisant Titanium Backup et d'avoir plus de contrôle sur votre téléphone.
Jawad Amjad
0

Une autre façon d'obtenir les apks que vous ne trouvez pas sur un appareil enraciné est d' utiliser la boîte à outils rom .

Effectuez une sauvegarde à l'aide du gestionnaire d'applications, puis accédez à storage/emulated/appmanageret vérifiez la sauvegarde de l'application système ou la sauvegarde de l'application utilisateur .

charge
la source
0

Pour trouver un apk, téléchargez et installez l'expéditeur d'application Bluetooth à partir du Play Store. Une fois l'installation terminée, ouvrez l'expéditeur de l'application Bluetooth. Il affichera toutes les applications (.apk)installées sur votre appareil, puis vous pourrez facilement transférer l'application sur votre PC via Bluetooth.

Prem
la source
0

Contrairement à ce qui est écrit sur la réponse choisie, vous n'avez pas besoin de root et il est possible d'obtenir les APK des applications installées, c'est ainsi que je l'ai fait sur mon application ( ici ). Exemple:

List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);

Ensuite, pour chacun des éléments de la liste, vous pouvez accéder à packageInfo.applicationInfo.sourceDir , qui est le chemin complet de l'APK de l'application installée.

développeur android
la source
-1

Eh bien, je suis venu à ce post parce que je voulais réinstaller une application que j'aimais beaucoup. Si tel est votre cas, accédez simplement à Google Play et recherchez Mes applications, l'onglet Tout, et vous trouverez un moyen de réinstaller une application qui vous a plu. J'ai rencontré un problème que je n'ai pas pu trouver en recherchant une application, mais il était présent dans Mes applications afin que je puisse réinstaller dans mon nouveau mobile;)

Sergio Abreu
la source