Antworten:
Vorinstallierte Anwendungen befinden sich im /system/app
Ordner. 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.
Sie können package manager ( pm
) verwenden, um adb shell
Pakete aufzulisten:
adb shell pm list packages | sort
und um anzuzeigen, wo sich die .apk
Datei befindet:
adb shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk
Und adb pull
um die apk herunterzuladen.
adb pull data/app/com.king.candycrushsaga-1/base.apk
adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
Wenn Sie nur eine APK-Datei von etwas erhalten möchten, das Sie zuvor installiert haben, gehen Sie folgendermaßen vor:
Sie müssen Ihr Telefon nicht rooten, verwenden adb
oder schreiben.
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.
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).
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.
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 install
oder aus eclipse / android studio, wird die apk adb push
normalerweise in ein öffentliches Lese- und Schreibverzeichnis übertragen ( ) /data/local/tmp/
. Danach verwendet das Tool den pm
Befehl 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:
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/app
und /system/priv-app
.
Benutzer installierte App
Die meisten Apks fallen in diese Kategorie. Diese Apks werden normalerweise von Benutzern oder adb install
ohne -s
Option vom Marktplatz installiert . Sie finden sie im Verzeichnis /data/app
für ein gerootetes Gerät.
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 .apk
Datei. Es gibt einen Ordner mit Dateien für jede vorinstallierte App im Verzeichnis /system/app
oder /system/priv-app
für die neueste Android-Version.
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.
In / data / app, aber zum Kopierschutz glaube ich nicht, dass Sie darauf zugreifen können.
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.
Wenn Sie Eclipse goto DDMS und dort den Datei-Explorer verwenden, sehen Sie den Ordner System / Apps und die Apks sind dort
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.
Eine andere Möglichkeit, die apk
s, 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/appmanager
und überprüfen Sie entweder die System-App-Sicherung oder die Benutzer-App-Sicherung .
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.
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.
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;)