Question

Comment puis-je obtenir le fichier APK à partir d'un appareil Android? Ou comment puis-je transférer le fichier apk du périphérique sur le système?

Était-ce utile?

La solution

Utilisez adb . Avec adb traction vous pouvez copier des fichiers de votre appareil à votre système, lorsque le périphérique est connecté avec USB.

Bien sûr, vous devez également les permissions nécessaires pour accéder au répertoire de votre fichier. Si non, vous devez d'abord l'appareil racine.


Si vous trouvez que la plupart des APK sont nommés « base.apk », vous pouvez également utiliser cette commande d'une ligne pour tirer tous les APK hors d'un téléphone, vous pouvez accéder à tout changement de nom des noms « base.apk » au nom du paquet . Cela corrige également le répertoire introuvable problème 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: pas stat objet à distance » que vous indique ne disposez pas des autorisations nécessaires. J'ai couru ceci sur une Moto NON enracinée Z2 et a pu télécharger tous les APK Je ne l'ai pas désinstaller (voir ci-dessous), sauf sur youtube.

adb shell pm uninstall --user 0 com.android.cellbroadcastreceiver   <--- kills presidential alert app!

(pour les utilisateurs de vue exécuter adb utilisateurs liste h shell) Ceci est un moyen de supprimer / désinstaller (pas de téléphone, car il revient avec réinitialisation d'usine) presque ANY application sans applications racine de système, y compris (indice de l'application de mise à jour ennuyeux qui met à jour votre ligne téléphonique ou non peut être trouvée par grep pour « ccc »)

Autres conseils

Aucune de ces suggestions de travail pour moi, car Android a été l'ajout d'un numéro de séquence au nom du package pour produire le nom final du fichier APK. Sur les versions les plus récentes d'Android (Oreo et Pie), une chaîne aléatoire imprévisible est ajoutée. La séquence suivante de commandes est ce qui a fonctionné pour moi sur dispositif non enraciné :

1) déterminer le nom du paquet de l'application, par exemple, "Com.example.someapp". Passer cette étape si vous connaissez déjà le nom du paquet.

adb shell pm list packages

Regardez dans la liste des noms de paquets et essayer de trouver une correspondance entre l'application en question et le nom du package. Ceci est généralement facile, mais notez que le nom du package peut être sans aucun rapport avec le nom de l'application. Si vous ne pouvez pas reconnaître l'application de la liste des noms de paquets, essayez de trouver l'application dans Google Play à l'aide d'un navigateur. L'URL pour une application dans Google Play contient le nom du package.

2) Obtenir 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
    paquet: /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 à la zone de développement.

adb pull /data/app/com.example.someapp-2.apk path/to/desired/destination

Aucune racine est nécessaire:

Ce code obtenir les paquets 3ème partie chemin avec le nom afin que vous puissiez identifier facilement votre APK

adb shell pm list packages -f -3

la sortie sera

  paquet

: /data/app/XX.XX.XX.apk=YY.YY.YY

maintenant tirer ce package en utilisant le code ci-dessous:

adb pull /data/app/XX.XX.XX.apk

si vous avez exécuté ci-dessus cmd dans C:>\, vous trouverez ce paquet là.

Je l'ai vu que beaucoup de solutions à ce problème soit vous devez la racine de votre téléphone ou vous devez installer une application. Puis, après beaucoup googler je suis arrivé ce solution pour les téléphones non enracinés / enracinés.

Pour la liste les applications que vous avez à ce jour.

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 mettre en place un mot de passe pour crypter votre sauvegarde

Cela va créer un fichier nommé backup.ap, mais vous ne pouvez toujours pas 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 la teneur en goudron et il est fait.

espérons que cela fonctionne 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)

Une doublure qui fonctionne pour toutes les versions Android:

adb shell 'cat `pm path com.example.name | cut -d':' -f2`' > app.apk

Fin de la réponse de » @Yojimbo, ce que je l'ai fait (Linux / Mac uniquement, ne fonctionnera pas hors de la boîte sous Windows ... peut-être dans le shell bash GIT):

for i in $(adb shell pm list packages -f -3 | cut -d= -f 1 | cut -d ":" -f 2); do adb pull $i; done

Ceci est bash laid, mais fonctionne:)

EDIT: Il ne fonctionne plus sur AndroidM: tous les fichiers sont nommés « base.apk » sous un autre dir. Devrait ê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\""
}
  • Exemple : android_pull_apk com.android.contacts
  • Remarque : Pour identifier le paquet: adb shell pm list packages

Les étapes pour télécharger l'APK du périphérique au bureau

A) Assurez-vous que votre course (émulateur / réel Device). Pour utiliser vérifier cette commande

adb devices

B) Sélectionner toute la liste des paquets disponibles installé dans 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. Formez notre cas, je choisis ce package (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, Pour télécharger l'APK de votre (émulateur / périphérique 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: Essayer de tirer ce fichier CertInstaller.apk dans votre machine locale (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/

Comme dit ci-dessus, vous pouvez obtenir l'APK en utilisant la commande de traction dans adb.

Depuis, 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 est là.

Ensuite, utilisez la commande adb - ADB traction /data/data/appname.apk

Si vous connaissez (ou si vous pouvez « deviner ») le chemin du .apk (il semble être du format /data/app/com.example.someapp-{1,2,..}.apk, alors vous pouvez simplement le copier de /data/app ainsi. Cette a même travaillé sur mon non enraciné, Stock téléphone Android.

Il suffit d'utiliser une application Terminal Emulator (comme celui-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 à partir de la carte SD à l'endroit où vous voulez (ou le joindre à un e-mail, etc.). Le dernier bit peut être techniquement en option, mais il rend votre vie beaucoup plus facile 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 éventuellement Android 6, mais je suis incapable de vérifier]. Vous ne pouvez pas tirer les fichiers .apk directement sous Nougat (sauf en mode racine, mais qui nécessite un téléphone enraciné). Mais, vous pouvez copier le .apk vers un autre chemin (par exemple / sdcard / Télécharger) sur le téléphone à l'aide adb shell, vous pouvez faire une traction adb du chemin alternatif.

Essayez cette commande bash d'une doublure 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 script Firelord . Je viens tous les retitré APK à leurs noms de paquets pour résoudre le problème avec script elcuco , à savoir le même fichier base.apk obtenir sur Android 6.0 écrasé "Marshmallow" et au-dessus.

Notez que cette commande sauvegarde uniquement les applications 3ème partie, coz je ne vois pas le point de sauvegarde intégré des applications. Mais si vous voulez système de sauvegarde applications aussi, tout simplement omettre l'option -3.

Voici comment vous le faites:

Téléchargez et installez APK Extractor dans votre appareil. Il est gratuit et est compatible dans presque tous les appareils Android. Un autre point positif est qu'il ne nécessite même pas racine ou quoi que ce soit au travail. Une fois que vous l'avez installé, lancez-le. Ici, vous trouverez une liste des applications qui sont dans votre appareil, incluant les applications que vous avez installées plus tard, ainsi que les applications du système. Appuyez longuement sur une application que vous voulez extraire (vous pouvez sélectionner plusieurs 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 comme AppName_AppPackage_AppVersionName_AppVersionCode.apk, qui sera enregistré dans le chemin / sdcard / ExtractedApks / par défaut.

Pour une description détaillée comment extraire les fichiers apk dans Android , visitez le: http://appslova.com/how-to -extract-apk-fichiers-en-android /

Toutes ces réponses nécessitent plusieurs étapes pour chaque fichier apk récupéré à partir du périphérique. 1. déterminer le nom du paquet, 2. trouver le fichier, et 3. le télécharger. J'ai construit simple apk_grabber script Python pour le faire pour toute application qui correspond à une expression rationnelle donnée, et puis ceux décompile APK dans les fichiers jar.

Je n'ai pas utilisé le code pour tirer fichier .apk du mobile, mais j'utilise un logiciel pour extraire APK fichier à partir du logiciel mobile et je l'ai utilisé sont ci-dessous avec lien de jeu de google:

  1. ES File Explorer Gestionnaire de fichiers
  2. ASTRO Cloud & Gestionnaire de fichiers 3. Logiciel Câble

it helps vous.

voulez très, très confortable solution à 1 minute?

juste vous cette application https://play.google .com / magasin / apps / détails? id = com.cvinfo.filemanager (smart gestionnaire de fichiers du jeu de google).

tap "apps", choisissez l'une et appuyez sur "backup". il finira sur votre système de fichiers dans le dossier app_backup;)

Encore un script bash (à savoir fonctionnera pour la plupart des systèmes basés sur unix). Sur la base de la réponse par Pedro Rodrigues , mais est légèrement plus facile à utiliser.

Améliorations par rapport à la version de Pedro:

  1. Approche originale ne fonctionne pas pour moi sur Android 7: adb pull se plaignait au sujet no such file or directory tout adb shell peut accéder au fichier. Par conséquent je approche différente, avec fichier temporaire.
  2. Une fois lancé sans argument, mon script simplement la liste de tous les paquets disponibles. Lorsque le nom de package partiel est fourni, il va essayer de deviner le nom complet du paquet. Il se plaindra s'il y a plusieurs extensions possibles.
  3. Je fais le chemin de destination non hardcode; au lieu APK sont enregistrés dans le répertoire de travail courant.

Enregistrer ce 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\""

simple est: Installer l'application « ShareIt » sur le téléphone. Maintenant, installez l'application shareit dans le PC ou un autre téléphone. Maintenant, à partir du téléphone, où l'application est installée, ShareIt ouvert et envoi. Sur un autre téléphone ou PC, ShareIt ouvert et recevoir.

  1. Ouvrez l'application que vous souhaitez extraire l'apk de votre téléphone.
  2. Obtenez l'application actuellement ouverte avec:

    adb shell dumpsys activity activities | grep mFocusedActivity
    
  3. Obtenez le chemin du nom du package

    adb shell pm path <packagename.apk>
    

4.Copiez le chemin que vous avez dans le répertoire sdcard

    adb shell cp /data/app/<packagename.apk> /sdcard

5.Pull l'apk

    adb pull /sdcard/base.apk

J'ai vraiment aimé toutes ces réponses. La plupart des scripts pour exporter et renommer tous ont été écrits en Bash. J'ai fait un petit script Perl qui fait la même chose (qui devrait fonctionner aussi bien en Perl pour Windows et Linux, testé uniquement 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;
}
  1. Assurez-vous adb (.exe) est dans votre chemin ou même répertoire
  2. Connectez votre téléphone
  3. Exécuter download-apk.pl

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 vous aidera pour quelqu'un qui est à la recherche d'un non technique Réponse

est simple bidouille

Télécharger le App Share/Send Pro d'application du magasin de jeu de Google. Sélectionnez l'application que vous voulez envoyer et de l'application d'envoi de la méthode.

J'utilise habituellement Bluetooth pour envoyer des applications à mon PC ou un autre téléphone.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top