Réponses:
Les applications préinstallées sont dans le /system/app
dossier. 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.
Vous pouvez utiliser le gestionnaire de packages ( pm
) adb shell
pour lister les packages:
adb shell pm list packages | sort
et pour afficher où se trouve le .apk
fichier:
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
adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
Si vous souhaitez simplement obtenir un fichier APK de quelque chose que vous avez précédemment 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 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.
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).
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.
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 install
ou 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 pm
commande 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:
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/app
et /system/priv-app
.
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 install
sans -s
option. Vous pouvez les trouver dans le répertoire /data/app
d'un périphérique enraciné.
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 .apk
fichier. Il existe un dossier contenant des fichiers pour chaque application préinstallée dans le répertoire /system/app
ou /system/priv-app
pour 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 des applications protégées contre la copie.
Dans / data / app mais pour la protection contre la copie, je ne pense pas que vous puissiez y accéder.
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.
si vous utilisez eclipse goto DDMS, puis l'explorateur de fichiers, vous verrez le dossier System / Apps et les apks sont là
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.
Une autre façon d'obtenir les apk
s 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/appmanager
et vérifiez la sauvegarde de l'application système ou la sauvegarde de l'application utilisateur .
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.
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.
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;)