Wie bekomme ich die apk-Datei von einem Android-Gerät? Oder wie übertrage ich die apk-Datei von Gerät zu System?
Verwenden Sie adb . Mit adb pull können Sie Dateien von Ihrem Gerät auf Ihr System kopieren, wenn das Gerät über USB angeschlossen ist.
Natürlich benötigen Sie auch die richtigen Berechtigungen, um auf das Verzeichnis zuzugreifen, in dem sich Ihre Datei befindet. Wenn nicht, müssen Sie das Gerät zuerst rooten.
Wenn Sie feststellen, dass viele der APKs den Namen "base.apk" haben, können Sie mit diesem einzeiligen Befehl auch alle APKs von einem Telefon abrufen, auf das Sie zugreifen können, während Sie alle "base.apk" -Namen in den Paketnamen umbenennen. Dies behebt auch das Problem mit nicht gefundenen Verzeichnissen für APK-Pfade mit scheinbar zufälligen Zeichen nach dem Namen:
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
Wenn Sie "adb: error: failed to stat remote object" erhalten, bedeutet dies, dass Sie nicht über die erforderlichen Berechtigungen verfügen. Ich habe dies auf einem nicht verwurzelten Moto Z2 ausgeführt und konnte ALLE APKs herunterladen, die ich nicht deinstalliert habe (siehe unten), mit Ausnahme von YouTube.
adb Shell pm uninstall --user 0 com.Android.cellbroadcastreceiver <--- kills presidential alert app!
(um Benutzer anzuzeigen, die die Benutzer der AdB-Shell-PM-Liste ausführen) Dies ist eine Methode zum Entfernen/Deinstallieren (nicht vom Telefon, da es mit dem Zurücksetzen auf die Werkseinstellungen wiederhergestellt wurde) fast BELIEBIG App OHNE root EINSCHLIESSLICH System-Apps (Hinweis auf die ärgerliche Update-App, die Ihr Telefon aktualisiert oder nicht, indem Sie auf "ccc" klicken)
Keiner dieser Vorschläge hat für mich funktioniert, da Android eine Sequenznummer an den Paketnamen anhängt, um den endgültigen APK-Dateinamen zu erzeugen. Bei neueren Versionen von Android (Oreo und Pie) wird eine unvorhersehbare zufällige Zeichenfolge angefügt. Die folgende Befehlsfolge ist das, was auf einem nicht gerooteten Gerät für mich funktioniert hat:
1) Bestimmen Sie den Paketnamen der App, z. "com.example.someapp". Überspringen Sie diesen Schritt, wenn Sie den Paketnamen bereits kennen.
adb Shell pm list packages
Durchsuchen Sie die Liste der Paketnamen und versuchen Sie, eine Übereinstimmung zwischen der fraglichen App und dem Paketnamen zu finden. Dies ist normalerweise einfach, beachten Sie jedoch, dass der Paketname nicht mit dem Namen der App zusammenhängt. Wenn Sie die App nicht anhand der Liste der Paketnamen erkennen können, suchen Sie die App in Google Play mithilfe eines Browsers. Die URL für eine App in Google Play enthält den Paketnamen.
2) Rufen Sie den vollständigen Pfadnamen der APK-Datei für das gewünschte Paket ab.
adb Shell pm path com.example.someapp
Die Ausgabe sieht ungefähr so aus
package: /data/app/com.example.someapp-2.apk
oder
package: /data/app/com.example.someapp-nfFSVxn_CTafgra3Fr_rXQ ==/base.apk
3) Ziehen Sie die APK-Datei mit dem vollständigen Pfadnamen aus Schritt 2 vom Android-Gerät in die Entwicklungsbox.
adb pull /data/app/com.example.someapp-2.apk path/to/desired/destination
Es ist kein Root erforderlich:
Dieser Code erhält den Namen des Pakets von Drittanbietern mit dem Namen, sodass Sie Ihre APK leicht identifizieren können
adb Shell pm list packages -f -3
die Ausgabe wird sein
paket: /data/app/XX.XX.XX.apk=YY.YY.YY
jetzt ziehen Sie das Paket mit folgendem Code:
adb pull /data/app/XX.XX.XX.apk
wenn Sie über cmd in C:>\
ausgeführt haben, werden Sie dieses Paket dort finden.
Ich habe gesehen, dass es viele Lösungen für dieses Problem gibt, entweder müssen Sie Ihr Telefon rooten oder eine App installieren. Nach vielem googeln bekam ich diese Lösung für nicht gerootete/gerootete Telefone.
So listen Sie auf, welche Apps Sie bisher erhalten haben.
adb Shell pm list packages
Dann können Sie eine App auswählen, zum Beispiel Twitter
adb backup -apk com.Twitter.Android
Wichtig ist hier, dass Sie kein Kennwort für die Verschlüsselung Ihrer Sicherung festlegen.
Dadurch wird eine Datei mit dem Namen "backup.ap" erstellt, die Sie jedoch immer noch nicht öffnen können. Dafür müssen Sie es erneut extrahieren, jedoch mit dem Befehl dd.
dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar
Danach müssen Sie nur noch den Tar-Inhalt extrahieren und fertig.
Ich hoffe es funktioniert für euch
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)
Ein Liner, der für alle Android-Versionen geeignet ist:
adb Shell 'cat `pm path com.example.name | cut -d':' -f2`' > app.apk
Als Antwort auf die Antwort von @Yojimbo habe ich Folgendes getan (nur Linux/Mac wird unter Windows nicht direkt funktionieren).
for i in $(adb Shell pm list packages -f -3 | cut -d= -f 1 | cut -d ":" -f 2); do adb pull $i; done
Das ist hässlich bash, aber funktioniert :)
BEARBEITEN: Es funktioniert nicht mehr auf AndroidM: Alle Dateien werden unter einem anderen Verzeichnis "base.apk" genannt. Sollte "trivial" zu beheben sein.
Wie oben erwähnt, können Sie den apk erhalten, indem Sie den Pull-Befehl in adb verwenden.
Da Sie über Ihre installierten Anwendungen sprechen, schauen Sie im Verzeichnis/data/app Ihres Android-Dateisystems nach. Sie finden die APKs dort.
Verwenden Sie dann den Befehl adb - adb pull /data/data/appname.apk
Auf Unix-Systemen können Sie diese Funktion ausprobieren:
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
Wenn Sie den Pfad zu .apk
wissen (oder wenn Sie "raten" können) (es scheint scheint in dem Format /data/app/com.example.someapp-{1,2,..}.apk
zu sein, dann können Sie es auch aus /data/app
kopieren. Dies funktionierte sogar bei mir nicht verwurzelt, aktives Android-Telefon.
Verwenden Sie einfach eine Terminal-Emulator-App (wie this ) und führen Sie Folgendes aus:
# 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/
Dann können Sie es von der SD-Karte an einen beliebigen Ort verschieben (oder an eine E-Mail anhängen usw.). Das letzte Bit mag technisch optional sein, aber es macht Ihnen das Leben viel leichter, wenn Sie versuchen, etwas mit der .apk
-Datei zu tun.
Die hier beschriebenen Verfahren funktionieren nicht für Android 7 (Nougat) [und möglicherweise Android 6, aber ich kann sie nicht überprüfen]. Sie können die APK-Dateien nicht direkt unter Nougat abrufen (es sei denn, Sie befinden sich im Root-Modus, dies erfordert jedoch ein gerootetes Telefon). Sie können jedoch die .apk-Datei mithilfe der adb-Shell in einen alternativen Pfad (z. B./sdcard/download) auf dem Telefon kopieren. Anschließend können Sie einen Adb-Pull vom alternativen Pfad aus durchführen.
Führen Sie diesen einzeiligen Bash-Befehl aus, um alle Ihre Apps zu sichern:
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
Dieser Befehl wird von Firelords Skript abgeleitet. Ich habe gerade alle apks in ihre Paketnamen umbenannt, um das Problem mit elcucos Skript zu lösen, d. H. Dieselbe base.apk
-Datei, die auf Android 6.0 "Marshmallow" und höher überschrieben wird.
Beachten Sie, dass mit diesem Befehl nur Apps von Drittanbietern gesichert werden, da ich nicht den Sinn habe, integrierte Apps zu sichern. Wenn Sie jedoch auch System-Apps sichern möchten, lassen Sie die Option -3
einfach weg.
Alle diese Antworten erfordern mehrere Schritte für jede vom Gerät abgerufene APK-Datei. 1. Ermitteln Sie den Paketnamen, 2. suchen Sie die Datei und 3. laden Sie sie herunter. Ich baute ein einfaches apk_grabber
python-Skript , um dies für jede App zu tun, die einer bestimmten Regex entspricht, und dekompiliert dann diese apks in Jar-Dateien.
So machen Sie es:
Laden Sie den APK Extractor herunter und installieren Sie ihn auf Ihrem Gerät. Es ist kostenlos und in fast allen Android-Geräten kompatibel. Ein weiterer Pluspunkt ist, dass es nicht einmal root oder irgendetwas benötigt, um zu funktionieren . Nachdem Sie es installiert haben, starten Sie es. Dort sehen Sie eine Liste von Apps, die sich auf Ihrem Gerät befinden, einschließlich der später installierten Apps sowie der System-Apps. Drücken Sie lange auf eine App, die Sie extrahieren möchten (Sie können mehrere oder alle Apps gleichzeitig auswählen), und klicken Sie auf die Extraktionsoption, die Sie oben sehen. Sie haben auch die Möglichkeit, über Bluetooth oder Messaging zu teilen. Sie sind fertig und sehen die extrahierten Apps als AppName_AppPackage_AppVersionName_AppVersionCode.apk, die standardmäßig im Pfad/sdcard/ExtractedApks/gespeichert werden.
Eine ausführliche Beschreibung für das Extrahieren von APK-Dateien in Android finden Sie unter: http://appslova.com/how-to-extract-apk-files-in-Android/
Schritte zum Herunterladen von APK vom Gerät auf den Desktop
A) Stellen Sie sicher, dass Ihr Lauf (Emulator/reales Gerät) läuft. Um dies zu überprüfen, verwenden Sie diesen Befehl
adb devices
B) Wählen Sie alle verfügbaren Paketlisten aus, die in Ihrem Gerät installiert sind. Sie können den Befehl grep verwenden, um das bestimmte Paket auszuwählen, das Sie herunterladen möchten.
adb Shell pm list packages
adb Shell pm list packages -f -3
Ausgabe (Liste der verfügbaren Pakete)
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) Kopieren Sie das Paket (das Sie herunterladen möchten) vom obigen Link. Aus unserem Fall wähle ich dieses Paket (com.example.myapplication)
Syntex: adb Shell pm path [your_package_name]
Command: adb Shell pm path com.example.myapplication
Ausgabe
package:/data/app/com.example.myapplication-nd1I4FGnTZnQ9PyRbPDHhw==/base.apk
D) Zum Schluss APK von deinem (Emulator/echtes Gerät) herunterladen
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
Beispiel: Versuch, diese CertInstaller.apk-Datei auf Ihrem lokalen Computer (Mac) abzurufen
adb pull /system/app/CertInstaller/CertInstaller.apk /Users/$(whoami)/Documents/APK/download_apk/
E) Bestätigen Sie in Ihrem lokalen Verzeichnis
ls -la /Users/$(whoami)/Documents/
möchten Sie eine sehr komfortable 1-Minuten-Lösung?
nur diese App https://play.google.com/store/apps/details?id=com.cvinfo.filemanager (intelligenter Dateimanager von Google Play).
tippen Sie auf "Apps", wählen Sie eine aus und tippen Sie auf "Backup". es wird auf Ihrem Dateisystem im app_backup
-Ordner landen;)
Ich habe keinen Code zum Abrufen der .apk-Datei von einem mobilen Gerät verwendet, aber ich habe Software zum Extrahieren der .apk-Datei von einem mobilen Gerät und von meiner Software verwendet.
Ich hoffe es hilft dir.
Noch ein weiteres Bash-Skript (d. H. Funktioniert für die meisten Unix-basierten Systeme). Basierend auf die Antwort von Pedro Rodrigues , ist aber etwas einfacher zu bedienen.
Verbesserungen gegenüber Pedro's Version:
adb pull
klagte ständig über no such file or directory
, während adb Shell
auf die Datei zugreifen konnte. Daher habe ich einen anderen Ansatz mit temporärer Datei verwendet.Speichern Sie dies in einer ausführbaren Datei:
#!/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\""
Keine Root-Methode und keine ADB-Tools erforderlich. Installieren Sie MyAppSharer app aus dem Play Store.
Ich habe einen does not exist error
So mache ich es funktioniert
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)
Ich mochte all diese Antworten wirklich sehr. Die meisten Skripts zum Exportieren und Umbenennen waren alle in Bash geschrieben. Ich habe ein kleines Perl-Skript erstellt, das dasselbe tut (was sowohl für Windows als auch für Linux in Perl funktionieren sollte.) getestet auf 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;
}
Die Ausgabe ist ähnlich wie:
# ./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.
Das einfachste ist: Installieren Sie die ShareIt-App auf dem Telefon . Installieren Sie jetzt die shareIt-App auf einem PC oder einem anderen Telefon . Nun können Sie auf dem Telefon, auf dem die App installiert ist, ShareIt öffnen und senden . Öffnen Sie auf einem anderen Telefon oder PC ShareIt und empfangen Sie.
Holen Sie sich die aktuell geöffnete App mit:
adb Shell dumpsys activity activities | grep mFocusedActivity
Rufen Sie den Pfad zum Paketnamen ab
adb Shell pm path <packagename.apk>
4.Kopieren Sie den Pfad, den Sie zum Verzeichnis sdcard führten
adb Shell cp /data/app/<packagename.apk> /sdcard
5.Pullen Sie den apk
adb pull /sdcard/base.apk