Behält Android die APK-Dateien? wenn ja wo?

185

Behält Android nach der Installation einer Anwendung vom Marktplatz die APK-Datei bei?

Gibt es einen Standardspeicherort, an dem Android solche Dateien aufbewahren würde?

Gubatron
quelle

Antworten:

123

Vorinstallierte Anwendungen befinden sich im /system/appOrdner. Vom Benutzer installierte Anwendungen befinden sich in /data/app. Ich denke, Sie können nur zugreifen, wenn Sie ein gerootetes Telefon haben. Ich habe hier kein verwurzeltes Telefon, aber probieren Sie diesen Code aus:

public class Testing extends Activity {
    private static final String TAG = "TEST";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        File appsDir = new File("/data/app");

        String[] files = appsDir.list();

        for (int i = 0 ; i < files.length ; i++ ) {
            Log.d(TAG, "File: "+files[i]);

        }
    }

Es listet die Apks in meiner verwurzelten HTC-Magie und im Emu auf.

Macarse
quelle
Dies funktionierte wie ein Zauber auf Motorola Droid und auch auf Nexus One, beide nicht verwurzelt.
Gubatron
Ok, du hast nie gesagt, wofür du sie willst :)
Macarse
Ich möchte sie lesen und Dinge mit ihnen machen können. Zum Glück sind sie lesbar.
Gubatron
3
Gut ist, dass nicht nur die Dateien "auflistbar" sind, sondern auch lesbar, sodass sie meinem Zweck entsprechen.
Gubatron
Ich habe an anderer Stelle gelesen, dass die APKs in / data / app nur Apps entsprechen, die aus dem Play Store heruntergeladen wurden. Ist das richtig oder beinhaltet es irgendetwas, was der Benutzer installiert hat?
Christian
132

Sie können package manager ( pm) verwenden, um adb shellPakete aufzulisten:

adb shell pm list packages | sort

und um anzuzeigen, wo sich die .apkDatei befindet:

adb shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk

Und adb pullum die apk herunterzuladen.

adb pull data/app/com.king.candycrushsaga-1/base.apk
Mariusz Jamro
quelle
2
Jede App hat einen Ordner mit dem gleichen Namen wie der Paketname, aber am Ende '-1' oder '-2'. Irgendeine Idee warum?
Shadygoneinsane
Um den Pfad oder Namen der Zieldatei anzugeben,adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
manikanta
95

Wenn Sie nur eine APK-Datei von etwas erhalten möchten, das Sie zuvor installiert haben, gehen Sie folgendermaßen vor:

  1. Holen Sie sich AirDroid von Google Play
  2. Greifen Sie mit AirDroid über Ihren PC-Webbrowser auf Ihr Telefon zu
  3. Gehen Sie zu Apps und wählen Sie die installierte App aus
  4. Klicken Sie auf die Schaltfläche "Herunterladen", um die APK-Version dieser App von Ihrem Telefon herunterzuladen

Sie müssen Ihr Telefon nicht rooten, verwenden adboder schreiben.

Jan Przybylo
quelle
2
Abgestimmt, weil dies die Frage nicht wirklich beantwortet. Was wäre, wenn das OP ADB verwenden wollte, damit es auf Geräten verwendet werden kann, auf denen das Debuggen autorisiert ist, das Kennwort jedoch vergessen wurde oder der Bildschirm fehlerhaft ist?
Hack5
Einfachere Möglichkeit, eine Apk-Datei für ein nicht gerootetes Gerät zu erhalten.
Fahmi Hammadi
Danke. Upvoted, weil es die Frage beantwortet, indem es auf eine Weise sagt: "Es hält sie in / data, aber nur, wenn Sie Prozedur X
ausführen
26

Es gibt keinen Standardspeicherort. Sie können jedoch den PackageManager verwenden, um Informationen zu Paketen zu erhalten, und die ApplicationInfo-Klasse, die Sie von dort abrufen können, enthält verschiedene Informationen zu einem bestimmten Paket: den Pfad zu seiner APK, den Pfad zu seinem Datenverzeichnis, den Pfad zu einer Nur-Ressourcen-APK (für vorwärts gesperrte Apps) usw. Beachten Sie, dass Sie abhängig von Ihrer Beziehung zur anderen App möglicherweise die Berechtigung zum Lesen dieser Verzeichnisse haben oder nicht. Alle Apps können jedoch die Ressource .apk lesen (die auch die echte .apk für nicht vorwärts gesperrte Apps ist).

Wenn Sie nur in der Shell stöbern, befinden sich derzeit nicht vorwärts gesperrte Apps in /data/app/.apk. Der Shell-Benutzer kann eine bestimmte APK-Datei lesen, das Verzeichnis jedoch nicht auflisten. In einer zukünftigen Version wird die Namenskonvention geringfügig geändert. Verlassen Sie sich also nicht darauf, dass sie gleich bleibt. Wenn Sie jedoch den Pfad der APK vom Paketmanager erhalten, können Sie sie in der Shell verwenden.

Hackbod
quelle
2
Was ist eine "vorwärts gesperrte App"?
Tony Chan
1
Es ist ein alter Kopierschutzmechanismus, der die APK-Datei mit Berechtigungen installiert hat, mit denen diese Anwendung sie nur lesen konnte.
Hackbod
18

Vorinstallierte Apps befinden sich normalerweise in / system / app und vom Benutzer installierte Apps in / data / app.

Sie können "adb pull" verwenden, müssen jedoch den vollständigen Pfad der APK-Datei kennen. Auf dem Emulator können Sie mit "adb shell" + "ls" eine Verzeichnisliste abrufen. Auf einem Android-Gerät ist dies aus Sicherheitsgründen im Ordner "/ data" nicht möglich. Wie ermitteln Sie den vollständigen Pfad der APK-Datei?

Sie können eine vollständige Liste aller installierten Apps abrufen, indem Sie ein Programm schreiben, das den PackageManager abfragt. Kurzcode-Ausschnitt unten:

PackageManager  pm = getPackageManager();
List<PackageInfo> pkginfo_list = pm.getInstalledPackages(PackageManager.GET_ACTIVITIES);
List<ApplicationInfo> appinfo_list = pm.getInstalledApplications(0);
for (int x=0; x < pkginfo_list.size(); x++){             
  PackageInfo pkginfo = pkginfo_list.get(x);
  pkg_path[x] = appinfo_list.get(x).publicSourceDir;  //store package path in array
}

Sie können auch Apps finden, die solche Informationen geben. Es gibt viele von ihnen. Versuchen Sie dies (AppSender).

xmaslatte
quelle
9

Wenn Sie nach dem Pfad einer bestimmten App suchen, besteht eine schnelle und schmutzige Lösung darin, nur den Fehlerbericht zu lesen:

$ adb bugreport | grep 'dir=/data/app' 

Ich weiß nicht, dass dies eine vollständige Liste enthält, daher kann es hilfreich sein, die App zuerst auszuführen.

Tomwhipple
quelle
9

Vom Marktplatz installieren

Es ist das Verhalten des Marktplatzes, ob die apk nach der Installation beibehalten werden soll. Google Play behält die apk nach der Installation nicht bei. Andere Marktplätze von Drittanbietern weisen möglicherweise ein anderes Verhalten auf.

Installation vom Entwicklungs- / Debug-Tool (ADB, Eclipse, Android Studio)

Wenn wir die apk über das Debug-Tool installieren, direkt aufrufen adb installoder aus eclipse / android studio, wird die apk adb pushnormalerweise in ein öffentliches Lese- und Schreibverzeichnis übertragen ( ) /data/local/tmp/. Danach verwendet das Tool den pmBefehl zum Installieren und löscht die temporäre apk /data/local/tmp/nach der erfolgreichen Installation.

Wir könnten diese Informationen aus der Debug-Ausgabe wie folgt erhalten.

$ adb install bin/TestApplication.apk 
3155 KB/s (843375 bytes in 0.260s)
    pkg: /data/local/tmp/TestApplication.apk
Success

Wie das System die apk hält

Natürlich muss das System alle apks irgendwo speichern. Es gibt drei Stellen, an denen das System die Apks basierend auf den verschiedenen Arten von Apks aufbewahren kann:

  1. für Lager App

    Diese werden normalerweise vom Hersteller im Gerät geliefert, einschließlich der Kern-App für den Systembetrieb und des Google-Dienstes. Sie finden sie unter Verzeichnis /system/appund /system/priv-app.

  2. Benutzer installierte App

    Die meisten Apks fallen in diese Kategorie. Diese Apks werden normalerweise von Benutzern oder adb installohne -sOption vom Marktplatz installiert . Sie finden sie im Verzeichnis /data/appfür ein gerootetes Gerät.

  3. App auf SD-Karte

    Wenn die apk ihren Installationsort in SD-Karte mit android:installLocation="auto"in ihrem Manifest aktiviert , kann die App aus dem App-Manager-Menü des Systems auf SD-Karte verschoben werden. Diese apks befinden sich normalerweise im sicheren Ordner der SD-Karte /mnt/sdcard/asec.

    Eine weitere Möglichkeit, den Installationsort auf SD-Karte zu erzwingen, ist die Verwendung des Befehls adb install -s apk-to-install.apk.

Hinweis: Die Dateien für die vorinstallierte App befinden sich nicht mehr in einer einzigen .apkDatei. Es gibt einen Ordner mit Dateien für jede vorinstallierte App im Verzeichnis /system/appoder /system/priv-appfür die neueste Android-Version.

Alijandro
quelle
8

Sie können Apps mit ADB abrufen. Sie sind in / data / App /, glaube ich.

adb pull (location on device) (where to save)

Beachten Sie, dass Sie Ihr Telefon rooten müssen, um kopiergeschützte Apps abzurufen.

Bryan Denny
quelle
5

In / data / app, aber zum Kopierschutz glaube ich nicht, dass Sie darauf zugreifen können.

Robby Pond
quelle
2
Wie genau funktioniert eine App, mit der APK über Bluetooth geteilt werden kann? Wie machen Sie das?
Kleines Kind
5

Wenn Sie verwurzelt sind, laden Sie die App Root Explorer herunter. Bester Dateimanager für gerootete Benutzer. Wie auch immer, System / App hat alle Standard-Apks, die mit dem Telefon geliefert wurden, und data / apk hat alle Apks der Apps, die Sie installiert haben. Drücke einfach lange auf die gewünschte apk (während du im Root Explorer bist), gehe zu deinem / sdcard Ordner und füge sie einfach ein.

Tanzer
quelle
4

Verwenden Sie diese Option, um alle .apks unter / data / app / aufzulisten.

adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
Gilm
quelle
4
  • Daten / App
  • System / App
  • system / priv-app
  • mnt / asec (bei Installation auf SD-Karte)

Sie können die .apks von jedem von ihnen ziehen:

adb pull / mnt / asec

Ignorant
quelle
3

APK-Dateien befinden sich im Verzeichnis / data / app /. Mit dem ES File Explorer können wir auf diese .APK-Dateien zugreifen.

vgokul129
quelle
2

Wenn Sie Eclipse goto DDMS und dort den Datei-Explorer verwenden, sehen Sie den Ordner System / Apps und die Apks sind dort

Jawad Amjad
quelle
0

Als ich meine App auf dem Emulator installiert habe, wurde meine APK-Datei in angezeigt

data / app Dann habe ich ls data / app // verwendet, um zu sehen, ob es existiert oder nicht

Nachdem Sie Ihre App installiert haben, verwenden Sie einfach den Befehl ls vie shell und überprüfen Sie das gewünschte Verzeichnis. Dies hängt jedoch davon ab, welche Art von Anwendung Sie installieren möchten. Ich habe diese Methode verwendet, um Point zu installieren, wenn etwas nicht stimmt.

DeAviator
quelle
Ich versuche auch, Apks zu finden, aber ich habe festgestellt, dass Sie nicht alle Apks finden können. Daher schlage ich die Root-Methode vor. Ich konnte nicht alle installierten apks bekommen. Es ist also besser, Ihr Telefon zu rooten und alle Apks mit Titanium Backup zu erhalten und mehr Kontrolle über Ihr Telefon zu erlangen.
Jawad Amjad
0

Eine andere Möglichkeit, die apks, die Sie nicht finden können, auf einem gerooteten Gerät zu erhalten, ist die ROM-Toolbox .

Erstellen Sie eine Sicherung mit dem App-Manager storage/emulated/appmanagerund überprüfen Sie entweder die System-App-Sicherung oder die Benutzer-App-Sicherung .

Belastung
quelle
0

Einen finden apk, herunterladen und installieren Sie die Bluetooth - App Sender von Play Store. Öffnen Sie nach Abschluss der Installation den Bluetooth App Sender. Es werden alle (.apk)auf Ihrem Gerät installierten Apps angezeigt. Anschließend können Sie die App problemlos über Bluetooth auf Ihren PC übertragen.

Prem
quelle
0

Im Gegensatz zu dem, was auf der gewählten Antwort steht, benötigen Sie kein Root-Verzeichnis und es ist möglich, die APKs der installierten Apps abzurufen. So habe ich es in meiner App gemacht ( hier ). Beispiel:

List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);

Anschließend können Sie für jedes Element der Liste auf packageInfo.applicationInfo.sourceDir zugreifen. Dies ist der vollständige Pfad der APK der installierten App.

Android-Entwickler
quelle
-1

Nun, ich bin zu diesem Beitrag gekommen, weil ich eine App neu installieren wollte, die mir sehr gut gefallen hat. Wenn dies der Fall ist, gehen Sie einfach zu Google Play und suchen Sie nach "Meine Apps", der Registerkarte "Alle". Dort finden Sie eine Möglichkeit, eine App neu zu installieren, die Ihnen gefällt. Ich hatte ein Problem, das ich bei der Suche nach einer App nicht finden konnte, das sich jedoch in meinen Apps befand, damit ich es auf meinem neuen Handy neu installieren konnte;)

Sergio Abreu
quelle