Wie erhalte ich die APK einer installierten App ohne Root-Zugriff?

195

Ich versuche, die APK-Datei einer installierten Android-App OHNE Root-Berechtigungen zu extrahieren.

Ich dachte, dass dies unmöglich ist, da sich alle APK-Dateien für Nicht-System-Apps in / data / app befinden und für den Zugriff auf diesen Ordner die Root-Berechtigung erforderlich ist. Dann stellte ich fest, dass es im Google Play Store zahlreiche Apps gibt, die anscheinend auch auf nicht gerooteten Geräten Zugriff auf die APK-Dateien haben.

Kann mir jemand sagen, wie das möglich ist? Gibt es keine Backup-Apps, die die APK-Dateien ohne Root sichern?

Pinas
quelle
2
Ich denke, diese Frage ist bereits beantwortet. Bitte werfen Sie
Wahib Ul Haq
2
Mögliches Duplikat von Wie bekomme ich eine APK-Datei von einem Android-Gerät?
Ciro Santilli 25 冠状 病 六四 事件 25
3
Ich habe gelesen, dass @pinas gefragt hat, wie dies programmgesteuert codiert werden soll. Dabei wird auf Apps verwiesen, die dies tun, als ob sie sagen würden: "Diese Apps tun es, aber wie?". Der Grund für die Warteschleife hier ist meiner Meinung nach deshalb falsch.
Richard Le Mesurier

Antworten:

379

Der Zugriff auf / data / app ist ohne Root-Berechtigung möglich. Die Berechtigungen für dieses Verzeichnis lauten rwxrwx - x. Wenn Sie die Berechtigung für ein Verzeichnis ausführen, können Sie darauf zugreifen. Wenn Sie jedoch keine Leseberechtigung haben, können Sie keine Auflistung des Inhalts erhalten. Um darauf zugreifen zu können, müssen Sie den Namen der Datei kennen, auf die Sie zugreifen möchten. Der Paketmanager von Android teilt Ihnen den Namen der gespeicherten Apk für ein bestimmtes Paket mit.

Verwenden Sie adb shell pm list packagesdazu die Befehlszeile, um die Liste der installierten Pakete abzurufen und das gewünschte Paket zu finden.

Mit dem Paketnamen können wir den tatsächlichen Dateinamen und den Speicherort der APK mithilfe von ermitteln adb shell pm path your-package-name.

Und wenn wir das vollständige Verzeichnis kennen, können wir endlich die ADB mit ziehen adb pull full/directory/of/the.apk

Dank an @tarn für den Hinweis, dass unter Lollipop der apk-Pfad lautet /data/app/your-package-name-1/base.apk

mah
quelle
33
Verwenden Sie dazu adb shell pm list packagesin der Befehlszeile die Liste der installierten Pakete, wählen Sie das gewünschte Paket aus, hängen Sie -1.apkes an und ziehen Sie es ab /data/app. Beispiel: Wenn der Paketname lautet org.mozilla.firefox, verwenden Sie adb pull /data/app/org.mozilla.firefox-1.apk.
Sschuberth
10
Um den tatsächlichen Dateinamen des APK zu erhalten, verwenden Sie den adb-Shell-PM-Pfad Ihres Paketnamens. Siehe diese Frage für eine detailliertere Antwort stackoverflow.com/questions/4032960/…
Yojimbo
2
für den Lutscher apk wird Pfad /data/app/your-package-name-1/base.apk
tarn
Das funktioniert bei mir nicht. Ich erhalte die folgende Fehlermeldung:adb: error: remote object '/data/app/com.Slack-1/base.apk' does not exist
0xcaff
1
@ 0xcaff Android hat sich in den 5 Jahren seit dieser Antwort ziemlich verändert. Vielleicht ist dieser Weg eine dieser Änderungen. Sie sollten in der Lage sein, sich anzumelden und die Datei manuell zu suchen, um den für Ihre Version des Betriebssystems geeigneten Pfad zu finden.
Mah
55

Android hängt eine Sequenznummer an den Paketnamen an, um den endgültigen APK-Dateinamen zu erstellen (dies hängt möglicherweise von der Version des Android-Betriebssystems ab). Die folgende Befehlsfolge funktioniert auf einem nicht gerooteten Gerät :

  1. Rufen Sie den vollständigen Pfadnamen der APK-Datei für das gewünschte Paket ab.

    adb shell pm path com.example.someapp

    Dies ergibt die Ausgabe als : package:/data/app/com.example.someapp-2.apk.

  2. Ziehen Sie die APK-Datei vom Android-Gerät in die Entwicklungsbox.

    adb pull /data/app/com.example.someapp-2.apk

Der Speicherort von APK nach erfolgreichem Ziehen befindet sich unter ../sdk/platform-tools/base.apk auf Ihrem PC / Laptop.

Yojimbo
quelle
4
Kann bestätigen, dass diese Lösung auf einem nicht gerooteten Gerät funktioniert hat, erfordert jedoch die Kenntnis des Paketnamens vor dem ersten Befehl! Verwenden Sie 'adb shell pm list packages', um eine Liste aller Pakete auf dem Telefon zu erhalten, falls Sie den Paketnamen Ihrer gewünschten App nicht sicher sind
AndroidNoob
In welchen Ordner auf dem lokalen Computer des Abziehers geht die apk? EDIT: nvm, in welchem ​​Verzeichnis auch immer Sie sich befanden, als Sie den ADB-Pull machten ...
Adam Johns
@IgorGanapolsky versuchen, mit adb pull /data/app/com.example.someapp-2/base.apk
Chris - Jr
@zelanix nach adb pull, wo ich die .apk-Datei c kann. Vielen Dank
Vijaya Varma Lanke
21

Sie benötigen keine ROOT-Berechtigungen, um die Liste der installierten Apps abzurufen.

Sie können es mit Android PackageManager tun.

Unten finden Sie einen kleinen Code-Ausschnitt.

final PackageManager pm = getPackageManager();
//get a list of installed apps.
List<ApplicationInfo> packages =  pm.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo packageInfo : packages) {
    Log.d(TAG, "Installed package :" + packageInfo.packageName);
    Log.d(TAG, "Apk file path:" + packageInfo.sourceDir);
}
Sagar Waghmare
quelle
7
  1. Überprüfen Sie die Liste der installierten apk's (der folgende Befehl listet auch den Pfad, in dem es installiert ist, und den Paketnamen auf). adb shell pm list pakete -f
  2. Verwenden Sie adb pull / package_path / package name / path_in_pc ( Paketpfad und Paketname, die Sie über Befehl 1 erhalten können.)
goldy021
quelle
6

Wenn Sie die Entwicklung von Eclipse für Android installiert haben:

  • Verwenden Sie Ihr Gerät als Debugging-Gerät. Auf Ihrem Telefon: Einstellungen> Anwendungen> Entwicklung und USB-Debugging aktivieren, siehe http://developer.android.com/tools/device.html
  • Öffnen Sie in Eclipse das DDMS-Fenster: Fenster> Perspektive öffnen> Andere ...> DDMS, siehe http://developer.android.com/tools/debugging/ddms.html
  • Wenn Sie Ihr Gerät nicht sehen können, installieren Sie den USB-Treiber für Ihr Gerät (erneut)
  • Wählen Sie im mittleren Bereich die Registerkarte "Datei-Explorer" und gehen Sie zu System> App
  • Jetzt können Sie eine oder mehrere Dateien auswählen und dann oben auf das Symbol "Datei vom Gerät ziehen" klicken (rechts neben den Registerkarten).
  • Zielordner auswählen - tada!
anon
quelle
In / system / app gibt es nur System-Apps (auch vorinstallierte Apps genannt).
Arne.jans
6

Unter Nougat (7.0) wird die Android-Version ausgeführt, adb shell pm list packagesum die auf dem Gerät installierten Pakete aufzulisten. Dann renne adb shell pm path your-package-name, um den Pfad der apk zu zeigen. Nach der Verwendung von adb kopieren Sie das Paket in Downloads adb shell cp /data/app/com.test-1/base.apk /storage/emulated/0/Download. Dann ziehen Sie die apk von Downloads auf Ihren Computer, indem Sie ausführen adb pull /storage/emulated/0/Download/base.apk.

Buhiire Keneth
quelle
2

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

List PackageManager.getInstalledApplications () gibt Ihnen eine Liste der installierten Anwendungen, und ApplicationInfo.sourceDir ist der Pfad zur APK-Datei.

// in oncreate
   PackageManager pm = getPackageManager(); 
   for (ApplicationInfo app : pm.getInstalledApplications(0)) {
 Log.d("PackageList", "package: " + app.packageName + ", sourceDir: " + app.sourceDir);
 }

//output is something like
D/PackageList(5010): package: com.example.xmlparse, sourceDir: /data/app   /com.example.xmlparse-2.apk
D/PackageList(5010): package: com.examples.android.calendar, sourceDir: /data/app/com.examples.android.calendar-2.apk
D/PackageList(5010): package: com.facebook.katana, sourceDir: /data/app/com.facebook.katana-1.apk
D/PackageList(5010): package: com.facebook.samples.profilepicture, sourceDir: /data/app/com.facebook.samples.profilepicture-1.apk
D/PackageList(5010): package: com.facebook.samples.sessionlogin, sourceDir: /data/app/com.facebook.samples.sessionlogin-1.apk
D/PackageList(5010): package: com.fitworld, sourceDir: /data/app/com.fitworld-2.apk
D/PackageList(5010): package: com.flipkart.android, sourceDir: /data/app/com.flipkart.android-1.apk
D/PackageList(5010): package: com.fmm.dm, sourceDir: /system/app/FmmDM.apk
D/PackageList(5010): package: com.fmm.ds, sourceDir: /system/app/FmmDS.apk
Pankaj Arora
quelle
0

Ich habe einen Weg gefunden, den Paketnamen des APK auf einem Nicht-Root-Gerät abzurufen. es ist nicht so elegant, funktioniert aber die ganze Zeit.

Schritt 1 : Öffnen Sie auf Ihrem Gerät die Ziel-APK

Schritt 2 : Geben Sie im PC-Cmd-Fenster die folgenden Befehle ein:

 adb shell dumpsys activity a > dump.txt

Da die Ausgabe dieses Befehls zahlreich ist, wird empfohlen, in eine Datei umzuleiten.

Schritt 3 : Öffnen Sie diese dump.txt-Datei mit einem beliebigen Editor.

für Gerät vor Android 4.4:
Der Anfang der Datei würde folgendermaßen aussehen:

ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)  
  Main stack:  
  * TaskRecord{41aa9ed0 #4 A com.tencent.mm U 0}  
    numActivities=1 rootWasReset=true userId=0  
    affinity=com.tencent.mm  
    intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10600000 cmp=com.tencent.mm/.ui.LauncherUI}  
    realActivity=com.tencent.mm/.ui.LauncherUI  
    askedCompatMode=false  
    lastThumbnail=null lastDescription=null  
    lastActiveTime=19915965 (inactive for 10s)  
    * Hist #9: ActivityRecord{41ba1a30 u0 com.tencent.mm/.ui.LauncherUI}  
        packageName=com.tencent.mm processName=com.tencent.mm 

Der Paketname steht in der 3. Zeile, com.tencent.mm für dieses Beispiel.

für Android 4.4 und höher:
Die Ausgabe von dumpsys hat sich ein wenig geändert. Versuchen Sie, nach "Stapel Nr. 1" zu suchen. Der Paketname befindet sich sehr nahe darunter.

Suchen Sie auch nach "baseDir", Sie finden den vollständigen Pfad der apk-Datei!

Schwingen
quelle
-1

Öffnen Sie den ES Explorer -> drücken Sie die Menütaste in der linken oberen Ecke (drei horizontale Streifen) -> wählen Sie im Abschnitt Bibliotheken die Option APPs.

So erhalten Sie die Liste aller Benutzer-Apps. Finden Sie Ihre App und wählen Sie sie mit langem Drücken aus. Drücken Sie dann "Mehr" in der rechten unteren Ecke und wählen Sie "Senden". Dann können Sie verschiedene Optionen verwenden, z. B. können Sie "ES Save To" wählen, um die APK-Datei in Ihrem Home-Verzeichnis oder an einem anderen Ort zu speichern.

JenyaKh
quelle
-2

Oder Sie können "Bluetooth File Transfer" von Google Play abrufen und den Home-Ordner auf einstellen /system/. Dann können Sie sogar gehen /.

AJD
quelle