wake-up-neo.com

Wie bekomme ich eine APK-Datei von einem Android-Gerät?

Wie bekomme ich die apk-Datei von einem Android-Gerät? Oder wie übertrage ich die apk-Datei von Gerät zu System?

405
Finder

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)

90
Maurits Rijk

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
1322
Yojimbo

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.

102
Faris Al-Abed

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

51
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)
17
RVR

Ein Liner, der für alle Android-Versionen geeignet ist:

adb Shell 'cat `pm path com.example.name | cut -d':' -f2`' > app.apk
9
Vitaly Dyatlov

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.

8
elcuco

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

6
aditya.gupta

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\""
}
  • Beispiel : Android_pull_apk com.Android.contacts
  • Hinweis : So identifizieren Sie das Paket: adb Shell pm list packages
6
Pedro Rodrigues

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.

5
m01

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.

5
SamG

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.

4
HEXcube

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.

3
Jeff Brateman

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/

3
Pramod Mahato

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/
2
Farid Haq

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;)

1
user3350906

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.

  1. ES File Explorer Dateimanager
  2. ASTRO Cloud & File Manager 3. Software-Datenkabel

Ich hoffe es hilft dir.

1
surhidamatya

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:

  1. Ursprünglicher Ansatz funktionierte bei Android 7 nicht für mich: 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.
  2. Wenn es ohne Argumente gestartet wird, listet mein Skript nur alle verfügbaren Pakete auf. Wenn ein Teil des Paketnamens angegeben ist, wird versucht, den vollständigen Paketnamen zu erraten. Es wird sich beschweren, wenn es mehrere mögliche Erweiterungen gibt.
  3. Ich schreibe den Zielpfad nicht fest. Stattdessen werden APKs im aktuellen Arbeitsverzeichnis gespeichert.

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\""
0
MarSoft

Keine Root-Methode und keine ADB-Tools erforderlich. Installieren Sie MyAppSharer app aus dem Play Store.

0
moberme

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)
0
vanduc1102

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;
}
  1. Stellen Sie sicher, dass sich adb (.exe) in Ihrem Pfad oder im gleichen Verzeichnis befindet
  2. Verbinden Sie Ihr Telefon
  3. Führen Sie download-apk.pl aus

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.
0
Gerben Versluis

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.

0
Sirsendu
  1. Öffnen Sie die App, aus der Sie die apk auf Ihrem Telefon extrahieren möchten.
  2. Holen Sie sich die aktuell geöffnete App mit:

    adb Shell dumpsys activity activities | grep mFocusedActivity
    
  3. 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
0
Bryan Ibrahim