2012-03-28 15 views
15

Gibt es eine Möglichkeit, den anwendungsspezifischen Cache in Android dynamisch anzuzeigen? Ich speichere Bilder im Cache (/ data/data/my_app_package/cache) und bin zu 99% sicher, dass sie dort speichern, aber ich bin mir nicht sicher, wie lange sie bleiben.Wie kann ich den für Android spezifischen Cache anzeigen?

Wenn ich mit dem DDMS-Datei-Explorer in Eclipse in den Cache schaue, ist dieser immer leer. Ich habe auch versucht, das entsprechende Cache-Verzeichnis in ADB zu untersuchen und wieder ist es immer leer.

Irgendwelche Vorschläge?

Antwort

8

Wenn ADB nicht als root ausgeführt wird (wie bei einem Emulator), können Sie nichts unter/data anzeigen, es sei denn, eine Anwendung, die es besitzt, hat es lesbar gemacht. Außerdem können Sie die Verzeichnisstruktur nicht durchsuchen - Sie können nur Dateien auflisten, sobald Sie in ein Verzeichnis gelangen, in das Sie Zugriff haben, indem Sie explizit ihren Pfad eingeben.

Allgemein gesprochen haben Sie fünf Möglichkeiten:

  • die Untersuchung Sie im Besitz App

  • Markieren Sie die Dateien in Frage, wie öffentliche und etwas (adb shell oder adb pull) verwenden, in denen Sie kann einen vollständigen Pfadnamen eingeben, statt den Baum

  • Haben die Eigentümer App kopieren Sie das gesamte Verzeichnis auf der SD-Karte

  • zu versuchen, durchsuchen
  • einen Emulator oder wurzelt Gerät verwenden, wo adb (und damit den Zugang des DDM-Browser) als root ausführen kann (oder eine Wurzeldatei Explorer oder ein verwurzelten Gerät verwenden)

  • Verwendung ADB und den Lauf als Werkzeug mit einer debuggable apk zum Abrufen einer Befehlszeilenshell, die als Benutzer-ID der App ausgeführt wird.Für diejenigen, die mit der Befehlszeile Unix kann dies die effektivste sein (obwohl die Toolbox sh auf Android begrenzt ist, und nutzt seine winzigen Vokabular von Fehlermeldungen in irreführender Weise)

+0

Dies ist eine falsche Antwort, wie Sie Ihre eigene App-Daten, die durch 'adb' ohne Root-Rechte zugreifen kann, das heißt auch von echten entsperrten Geräten. Siehe meine Antwort. – Tamas

+3

@Tamas - Nein, das ist eine richtige Antwort, und ** erwähnt bereits ** die Möglichkeit des Laufs als Werkzeug, einschließlich seiner ** Limitierung ** erfordert eine Debug-APK, etwas, das Sie nicht erwähnt haben. –

2

Cache-Dateien werden zwar gespeichert in/data/data/my_app_package/cache

Stellen Sie sicher, um die Dateien zu speichern, die folgende Methode verwendet:

String cacheDir = context.getCacheDir(); 
File imageFile = new File(cacheDir, "image1.jpg"); 
FileOutputStream out = new FileOutputStream(imageFile); 
out.write(imagebuffer, 0, imagebufferlength); 

wo imagebuffer [] Bilddaten in Byte-Format enthält und imagebufferlength ist die Länge des Inhalts, der in den FileOutputStream geschrieben werden soll.

Jetzt können Sie sich DDMS Datei Explorer anschauen oder eine "adb shell" und cd nach/data/data/my_app_package/cache machen und ein "ls" machen. In diesem Verzeichnis finden Sie die Bilddateien, die Sie über den Code gespeichert haben.

Darüber hinaus ist aus Android Dokumentation:

Wenn Sie einige Daten cachen möchten, anstatt speichern sie beharrlich, sollten Sie getCacheDir() verwenden, eine Datei zu öffnen, die das interne Verzeichnis darstellt, in dem Ihre Anwendung sollte sparen temporäre Cache-Dateien.

Wenn auf dem Gerät wenig interner Speicherplatz verfügbar ist, löscht Android möglicherweise diese Cache-Dateien, um Speicherplatz freizugeben. Sie sollten sich jedoch nicht darauf verlassen, dass das System diese Dateien für Sie bereinigt. Sie sollten die Cache-Dateien immer selbst verwalten und innerhalb eines angemessenen Speicherplatzes bleiben, z. B. 1 MB. Wenn der Benutzer Ihre Anwendung deinstalliert, werden diese Dateien entfernt.

0

Hier ist der Code: ersetzen package_name durch Ihren spezifischen Paketnamen.

Intent i = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); 
i.addCategory(Intent.CATEGORY_DEFAULT); 
i.setData(Uri.parse("package:package_name")); 
startActivity(i); 
20

können Sie diesen Befehl verwenden, zum Auflisten der Dateien für die eigene debug apk:

adb shell run-as com.corp.appName ls /data/data/com.corp.appName/cache 

Und dieses Skript für aus dem Cache ziehen:

#!/bin/sh 
adb shell "run-as com.corp.appName cat '/data/data/com.corp.appNamepp/$1' > '/sdcard/$1'" 
adb pull "/sdcard/$1" 
adb shell "rm '/sdcard/$1'" 

Dann können Sie eine Datei ziehen aus dem Cache wie folgt:

./pull.sh cache/someCachedData.txt 

Root ist nicht erforderlich.

+1

Ja, run-as kann nützlich sein, aber es funktioniert nur mit einer Debug-APK. Auch das Tool ist bei mindestens einer Android-Version komplett defekt. –

+1

Ich bevorzuge diese Shell-Skript-Variante, mit der ich von jedem verschachtelten Verzeichnis und Dump zu einem anderen Ausgabedateinamen ziehen kann. Vielen Dank! 'adb shell" run-as $ 1 cat '/ Daten/Daten/$ 1/$ 2'> '/ sdcard/$ 3' "; adb ziehen "/ sdcard/$ 3"; adb shell "rm '/ sdcard/$ 3'" ' – qix

+1

nettes skript aber warum' cat' die datei anstatt einfach über 'cp' zu kopieren? 'cat' kann manchmal Zeilenumbrüche verfehlen, so als ob' cp' sicherer wäre. – gMale

1

Frage: Wo befindet sich anwendungsspezifischer Cache auf Android?

Antwort: /data/data

Verwandte Themen