wake-up-neo.com

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

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

Ich dachte, dies sei unmöglich, da sich alle APK-Dateien für Nicht-System-Apps in/data/app befinden und der Zugriff auf diesen Ordner eine Root-Berechtigung erfordert. Dann habe ich festgestellt, dass es im Google Play Store zahlreiche Apps gibt, die auch auf nicht gerooteten Geräten Zugriff auf die APK-Dateien zu haben scheinen.

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

164
pinas

Der Zugriff auf/data/app ist ohne Root-Berechtigung möglich. Die Berechtigungen für dieses Verzeichnis lauten rwxrwx - x. Ausführungsberechtigung für ein Verzeichnis bedeutet, dass Sie auf das Verzeichnis zugreifen können. Aufgrund fehlender Leseberechtigung können Sie jedoch keine Auflistung des Inhalts aufrufen. Um auf das Verzeichnis zugreifen zu können, müssen Sie den Namen der Datei kennen, auf die Sie zugreifen. Der Paketmanager von Android teilt Ihnen den Namen der gespeicherten apk für ein bestimmtes Paket mit.

Verwenden Sie hierzu adb Shell pm list packages von der Befehlszeile aus, um die Liste der installierten Pakete abzurufen und das gewünschte Paket zu suchen.

Mit dem Paketnamen können wir den tatsächlichen Dateinamen und den Ort des APK mithilfe von adb Shell pm path your-package-name abrufen.

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

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

339
mah

Android fügt eine Sequenznummer an den Paketnamen an, um den endgültigen Namen der APK-Datei zu erzeugen (dies ist möglich, je nach Version des Android-Betriebssystems). Die folgende Befehlssequenz 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 gibt 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
    
46
Yojimbo

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

Sie können dies mit dem Android PackageManager tun.

Nachfolgend 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);
}
17
Sagar Waghmare
  1. Überprüfen Sie die Liste der installierten APKs (mit folgendem Befehl können Sie den Installationspfad und den Paketnamen angeben.) . adb Shell PM-Liste Pakete -f
  2. verwenden Sie adb pull/package_path/package name/path_in_pc (Paketpfad und Paketname können von obigem Befehl 1 abgerufen werden.)
6
goldy021

Wenn Sie Eclipse für Android-Entwicklung installiert haben:

  • Verwenden Sie Ihr Gerät als Debugger. 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 auf das Symbol "Eine Datei Vom Gerät ziehen" oben rechts (rechts neben den Registerkarten) klicken.
  • Zielordner auswählen - tada!
6
anon

Auf Nougat (7.0) Android-Version führen Sie adb Shell pm list packages aus, um die auf dem Gerät installierten Pakete aufzulisten . Führen Sie dann adb Shell pm path your-package-name aus, um den Pfad der apk ..__ anzuzeigen. 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..__ Ziehen Sie die apk von Downloads auf Ihren Computer, indem Sie adb pull /storage/emulated/0/Download/base.apk ausführen.

5
Buhiire Keneth

Ich habe einen Weg gefunden, um den Paketnamen des APK in einem Nicht-Root-Gerät abzurufen. Es ist nicht so elegant, funktioniert aber immer.

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 die Umleitung in eine Datei empfohlen.

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 befindet sich in der 3. Zeile, com.tencent.mm für dieses Beispiel.

für Android 4.4 und höher:
Die dumpsys-Ausgabe hat sich etwas geändert. Versuchen Sie, "Stack # 1" zu suchen. Der Name des Pakets wäre sehr nahe darunter.

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

0
Swing

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
0
Pankaj Arora

Ich habe einen 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)
0
vanduc1102