Comment puis-je obtenir le fichier apk depuis un appareil Android? Ou comment transférer le fichier apk d'un périphérique à un autre?
Utilisez adb . Avec adb pull, vous pouvez copier des fichiers de votre appareil sur votre système lorsque l’appareil est connecté à l’USB.
Bien entendu, vous devez également disposer des autorisations appropriées pour accéder au répertoire dans lequel se trouve votre fichier. Dans le cas contraire, vous devez d'abord rooter le périphérique.
Si vous constatez que de nombreux fichiers APK portent le nom "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 en renommant tout nom "base.apk" en nom de package. Cela corrige également le problème d'annuaire introuvable pour les chemins d'accès 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: échec de stat objet distant" qui indique que vous n'avez pas les autorisations nécessaires. Je l'ai exécuté sur un Moto Z2 non rooté et j'ai pu télécharger TOUS les fichiers APK que je n'ai pas désinstallés (voir ci-dessous), à l'exception de YouTube.
adb Shell pm uninstall --user 0 com.Android.cellbroadcastreceiver <--- kills presidential alert app!
(pour afficher les utilisateurs exécutant adb Shell pm list users) C’est un moyen de supprimer/désinstaller (pas du téléphone car il revient avec la réinitialisation usine) presque TOUTE APPLICATION SANS racine, y compris les applications système Astuce l'application de mise à jour ennuyeuse qui met à jour votre ligne téléphonique peut être trouvée par grepping pour "ccc")
Aucune de ces suggestions n'a fonctionné pour moi, car Android ajoutait un numéro de séquence au nom du package pour générer 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 celle qui a fonctionné pour moi sur un périphérique non rooted :
1) Déterminez le nom du package de l'application, par exemple. "com.example.someapp". Ignorez cette étape sivous connaissez déjà le nom du paquet.
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. Cela est généralement facile, mais notez que le nom du package peut ne pas avoir de lien avec le nom de l'application. Si vous ne pouvez pas reconnaître l'application dans la liste des noms de packages, essayez de la rechercher 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 comme
package: /data/app/com.example.someapp-2.apk
ou
package: /data/app/com.example.someapp-nfFSVxn_CTafgra3Fr_rXQ ==/base.apk
3) À l'aide du nom de chemin complet de l'étape 2, extrayez le fichier APK du périphérique Android vers la zone de développement.
adb pull /data/app/com.example.someapp-2.apk path/to/desired/destination
Aucune racine n'est requise:
Ce code obtiendra le chemin des paquets 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
maintenant, tirez ce paquet en utilisant le code ci-dessous:
adb pull /data/app/XX.XX.XX.apk
si vous avez exécuté ci-dessus cmd dans C:>\
, alors vous trouverez ce paquet là.
J'ai vu que de nombreuses solutions à ce problème, soit vous devez rooter votre téléphone, soit vous devez installer une application. Puis après beaucoup de recherches sur Google, j’ai eu cette solution pour les téléphones non enracinés.
Pour lister 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 chiffrer votre sauvegarde
Cela va créer un fichier nommé backup.ap, mais vous ne pouvez toujours pas l'ouvrir. Pour cela, vous devez 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 de goudron et c'est fait.
J'espère que ça marche pour vous les gars
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 Android:
adb Shell 'cat `pm path com.example.name | cut -d':' -f2`' > app.apk
Complétant la réponse de @Yojimbo, voici ce que j’ai fait (Linux/Mac uniquement, cela ne fonctionnera pas immédiatement sous 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, mais ça marche :)
EDIT: Il ne fonctionne plus sous AndroidM: tous les fichiers sont nommés "base.apk" sous un autre répertoire. Devrait être "trivial" pour résoudre.
Comme indiqué ci-dessus, vous pouvez obtenir l'apk en utilisant la commande pull dans adb.
Puisque vous parlez de vos applications installées, allez-y et regardez dans le répertoire/data/app de votre système de fichiers Android. Vous trouverez l'APK là-bas.
Utilisez ensuite la commande adb - adb pull /data/data/appname.apk
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
Si vous connaissez (ou si vous pouvez "deviner") le chemin d'accès au .apk
(il semble avoir le format /data/app/com.example.someapp-{1,2,..}.apk
à, alors vous pouvez simplement le copier à partir de /data/app
. Cela fonctionnait même avec mon téléphone Android enraciné, stock.
Utilisez simplement une application Terminal Emulator (telle que 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/
Vous pouvez ensuite le déplacer de la carte SD où vous le souhaitez (ou le joindre à un courrier électronique, etc.). Le dernier bit peut être techniquement optionnel, mais cela vous simplifie la vie lorsque vous essayez de faire quelque chose avec le fichier .apk
.
Les procédures décrites ici ne fonctionnent pas pour Android 7 (Nougat) [et peut-être Android 6, mais je suis incapable de vérifier]. Vous ne pouvez pas extraire les fichiers .apk directement sous Nougat (sauf en mode racine, mais cela nécessite un téléphone enraciné). Mais, vous pouvez copier le fichier .apk sur un autre chemin (par exemple,/sdcard/Download) à l'aide du shell adb, puis vous pouvez extraire un adb de ce chemin.
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 de Le script de Firelord . Je viens de renommer tous les apks en leurs noms de paquet pour résoudre le problème avec le script elcuco , c'est-à-dire le même fichier base.apk
écrasé sous Android 6.0 "Marshmallow" et les versions ultérieures.
Notez que cette commande ne sauvegarde que les applications tierces, car je ne vois pas l'intérêt de sauvegarder des applications intégrées. Mais si vous souhaitez également sauvegarder les applications système, omettez simplement l'option -3
.
Toutes ces réponses nécessitent plusieurs étapes pour chaque fichier apk récupéré à partir du périphérique. 1. déterminez le nom du paquet, 2. trouvez le fichier et 3. téléchargez-le. J'ai construit un simple script python apk_grabber
pour le faire pour toutes les applications qui correspondent à une expression rationnelle donnée, puis j'ai décompilé ces apks en fichiers jar.
Voici comment vous le faites:
Téléchargez et installez APK Extractor sur votre appareil. Il est gratuit et compatible avec presque tous les appareils Android. Un autre avantage est qu’il n’a même pas besoin de root ni de quoi que ce soit… .. Après l’avoir installé, lancez-le. Vous y verrez une liste des applications qui se trouvent sur votre appareil, y compris les applications que vous avez installées ultérieurement, ainsi que les applications du système. Appuyez longuement sur l'application que vous voulez extraire (vous pouvez sélectionner plusieurs applications ou toutes les applications à la fois), puis cliquez sur l'option d'extrait que vous voyez en haut. Vous aurez également la possibilité de partager via Bluetooth ou la messagerie . Vous avez terminé, vous verrez les applications extraites sous le nom AppName_AppPackage_AppVersionName_AppVersionCode.apk, qui seront enregistrées dans le chemin/sdcard/ExtreatedApks/par défaut.
Pour une description détaillée de comment extraire des fichiers apk sous Android , visitez: http://appslova.com/how-to-extract-apk-files-in-Android/
Étapes pour télécharger l'APK de l'appareil au bureau
A) Assurez-vous que vous utilisez (émulateur/périphérique réel). Pour vérifier utiliser cette commande
adb devices
B) Sélectionnez toute la liste de paquets disponibles installés 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. Je choisis ce paquet (com.example.myapplication)
Syntex: adb Shell pm path [your_package_name]
Command: adb Shell pm path com.example.myapplication
Sortie
package:/data/app/com.example.myapplication-nd1I4FGnTZnQ9PyRbPDHhw==/base.apk
D) Enfin, télécharger l'APK de votre (émulateur/appareil réel)
Syntex: 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: tentative 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) Confirmer dans votre répertoire local
ls -la /Users/$(whoami)/Documents/
voulez très, très confortable solution 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 "Sauvegarder". il se retrouvera sur votre système de fichiers dans le dossier app_backup
;)
Je n'ai pas utilisé de code pour extraire un fichier .apk depuis un mobile, mais j'utilise un logiciel pour extraire un fichier .apk depuis un mobile.
J'espère que cela vous aide.
Encore un autre script bash (c’est-à-dire que cela 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
n'arrêtait pas de se plaindre de no such file or directory
tandis que adb Shell
pouvait accéder au fichier. J'ai donc utilisé une approche différente, avec fichier temporaire.Enregistrez ceci 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\""
Méthode sans racine ni outils ADB requis . Installez MyAppSharer app à partir du Play Store.
J'ai un does not exist error
Voici comment je le fais fonctionne
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)
J'ai vraiment aimé toutes ces réponses ... La plupart des scripts à exporter et renommer ont tous été écrits en Bash ... J'ai créé un petit script Perl qui fait la même chose (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.
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 . Maintenant, à 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.
Obtenez l'application actuellement ouverte avec:
adb Shell dumpsys activity activities | grep mFocusedActivity
Obtenir le chemin du nom du paquet
adb Shell pm path <packagename.apk>
4.Copiez le chemin que vous avez trouvé dans le répertoire sdcard
adb Shell cp /data/app/<packagename.apk> /sdcard
5. Tirez l'apk
adb pull /sdcard/base.apk