2012-03-28 13 views
15

C'è un modo per visualizzare dinamicamente la cache specifica dell'applicazione in Android? Sto salvando le immagini nella cache (/ data/data/my_app_package/cache) e sono sicuro al 99% che stanno salvando lì, ma non sono sicuro per quanto tempo resteranno intorno.Come posso visualizzare la cache specifica dell'applicazione Android?

Quando guardo nella cache utilizzando l'Esplora file di DDMS in Eclipse, è sempre vuoto. Ho anche provato ad esaminare la directory cache appropriata in ADB e di nuovo è sempre vuota.

Qualche suggerimento?

risposta

8

A meno che ADB non sia in esecuzione come root (come farebbe su un emulatore) non è possibile visualizzare generalmente sotto/dati a meno che un'applicazione che lo possiede lo abbia reso leggibile. Inoltre, non è possibile sfogliare la struttura delle directory: è possibile elencare i file solo quando si accede a una directory a cui si ha accesso, inserendo esplicitamente il percorso.

In linea di massima si dispone di cinque opzioni:

  • Fare le indagini all'interno della app possedere

  • Selezionare i file in questione come pubblico, e usare qualcosa (adb shell o tirare adb) dove si può immettere un percorso completo, invece di cercare di passare in rassegna l'albero

  • avere l'applicazione possedere copiare l'intera cartella sulla scheda SD

  • .210
  • Usare un emulatore o un dispositivo radicata dove adb (e quindi l'accesso del browser DDMS) può essere eseguito come root (o usare un file di root explorer o un dispositivo radicata)

  • uso adb e la corsa, come strumento con un apk debuggable per ottenere una shell della riga di comando in esecuzione come id utente della app.Per chi ha familiarità con la riga di comando UNIX, questo può essere il più efficace (anche se la sh toolbox su Android è limitato, e usa il suo piccolo vocabolario di messaggi di errore in modo fuorviante)

+0

Questa è una risposta sbagliata, come si può accedere ai dati del proprio app attraverso 'adb' senza privilegi di root, cioè anche da dispositivi sbloccati reali. Vedi la mia risposta. – Tamas

+3

@Tamas - no, questa è una risposta corretta, e ** già menziona ** la possibilità dell'esecuzione come strumento, inclusa la ** limitazione ** di richiedere un apk di debug, qualcosa che hai dimenticato di menzionare. –

2

file memorizzati nella cache vengono effettivamente memorizzati in/data/data/my_app_package/cache

Assicurarsi di memorizzare i file utilizzando il seguente metodo:

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

dove imagebuffer [] contiene i dati delle immagini in formato byte e imagebufferlength è la lunghezza del contenuto da scrivere su FileOutputStream.

Ora, si può guardare DDMS File Explorer o fare un "adb shell" e cd a/data/data/my_app_package/cache e fare un "ls". Troverai i file immagine che hai memorizzato attraverso il codice in questa directory.

Inoltre, dalla documentazione Android:

Se desideri memorizzare nella cache alcuni dati, piuttosto che conservarla con insistenza, è necessario utilizzare getCacheDir() per aprire un file che rappresenta la directory interna in cui l'applicazione deve salvare file temporanei della cache.

Quando il dispositivo è in esaurimento spazio di archiviazione interno, Android può eliminare questi file cache per recuperare spazio. Tuttavia, non dovresti fare affidamento sul sistema per pulire questi file per te. Devi sempre conservare i file della cache da solo e rimanere entro un ragionevole limite di spazio consumato, ad esempio 1 MB. Quando l'utente disinstalla l'applicazione, questi file vengono rimossi.

0

Ecco il codice: sostituire nome_pacchetto in base al nome del pacchetto specifico.

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

E 'possibile utilizzare questo comando per elencare i file per il proprio debuggable apk:

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

E questo script per tirare dalla 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'" 

Poi si può tirare un file dalla cache come questa:

./pull.sh cache/someCachedData.txt 

Root non richiesto.

+1

Sì, run-as può essere utile ma funziona solo con un apk di debug. Anche lo strumento è completamente rotto su almeno una versione di Android. –

+1

Preferisco questa variante di script della shell, che mi consente di estrarre da una directory annidata e di eseguire il dump su un altro nome file di output. Grazie! 'adb shell 'eseguito come $ 1 cat'/data/data/$ 1/$ 2 '>'/sdcard/$ 3 '"; adb pull "/ sdcard/$ 3"; adb shell "rm '/ sdcard/$ 3'" ' – qix

+1

bel script ma perché' cat' il file invece di copiarlo semplicemente tramite 'cp'? 'cat' a volte può rovinare i newline, quindi sembra che' cp' sia più sicuro. – gMale

1

Domanda: Dove si trova la cache specifica dell'applicazione su Android?

Risposta: /dati/dati

Problemi correlati