Réponses:
Utilisez adb . Avec adb pull, vous pouvez copier des fichiers de votre appareil vers votre système, lorsque l'appareil est connecté via USB.
Bien sûr, vous avez également besoin des autorisations appropriées pour accéder au répertoire dans lequel se trouve votre fichier. Sinon, vous devrez d'abord rooter le périphérique.
Si vous constatez que de nombreux fichiers APK sont nommés "base.apk", vous pouvez également utiliser cette commande d'une ligne pour extraire tous les fichiers APK d'un téléphone auquel vous pouvez accéder tout en renommant tous les noms "base.apk" en nom de package. Cela corrige également le problème de répertoire introuvable pour les chemins APK avec des caractères apparemment aléatoires après le nom:
for i in $(adb shell pm list packages | awk -F':' '{print $2}'); do adb pull "$(adb shell pm path $i | awk -F':' '{print $2}')"; mv base.apk $i.apk 2&> /dev/null ;done
Si vous obtenez "adb: erreur: n'a pas réussi à stat objet distant" qui indique que vous ne disposez pas des autorisations nécessaires. Je l'ai exécuté sur un Moto Z2 NON rooté et j'ai pu télécharger TOUS les APK que je n'ai pas désinstallés (voir ci-dessous) sauf YouTube.
adb shell pm uninstall --user 0 com.android.cellbroadcastreceiver <--- kills presidential alert app!
(pour afficher les utilisateurs exécutent adb shell pm liste les utilisateurs) C'est un moyen de supprimer / désinstaller (pas du téléphone car il revient avec la réinitialisation d'usine) presque TOUTE application SANS racine INCLUANT les applications système (faites allusion à l'application de mise à jour ennuyeuse qui met à jour votre téléphone la ligne ou non peut être trouvée en cherchant "ccc")
adb shell pm list packages
, puis son chemin complet adb shell pm path your.package.name
depuis votre PC, vous pouvez simplementadb pull /full/path/to/your.apk
Aucune de ces suggestions n'a fonctionné pour moi, car Android ajoutait un numéro de séquence au nom du package pour produire le nom de fichier APK final. Sur les versions plus récentes d'Android (Oreo et Pie), une chaîne aléatoire imprévisible est ajoutée. La séquence de commandes suivante est ce qui a fonctionné pour moi sur un appareil non rooté :
1) Déterminez le nom du package de l'application, par exemple "com.example.someapp". Ignorez cette étape si vous connaissez déjà le nom du package.
adb shell pm list packages
Parcourez la liste des noms de packages et essayez de trouver une correspondance entre l'application en question et le nom du package. C'est généralement facile, mais notez que le nom du package peut être complètement indépendant du nom de l'application. Si vous ne pouvez pas reconnaître l'application dans la liste des noms de packages, essayez de trouver l'application dans Google Play à l'aide d'un navigateur. L'URL d'une application dans Google Play contient le nom du package.
2) Obtenez le nom de chemin complet du fichier APK pour le package souhaité.
adb shell pm path com.example.someapp
La sortie ressemblera à quelque chose
package: /data/app/com.example.someapp-2.apk
ou
package: /data/app/com.example.someapp-nfFSVxn_CTafgra3Fr_rXQ == / base.apk
3) En utilisant le nom de chemin complet de l'étape 2, tirez le fichier APK de l'appareil Android vers la boîte de développement.
adb pull /data/app/com.example.someapp-2.apk path/to/desired/destination
pm list packages
prend en charge le -f
drapeau, qui répertorie l'emplacement du .apk pour vous, comme package:/data/app/com.google.android.apps.maps-1.apk=com.google.android.apps.maps
. L'aide intégrée de pm est inutile, mais pm peut également filtrer les types de packages, voir developer.android.com/studio/command-line/adb.html#pm pour plus d'informations. EDIT: vient de remarquer que la réponse ci-dessous dit cela, mais cette réponse n'est pas aussi bien votée que celle-ci.
adb: error: remote object '/data/app/path.of.the.app-2/base.apk' does not exist
. Si je parcours ces dossiers avec un explorateur de fichiers, les dossiers sont vides.
adb shell
puis cp PathToApk /sdcard/
, puis en copiant à partir de la carte SD.
Aucune racine n'est requise:
Ce code obtiendra le chemin des packages tiers avec le nom afin que vous puissiez facilement identifier votre APK
adb shell pm list packages -f -3
la sortie sera
package: /data/app/XX.XX.XX.apk=YY.YY.YY
tirez maintenant ce paquet en utilisant le code ci-dessous:
adb pull /data/app/XX.XX.XX.apk
si vous avez exécuté au-dessus de cmd in C:>\
, vous y trouverez ce package.
-f -s
au lieu de-f -3
J'ai vu que de nombreuses solutions à ce problème, soit vous devez rooter votre téléphone ou vous devez installer une application. Ensuite, après beaucoup de recherches sur Google, j'ai obtenu cette solution pour les téléphones non rootés / rootés.
Pour répertorier les applications que vous avez obtenues jusqu'à présent.
adb shell pm list packages
Ensuite, vous pouvez sélectionner une application, par exemple Twitter
adb backup -apk com.twitter.android
Une chose importante ici est de ne pas configurer de mot de passe pour crypter votre sauvegarde
Cela va créer un fichier nommé backup.ap, mais vous ne pouvez toujours pas l'ouvrir. Pour cela, vous devez l'extraire à nouveau, mais en utilisant la commande dd.
dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar
Après cela, tout ce que vous avez à faire est d'extraire le contenu du goudron et c'est fait.
J'espère que cela fonctionne pour vous les gars
Étapes pour télécharger l'APK de l'appareil vers le bureau
A) Assurez-vous que votre fonctionnement (émulateur / appareil réel). Pour vérifier, utilisez cette commande
adb devices
B) Sélectionnez toute la liste des packages disponibles installée sur votre appareil. Vous pouvez utiliser la commande grep pour sélectionner le package spécifique que vous souhaitez télécharger.
adb shell pm list packages
adb shell pm list packages -f -3
Sortie (Liste des packages disponibles)
package:/data/app/com.example.mytestapplication-sOzKi5USzfbYLPNDmaaK6g==/base.apk=com.example.mytestapplication
package:/data/app/com.example.myapplication-nd1I4FGnTZnQ9PyRbPDHhw==/base.apk=com.example.myapplication
C) Copiez le package (que vous souhaitez télécharger) à partir du lien ci-dessus. Dans notre cas, je choisis ce package (com.example.myapplication)
Syntax : adb shell pm path [your_package_name]
Command: adb shell pm path com.example.myapplication
Production
package:/data/app/com.example.myapplication-nd1I4FGnTZnQ9PyRbPDHhw==/base.apk
D) Enfin, pour télécharger l'APK de votre (émulateur / appareil réel)
Syntax : adb pull /data/app/[your_package_name]-1/base.apk [your_destination_path]
Command: adb pull /data/app/com.example.myapplication-3j4CVk0Tb2gysElgjz5O6A==/base.apk /Users/$(whoami)/Documents/your_apk.apk
Exemple: essayer d'extraire ce fichier CertInstaller.apk sur votre ordinateur local (Mac)
adb pull /system/app/CertInstaller/CertInstaller.apk /Users/$(whoami)/Documents/APK/download_apk/
E) Confirmez dans votre annuaire local
ls -la /Users/$(whoami)/Documents/
C:\Users\xyz>adb shell pm list packages -f | findstr whatsapp
package:/data/app/com.whatsapp-1/base.apk=com.whatsapp
C:\Users\xyz>adb pull /data/app/com.whatsapp-1/base.apk Desktop
/data/app/com.whatsapp-1/base.apk: 1 f.... 13.8 MB/s (32803925 bytes in
2.269s)
Un liner qui fonctionne pour toutes les versions d'Android:
adb shell 'cat `pm path com.example.name | cut -d':' -f2`' > app.apk
En complétant la réponse de @Yojimbo, voici ce que j'ai fait (Linux / Mac uniquement, ne fonctionnera pas prêt à l'emploi sur Windows ... peut-être dans le shell bash de git):
for i in $(adb shell pm list packages -f -3 | cut -d= -f 1 | cut -d ":" -f 2); do adb pull $i; done
C'est moche bash, mais ça marche :)
EDIT: Cela ne fonctionne plus sur AndroidM: tous les fichiers sont nommés "base.apk" sous un autre répertoire. Doit être «trivial» à corriger.
Sur les systèmes Unix, vous pouvez essayer cette fonction:
function android_pull_apk() {
if [ -z "$1" ]; then
echo "You must pass a package to this function!"
echo "Ex.: android_pull_apk \"com.android.contacts\""
return 1
fi
if [ -z "$(adb shell pm list packages | grep $1)" ]; then
echo "You are typed a invalid package!"
return 1
fi
apk_path="`adb shell pm path $1 | sed -e 's/package://g' | tr '\n' ' ' | tr -d '[:space:]'`"
apk_name="`adb shell basename ${apk_path} | tr '\n' ' ' | tr -d '[:space:]'`"
destination="$HOME/Documents/Android/APKs"
mkdir -p "$destination"
adb pull ${apk_path} ${destination}
echo -e "\nAPK saved in \"$destination/$apk_name\""
}
android_pull_apk com.android.contacts
adb shell pm list packages
Comme indiqué ci-dessus, vous pouvez obtenir l'apk en utilisant la commande pull dans adb.
Depuis, vous parlez de vos applications installées, allez-y et regardez dans / data / app répertoire de votre système de fichiers Android. Vous y trouverez les fichiers APK.
Utilisez ensuite la commande adb - adb pull /data/data/appname.apk
Essayez cette commande one liner bash pour sauvegarder toutes vos applications:
for package in $(adb shell pm list packages -3 | tr -d '\r' | sed 's/package://g'); do apk=$(adb shell pm path $package | tr -d '\r' | sed 's/package://g'); echo "Pulling $apk"; adb pull -p $apk "$package".apk; done
Cette commande est dérivée du script de Firelord . Je viens de renommer toutes les apks en leurs noms de paquets pour résoudre le problème avec le script elcuco , c'est-à-dire le mêmebase.apk
fichier écrasé sur Android 6.0 "Marshmallow" et au-dessus.
Notez que cette commande sauvegarde uniquement les applications tierces, car je ne vois pas l'intérêt de sauvegarder les applications intégrées. Mais si vous souhaitez également sauvegarder les applications système, omettez simplement l' -3
option.
Si vous connaissez (ou si vous pouvez «deviner») le chemin vers le .apk
(il semble être du format /data/app/com.example.someapp-{1,2,..}.apk
vers, alors vous pouvez simplement le copier depuis/data/app
également. Cela a fonctionné même sur mon téléphone Android stock non rooté.
Utilisez simplement une application Terminal Emulator (comme celle-ci ) et exécutez:
# step 1: confirm path
ls /data/app/com.example.someapp-1.apk
# if it doesn't show up, try -2, -3. Note that globbing (using *) doesn't work here.
# step 2: copy (make sure you adapt the path to match what you discovered above)
cp /data/app/com.example.someapp-1.apk /mnt/sdcard/
Ensuite, vous pouvez le déplacer de la carte SD à l'endroit où vous le souhaitez (ou le joindre à un e-mail, etc.). Le dernier morceau peut être techniquement facultatif, mais il vous facilite la vie lorsque vous essayez de faire quelque chose avec le .apk
fichier.
Les procédures décrites ici ne fonctionnent pas pour Android 7 (Nougat) [et peut-être Android 6, mais je ne peux pas vérifier]. Vous ne pouvez pas extraire les fichiers .apk directement sous Nougat (sauf en mode root, mais cela nécessite un téléphone rooté). Mais, vous pouvez copier le fichier .apk vers un autre chemin (par exemple / sdcard / Download) sur le téléphone à l'aide du shell adb, puis vous pouvez effectuer une extraction adb à partir du chemin alternatif.
adb shell
commandes du commentaire de @Isa A) a bien fonctionné pour moi sur Android 7.1.1, pas enracinée.
Obtenez l'application actuellement ouverte avec:
adb shell dumpsys activity activities | grep mFocusedActivity
Obtenez le chemin d'accès au nom du package
adb shell pm path <packagename.apk>
4. Copiez le chemin d'accès que vous avez obtenu dans le répertoire sdcard
adb shell cp /data/app/<packagename.apk> /sdcard
5.Tirez l'apk
adb pull /sdcard/base.apk
Éditer
Si l'étape n ° 2 ne fonctionne pas, utilisez ceci:
adb shell dumpsys window windows | grep mCurrentFocus
Voici comment procéder:
Téléchargez et installez APK Extractor sur votre appareil. Il est gratuit et compatible avec presque tous les appareils Android. Un autre point positif est qu'il n'a même pas besoin de root ou quoi que ce soit pour fonctionner. Après l'avoir installé, lancez-le. Vous y verrez une liste des applications présentes sur votre appareil, qui incluent les applications que vous avez installées ultérieurement, ainsi que les applications système. Appuyez longuement sur n'importe quelle application que vous souhaitez extraire (vous pouvez sélectionner plusieurs ou toutes les applications à la fois), puis cliquez sur l'option d'extraction que vous voyez en haut. Vous aurez également la possibilité de partager via Bluetooth ou messagerie. Vous avez terminé, vous verrez les applications extraites comme AppName_AppPackage_AppVersionName_AppVersionCode.apk, qui seront enregistrées dans le chemin / sdcard / ExtrolvedApks / par défaut.
Pour une description détaillée de la façon d'extraire des fichiers apk dans Android , visitez: http://appslova.com/how-to-extract-apk-files-in-android/
Toutes ces réponses nécessitent plusieurs étapes pour chaque fichier apk récupéré de l'appareil. 1. déterminer le nom du package, 2. trouver le fichier et 3. le télécharger. J'ai construit un apk_grabber
script python simple pour le faire pour n'importe quelle application qui correspond à une expression régulière donnée, puis décompile ces apks dans des fichiers jar.
Je n'ai pas utilisé de code pour extraire le fichier .apk du mobile, mais j'ai utilisé un logiciel pour extraire le fichier .apk du mobile et les logiciels que j'ai utilisés sont ci-dessous avec le lien Google Play:
J'espère que cela vous aide.
vous voulez une solution très, très confortable de 1 minute?
juste vous cette application https://play.google.com/store/apps/details?id=com.cvinfo.filemanager (gestionnaire de fichiers intelligent de google play).
appuyez sur "applications", choisissez-en une et appuyez sur "sauvegarde". il se retrouvera sur votre système de fichiers dans le app_backup
dossier;)
Aucun outil Root et aucun outil ADB requis. Installez l' application MyAppSharer à partir du Play Store.
j'ai un does not exist error
Voici comment je le fais fonctionner
adb shell pm list packages -f | findstr zalo
package:/data/app/com.zing.zalo-1/base.apk=com.zing.zalo
adb shell
mido:/ $ cp /data/app/com.zing.zalo-1/base.apk /sdcard/zalo.apk
mido:/ $ exit
adb pull /sdcard/zalo.apk Desktop
/sdcard/zalo.apk: 1 file pulled. 7.7 MB/s (41895394 bytes in 5.200s)
Encore un autre script bash (c'est-à-dire qui fonctionnera pour la plupart des systèmes basés sur Unix). Basé sur la réponse de Pedro Rodrigues , mais est légèrement plus facile à utiliser.
Améliorations par rapport à la version de Pedro:
adb pull
continuait de se plaindre no such file or directory
pendant que adb shell
je pouvais accéder au fichier. J'ai donc utilisé une approche différente, avec un fichier temporaire.Enregistrez-le dans un fichier exécutable:
#!/bin/bash
# Obtain APK file for given package from the device connected over ADB
if [ -z "$1" ]; then
echo "Available packages: "
adb shell pm list packages | sed 's/^package://'
echo "You must pass a package to this function!"
echo "Ex.: android_pull_apk \"com.android.contacts\""
exit 1
fi
fullname=$(adb shell pm list packages | sed 's/^package://' | grep $1)
if [ -z "$fullname" ]; then
echo "Could not find package matching $1"
exit 1
fi
if [ $(echo "$fullname" | wc -l) -ne 1 ]; then
echo "Too many packages matched:"
echo "$fullname"
exit 1
fi
echo "Will fetch APK for package $fullname"
apk_path="`adb shell pm path $fullname | sed -e 's/package://g' | tr '\n' ' ' | tr -d '[:space:]'`"
apk_name="`basename ${apk_path} | tr '\n' ' ' | tr -d '[:space:]'`"
destination="${fullname}.apk"
tmp=$(mktemp --dry-run --tmpdir=/sdcard --suffix=.apk)
adb shell cp "${apk_path}" "$tmp"
adb pull "$tmp" "$destination"
adb shell rm "$tmp"
[ $? -eq 0 ] && echo -e "\nAPK saved in \"$destination\""
Le plus simple est: Installez l'application "ShareIt" sur le téléphone. Installez maintenant l'application shareIt sur un PC ou un autre téléphone. À partir du téléphone, où l'application est installée, ouvrez ShareIt et envoyez. Sur un autre téléphone ou PC, ouvrez ShareIt et recevez.
J'ai vraiment aimé toutes ces réponses. La plupart des scripts à exporter et à renommer tous ont été écrits en Bash. J'ai fait un petit script Perl qui fait de même (qui devrait fonctionner à la fois en Perl pour Windows et Linux, uniquement testé sur Ubuntu).
download-apk.pl
#!/usr/bin/perl -w
# Automatically export all available installed APK's using adb
use strict;
print "Connect your device...\n";
system("adb", "wait-for-device");
open(my $OUT, '-|', 'adb', 'shell', 'pm', 'list', 'package', '-f');
my @list = split(/\s*/, `adb shell pm list packages -f`);
my $count = 0;
while(my $line = <$OUT>) {
$line =~ s/^\s*|\s*$//g;
my ($type, $path, $package) = $line =~ /^(.*?):(.*)=(.*)$/ ? ($1,$2,$3) : die('invalid line: '.$line);
my $category = $path =~ /^\/(.*?)\// ? $1 : 'unknown';
my $baseFile = $path =~ /\/([^\/]*)$/ ? $1 : die('Unknown basefile in path: '.$path);
my $targetFile = "$category-$package.apk";
print "$type $category $path $package $baseFile >> $targetFile\n";
system("adb", "pull", $path);
rename $baseFile, $targetFile;
}
La sortie est quelque chose de similaire à:
# ./download-apk.pl
Connect your device...
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
package system /system/app/YouTube/YouTube.apk com.google.android.youtube YouTube.apk >> system-com.google.android.youtube.apk
5054 KB/s (11149871 bytes in 2.154s)
package data /data/app/com.ghostsq.commander-1/base.apk com.ghostsq.commander base.apk >> data-com.ghostsq.commander.apk
3834 KB/s (1091570 bytes in 0.278s)
package data /data/app/de.blinkt.openvpn-2/base.apk de.blinkt.openvpn base.apk >> data-de.blinkt.openvpn.apk
5608 KB/s (16739178 bytes in 2.914s)
etc.
Cela aidera quelqu'un qui recherche une réponse non technique
C'est un simple hack
Téléchargez l'application App Share/Send Pro
sur google play store. Sélectionnez l'application que vous souhaitez envoyer et la méthode d'envoi de l'application.
J'utilise généralement Bluetooth pour envoyer des applications à mon ordinateur ou à un autre téléphone.