Après avoir installé une application à partir du Marketplace, Android conserve-t-il le fichier .apk?
Existe-t-il un emplacement standard où Android conserverait ces fichiers?
Les applications préinstallées sont dans le dossier /system/app
. Les applications installées par l'utilisateur sont en /data/app
. Je suppose que vous ne pouvez pas y accéder à moins que vous n'ayez un téléphone enraciné .
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 ne liste les apks dans mon magie de HTC enracinée et dans l'ému.
Vous pouvez utiliser le gestionnaire de packages (pm
) sur adb Shell
pour répertorier les packages:
adb Shell pm list packages
et d'afficher où se trouve le fichier .apk
:
adb Shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk
Et adb pull
pour télécharger l'apk.
adb pull data/app/com.king.candycrushsaga-1/base.apk
Si vous voulez juste obtenir un fichier APK de quelque chose que vous avez déjà installé, procédez comme suit:
Vous n'avez pas besoin de rooter votre téléphone, d'utiliser adb
ou d'écrire quoi que ce soit.
Il n'y a pas d'emplacement standard, mais vous pouvez utiliser PackageManager pour en savoir plus sur les packages. La classe ApplicationInfo que vous pouvez y obtenir contient diverses informations sur un package particulier: le chemin d'accès à son fichier .apk, le chemin de son répertoire de données, le chemin vers une ressource uniquement .apk (pour les applications verrouillées en aval), 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 véritable .apk pour une application non verrouillée en avant).
Si vous vous contentez de fouiller dans l'environnement de ligne de commande, les applications actuellement non verrouillées sont situées dans /data/app/.apk. L’utilisateur Shell peut lire un fichier .apk spécifique, mais il ne peut pas répertorier le répertoire. Dans une version ultérieure, la convention de nommage sera légèrement modifiée. Ne comptez donc pas sur sa conservation, mais si vous obtenez le chemin d'accès du fichier .apk auprès du gestionnaire de packages, vous pourrez l'utiliser dans le shell.
Les applications préinstallées se trouvent généralement dans/system/app et les applications installées par l'utilisateur 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 calculez-vous le chemin complet du fichier APK?
Vous pouvez obtenir la liste complète de toutes les applications installées en écrivant un programme qui interroge 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 une telle information. Il y en a beaucoup. Essayez celui-ci (AppSender).
Si vous recherchez le chemin d'une application spécifique, une solution simple et rapide 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 de lancer l'application en premier.
Installer depuis le marché
C'est le comportement du marché de savoir s'il faut conserver l'apk après l'installation. Google play ne conserve pas l'apk après l'installation. Les autres marchés tiers peuvent avoir des comportements différents.
Installation à partir de l'outil de développement/de débogage (adb, Eclipse, studio Android)
Lorsque nous installons l'apk à partir de l'outil de débogage, appelons directement adb install
ou à partir du studio Eclipse/Android, l'apk sera transféré (adb Push
) dans un répertoire public en lecture et en écriture, généralement /data/local/tmp/
. Après cela, l'outil utilisera la commande pm
pour installer, il supprimera l'apk temporaire dans /data/local/tmp/
après la réussite de l'installation.
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. Le système dispose de trois emplacements pour garder l'apks de base sur les différents types d'apks.
Ceux-ci sont généralement expédiés par périphérique, y compris l'application principale pour le système en cours d'exécution et le service Google. Vous les trouverez dans les répertoires /system/app
et /system/priv-app
.
La plupart des apks entrent dans cette catégorie. Ces apks sont généralement installés à partir du marché par les utilisateurs ou par l'option adb install
sans l'option -s
. Vous pouvez les trouver dans le répertoire /data/app
pour un périphérique enraciné.
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 sur sdcard est d'utiliser la commande adb install -s apk-to-install.apk
.
Remarque: les fichiers de l'application pré-installée ne figurent plus dans un seul fichier .apk
. Il existe un dossier contenant les fichiers de chaque application préinstallée dans le répertoire /system/app
ou /system/priv-app
de la dernière version d'Android.
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 les applications protégées contre la copie.
Si vous êtes enraciné, téléchargez l'application Root Explorer. Meilleur gestionnaire de fichiers pour les utilisateurs enracinés . Quoi qu'il en soit, System/app possède tous les apks fournis par défaut avec le téléphone et data/apk contient tous les apks des applications que vous avez installées. Il suffit d'appuyer longuement sur l'apk que vous voulez (dans Root Explorer), accédez à votre dossier/sdcard et collez-le.
Utilisez ceci pour lister tous les .apks sous/data/app /
adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
Vous pouvez tirer les .apks de n’importe lequel d’entre eux:
adb pull/mnt/asec
Dans/data/app mais pour la protection contre la copie, je ne pense pas que vous puissiez y accéder.
Les fichiers .apk peuvent être situés dans/data/app/directory. En utilisant ES File Explorer nous pouvons accéder à ces fichiers .APK.
si vous utilisez Eclipse, allez à DDMS, puis dans File Explorer, vous verrez le dossier System/Apps et les apks sont là.
Lorsque j'ai installé mon application sur un émulateur, le fichier .apk figurant dans
données/application Puis j'ai utilisé ls data/app // pour voir s’il existe ou ne pas
Après avoir installé votre application, utilisez simplement la commande ls avec 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 Indiquer si quelque chose ne va pas.
Un autre moyen d’obtenir les apk
s que vous ne pouvez pas trouver, sur un périphérique enraciné, est avec rom tool box .
Effectuez une sauvegarde à l'aide du gestionnaire d'applications, puis allez à storage/emulated/appmanager
et vérifiez soit sauvegarde de l'application système ou sauvegarde de l'application utilisateur .
Pour trouver une apk
, téléchargez et installez Bluetooth App Sender à partir du Play Store. Une fois l'installation terminée, ouvrez Bluetooth App Sender. Il affichera toutes les applications (.apk)
installées sur votre appareil, puis vous pourrez facilement transférer l'application sur votre PC via Bluetooth.
Contrairement à ce qui est écrit dans 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 ce que j’ai fait sur mon application ( here ). 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 d'accès complet de l'APK de l'application installée.
Eh bien, je suis venu à ce billet parce que je voulais réinstaller une application qui me plaisait beaucoup . Si tel est votre cas, il suffit d'aller sur Google Play et de rechercher Mes applications, l'onglet Tous, et vous trouverez le moyen de le réinstaller. une application que vous avez aimé. J'ai rencontré un problème que je ne pouvais pas trouver en recherchant une application, mais c'était là dans Mes applications pour pouvoir le réinstaller dans mon nouveau mobile;)