Antworten:
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 zuerst das Gerät 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 dem nicht gefundenen Verzeichnis 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: Remote-Objekt konnte nicht angegeben werden" 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), außer Youtube.
adb shell pm uninstall --user 0 com.android.cellbroadcastreceiver <--- kills presidential alert app!
Dies ist eine Möglichkeit zum Entfernen / Deinstallieren (nicht vom Telefon, da es mit dem Zurücksetzen auf die Werkseinstellungen wiederhergestellt wird ). Fast JEDE App OHNE Root, EINSCHLIESSLICH System-Apps (Hinweis auf die nervige Update-App, die Ihr Telefon aktualisiert Linie es oder nicht kann durch Greifen nach "ccc" gefunden werden)
adb shell pm list packages
und den vollständigen Pfad adb shell pm path your.package.name
dann von Ihrem PC aus betrachten, können Sie einfachadb pull /full/path/to/your.apk
Keiner dieser Vorschläge hat bei mir funktioniert, da Android eine Sequenznummer an den Paketnamen anhängte, um den endgültigen APK-Dateinamen zu erstellen. Bei neueren Versionen von Android (Oreo und Pie) wird eine unvorhersehbare zufällige Zeichenfolge angehängt. Die folgende Befehlsfolge hat bei einem nicht gerooteten Gerät für mich funktioniert :
1) Bestimmen Sie den Paketnamen der App, z. B. "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 betreffenden App und dem Paketnamen zu finden. Dies ist normalerweise einfach, aber beachten Sie, dass der Paketname völlig unabhängig vom App-Namen sein kann. Wenn Sie die App anhand der Liste der Paketnamen nicht 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 wie das Paket: /data/app/com.example.someapp-2.apk
oder das
Paket: /data/app/com.example.someapp-nfFSVxn_CTafgra3Fr_rXQ == / base.apk
3) Ziehen Sie unter Verwendung des vollständigen Pfadnamens aus Schritt 2 die APK-Datei vom Android-Gerät in die Entwicklungsbox.
adb pull /data/app/com.example.someapp-2.apk path/to/desired/destination
pm list packages
unterstützt das -f
Flag, das den Speicherort der .apk für Sie auflistet, wie package:/data/app/com.google.android.apps.maps-1.apk=com.google.android.apps.maps
. Die integrierte pm-Hilfe ist nutzlos, aber pm kann auch Pakettypen filtern. Weitere Informationen finden Sie unter developer.android.com/studio/command-line/adb.html#pm . EDIT: habe gerade bemerkt, dass die Antwort unten dies sagt, aber diese Antwort ist bei weitem nicht so positiv wie diese.
adb: error: remote object '/data/app/path.of.the.app-2/base.apk' does not exist
. Wenn ich diese Ordner mit einem Dateibrowser durchsuche, sind die Ordner leer.
adb shell
und dann cp PathToApk /sdcard/
und dann von der SD-Karte kopiert habe.
Es ist keine Wurzel erforderlich:
Dieser Code erhält den Paketpfad 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
Ziehen Sie nun das Paket mit dem folgenden Code:
adb pull /data/app/XX.XX.XX.apk
Wenn Sie über cmd in ausgeführt haben C:>\
, finden Sie das Paket dort.
-f -s
anstelle von-f -3
Ich habe gesehen, dass viele Lösungen für dieses Problem entweder Sie müssen Ihr Telefon rooten oder Sie müssen eine App installieren. Dann habe ich nach langem googeln diese Lösung für nicht verwurzelte / verwurzelte Telefone bekommen.
Um aufzulisten, 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
Hierbei ist es wichtig, kein Kennwort zum Verschlüsseln Ihres Backups einzurichten
Dadurch wird eine Datei mit dem Namen backup.ap erstellt, die Sie jedoch immer noch nicht öffnen können. Dazu musst du es erneut extrahieren, aber mit dem Befehl dd.
dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar
Danach müssen Sie nur noch den Teerinhalt extrahieren und fertig.
Hoffe es funktioniert für euch
Schritte zum Herunterladen von APK vom Gerät auf den Desktop
A) Stellen Sie sicher, dass Sie laufen (Emulator / echtes Gerät). Verwenden Sie diesen Befehl, um dies zu überprüfen
adb devices
B) Wählen Sie alle verfügbaren Paketlisten aus, die auf Ihrem Gerät installiert sind. Mit dem Befehl grep können Sie das spezifische Paket auswä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) über den obigen Link. Aus unserem Fall wähle ich dieses Paket (com.example.myapplication)
Syntax : 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, um APK von Ihrem (Emulator / realen Gerät) herunterzuladen
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
Beispiel: Der 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/
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 funktioniert:
adb shell 'cat `pm path com.example.name | cut -d':' -f2`' > app.apk
Nachdem ich die Antwort von @Yojimbo vervollständigt habe, habe ich Folgendes getan (nur Linux / Mac, funktioniert unter Windows nicht sofort ... möglicherweise in der Bash-Shell von Git):
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, funktioniert aber :)
BEARBEITEN: Es funktioniert nicht mehr unter AndroidM: Alle Dateien heißen "base.apk" unter einem anderen Verzeichnis. Sollte "trivial" zu beheben sein.
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
Wie oben erwähnt, können Sie die apk mit dem Befehl pull in adb abrufen.
Da Sie über Ihre installierten Anwendungen sprechen, schauen Sie in der Datei / data / app nach Verzeichnis Ihres Android-Dateisystems nach. Dort finden Sie die APKs.
Verwenden Sie dann den Befehl adb - adb pull /data/data/appname.apk
Versuchen Sie diesen One-Liner-Bash-Befehl, 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 leitet sich aus dem Skript von Firelord ab . Ich habe gerade alle Apks in ihre Paketnamen umbenannt, um das Problem mit dem Skript von elcuco zu lösen , dh dasselbebase.apk
Datei, die unter Android 6.0 "Marshmallow" und höher überschrieben wird.
Beachten Sie, dass dieser Befehl nur Apps von Drittanbietern sichert, da ich nicht den Sinn sehe, integrierte Apps zu sichern. Wenn Sie jedoch auch System-Apps sichern möchten, lassen Sie die -3
Option einfach weg .
Wenn Sie den Pfad zum .apk
(es scheint das Format /data/app/com.example.someapp-{1,2,..}.apk
zu haben ) kennen (oder wenn Sie "erraten" können) , können Sie ihn einfach kopieren/data/app
. Dies funktionierte sogar auf meinem nicht verwurzelten Android-Handy.
Verwenden Sie einfach eine Terminal Emulator-App (wie diese ) 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 usw. anhängen). Das letzte Bit mag technisch optional sein, aber es erleichtert Ihnen das Leben erheblich, wenn Sie versuchen, etwas mit der .apk
Datei zu tun .
Die hier beschriebenen Verfahren funktionieren nicht für Android 7 (Nougat) [und möglicherweise für Android 6, aber ich kann es nicht überprüfen]. Sie können die APK-Dateien nicht direkt unter Nougat abrufen (außer im Root-Modus, dies erfordert jedoch ein gerootetes Telefon). Sie können die APK-Datei jedoch mithilfe der ADB-Shell in einen alternativen Pfad (z. B. / sdcard / Download) auf dem Telefon kopieren und anschließend einen ADB-Pull aus dem alternativen Pfad ausführen.
adb shell
Befehle aus dem Kommentar von @Isa A) funktionierte für mich unter Android 7.1.1 einwandfrei und nicht gerootet.
Holen Sie sich die aktuell geöffnete App mit:
adb shell dumpsys activity activities | grep mFocusedActivity
Holen Sie sich den Pfad zum Paketnamen
adb shell pm path <packagename.apk>
4.Kopieren Sie den Pfad, den Sie zum SD-Kartenverzeichnis erhalten haben
adb shell cp /data/app/<packagename.apk> /sdcard
5. Ziehen Sie die apk
adb pull /sdcard/base.apk
Bearbeiten
Wenn Schritt Nr. 2 nicht funktioniert, verwenden Sie Folgendes:
adb shell dumpsys window windows | grep mCurrentFocus
So geht's:
Laden Sie APK Extractor herunter und installieren Sie es auf Ihrem Gerät. Es ist kostenlos und mit fast allen Android-Geräten kompatibel. Ein weiterer Pluspunkt ist, dass nicht einmal root oder irgendetwas erforderlich ist, um zu funktionieren. Nachdem Sie es installiert haben, starten Sie es. Dort sehen Sie eine Liste der Apps auf Ihrem Gerät, 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 oben angezeigt wird. Sie haben auch die Möglichkeit, über Bluetooth oder Messaging zu teilen. Wenn Sie fertig sind, werden die extrahierten Apps als AppName_AppPackage_AppVersionName_AppVersionCode.apk angezeigt, die standardmäßig im Pfad / sdcard / ExtractedApks / gespeichert werden.
Eine detaillierte Beschreibung zum Extrahieren von APK-Dateien in Android finden Sie unter: http://appslova.com/how-to-extract-apk-files-in-android/
Alle diese Antworten erfordern mehrere Schritte für jede vom Gerät abgerufene Apk-Datei. 1. Bestimmen Sie den Paketnamen, 2. Suchen Sie die Datei und 3. Laden Sie sie herunter. Ich habe ein einfaches apk_grabber
Python-Skript erstellt , um dies für jede App zu tun, die einem bestimmten regulären Ausdruck entspricht, und diese Apks dann in JAR-Dateien dekompiliert.
Ich habe keinen Code zum Abrufen der APK-Datei vom Handy verwendet, aber ich habe Software zum Extrahieren der APK-Datei vom Handy verwendet. Die von mir verwendete Software ist unten mit dem Google Play-Link aufgeführt:
Hoffe es hilft dir.
Willst du eine sehr, sehr komfortable 1-Minuten-Lösung?
Nur Sie diese App https://play.google.com/store/apps/details?id=com.cvinfo.filemanager (Smart File Manager 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 ;)
Keine Root- und keine ADB-Tools erforderlich Methode. Installieren Sie die MyAppSharer- App aus dem Play Store.
Ich bekam ein does not exist error
So mache ich es
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)
Noch ein Bash-Skript (dh es funktioniert für die meisten Unix-basierten Systeme). Basierend auf der Antwort von Pedro Rodrigues , ist aber etwas einfacher zu bedienen.
Verbesserungen gegenüber Pedros Version:
adb pull
beschwerte mich immer wieder, no such file or directory
während ich auf adb shell
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\""
Am einfachsten ist: Installieren Sie die "ShareIt" -App auf dem Telefon. Installieren Sie jetzt die shareIt-App auf einem PC oder einem anderen Telefon. Öffnen Sie nun auf dem Telefon, auf dem die App installiert ist, ShareIt und senden Sie es. Öffnen Sie auf einem anderen Telefon oder PC ShareIt und empfangen Sie.
All diese Antworten haben mir sehr gut gefallen. Die meisten Skripte zum Exportieren und Umbenennen wurden in Bash geschrieben. Ich habe ein kleines Perl-Skript erstellt, das dasselbe tut (das sowohl in Perl für Windows als auch unter Linux funktionieren sollte und nur unter Ubuntu getestet wurde).
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.
Dies hilft jemandem, der nach einer nicht technischen Antwort sucht
Das ist ein einfacher Hack
Laden Sie die Anwendung App Share/Send Pro
aus dem Google Play Store herunter . Wählen Sie die App aus, die Sie senden möchten, und verwenden Sie die Methode zum Senden.
Normalerweise verwende ich Bluetooth, um Anwendungen an meinen PC oder ein anderes Telefon zu senden.