2012-03-28 18 views
15

Czy istnieje sposób dynamicznego przeglądania pamięci podręcznej określonej aplikacji w systemie Android? Zapisuję obrazy w pamięci podręcznej (/ data/data/my_app_package/cache) i mam 99% pewności, że są tam zapisywane, ale nie wiem, jak długo będą przebywać.Jak wyświetlić pamięć podręczną aplikacji dla Androida?

Kiedy patrzę na pamięć podręczną za pomocą Eksploratora plików DDMS w środowisku Eclipse, jest on zawsze pusty. Próbowałem również zbadać odpowiedni katalog pamięci podręcznej w ADB i znowu jest zawsze pusty.

Wszelkie sugestie?

Odpowiedz

8

O ile ADB nie działa jako root (tak jak na emulatorze), nie można ogólnie wyświetlić niczego pod/danymi, chyba że aplikacja, która je posiada, uczyniła go czytelnym na całym świecie. Ponadto nie można przeglądać struktury katalogów - można wyświetlić listę plików tylko po uzyskaniu dostępu do katalogu, do którego użytkownik ma dostęp, poprzez wyraźne wprowadzenie ścieżki.

Najogólniej mówiąc masz pięć opcji:

  • wykonaj dochodzenie w posiadanie aplikacji

  • Zaznacz pliki, o których mowa, jako społeczeństwa, i użyć czegoś (ADB shell lub adb przyciąganie), gdzie można wprowadzić pełną nazwę ścieżki, zamiast próbować przeglądać drzewa

  • Czy aplikacja posiadania skopiować cały katalog na karcie SD

  • pomocą emulatora lub zakorzenione urządzenie gdzie adb (a tym samym dostęp w przeglądarce DDMS za) można uruchomić jako root (lub użyć eksploratora plików korzeń lub zakorzenione urządzenia)

  • użytkowania adb i run-jako narzędzie z debuggable apk, aby uruchomić powłokę wiersza poleceń jako identyfikator użytkownika aplikacji.Dla obeznanych z wiersza poleceń systemu UNIX, może to być najbardziej skuteczne (choć sh przybornik na Androidzie jest ograniczona, i wykorzystuje swoją maleńką słownictwa komunikatów o błędach fałszywie sposobów)

+0

Jest to zła odpowiedź, jak można uzyskać dostęp do danych własnych aplikacji za pośrednictwem 'adb' bez uprawnień administratora, czyli także od rzeczywistych urządzeń odblokowanych. Zobacz moją odpowiedź. – Tamas

+3

@Tamas - nie, to jest poprawna odpowiedź, a ** wspomina już ** o możliwości uruchomienia jako narzędzia, w tym ** ograniczeniu ** wymagającym debugowania, coś, o czym zapomniałeś wspomnieć. –

2

buforowane pliki są faktycznie przechowywane w/data/data/my_app_package/cache

Upewnij się do przechowywania plików przy użyciu następującej metody:

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

gdzie imagebuffer [] zawiera dane obrazu w formacie bajtów a imagebufferlength jest długością treści do zapisania w FileOutputStream.

Teraz możesz spojrzeć na Eksplorator plików DDMS lub zrobić "powłokę adb" i cd do/data/data/my_app_package/cache i zrobić "ls". W tym katalogu znajdziesz pliki obrazów zapisane przez kod.

Ponadto z Android dokumentacji:

Jeśli chcesz buforować niektóre dane, zamiast przechowywać je wytrwale, należy użyć getCacheDir(), aby otworzyć plik, który reprezentuje katalog wewnętrzny gdzie aplikacja powinna zapisać tymczasowe pliki pamięci podręcznej.

Gdy na urządzeniu jest mało miejsca w pamięci wewnętrznej, system Android może usunąć te pliki pamięci podręcznej, aby zwolnić miejsce. Jednak nie powinieneś polegać na systemie, aby wyczyścić te pliki. Powinieneś zawsze przechowywać pliki pamięci podręcznej samodzielnie i pozostać w rozsądnym limicie zużytej przestrzeni, na przykład 1 MB. Gdy użytkownik odinstaluje twoją aplikację, te pliki zostaną usunięte.

0

Oto kod: wymienić nazwa_pakietu według konkretnej nazwy pakietu.

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

Można użyć tego polecenia dla wymieniając pliki dla własnego debuggable apk:

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

a ten skrypt do ciągnięcia z cache:

#!/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'" 

Wtedy można wyciągnąć plik z takiej pamięci podręcznej:

./pull.sh cache/someCachedData.txt 

Korzeń nie jest wymagany.

+1

Tak, run-as może być użyteczny, ale działa tylko z apk debugowania. Również narzędzie jest całkowicie zepsute w co najmniej jednej wersji Androida. –

+1

Preferuję tę odmianę skryptu powłoki, która pozwala mi wyciągnąć z dowolnego zagnieżdżonego katalogu i zrzutu do innej wyjściowej nazwy pliku. Dzięki! 'shell adb" uruchamiany jako 1 $ cat '/ data/data/1 $/2 $' ''/sdcard/$ 3 '"; adb pull "/ sdcard/$ 3"; adb shell "rm"/sdcard/$ 3 '"' – qix

+1

fajny skrypt, ale dlaczego 'cat' plik zamiast po prostu skopiować go przez' cp'? 'cat' może czasami zepsuć znaki nowej linii, więc wydaje się, że' cp' byłby bezpieczniejszy. – gMale

1

Pytanie: Gdzie jest pamięć podręczna specyficzna dla aplikacji dostępna w systemie Android?

Odpowiedź: /data/data

Powiązane problemy