Androidでアプリケーション固有のキャッシュを動的に表示する方法はありますか?キャッシュ(/ data/data/my_app_package/cache)に画像を保存していますが、99%はそこに保存されていると確信していますが、どれくらいの時間滞在しているかはわかりません。
Eclipse内のDDMSファイルエクスプローラーを使用してキャッシュを見ると、常に空です。また、ADBの適切なキャッシュディレクトリを調べてみましたが、これも常に空です。
助言がありますか?
ADBが(エミュレータ上でのように)rootとして実行されていない限り、ADBを所有するアプリケーションがADBを誰でも読み取り可能にしない限り、通常/ dataの下には何も表示できません。さらに、ディレクトリ構造を参照することはできません。パスを明示的に入力することにより、アクセスできるディレクトリに移動した後にのみファイルをリストできます。
大まかに言って、5つのオプションがあります。
所有アプリ内で調査を行う
問題のファイルをパブリックとしてマークし、ツリーを参照する代わりに、フルパス名を入力できるもの(adbシェルまたはadb pull)を使用します
所有アプリにディレクトリ全体をSDカードにコピーさせる
Adb(およびddmsブラウザーのアクセス)がrootとして実行できるエミュレーターまたはルート化されたデバイスを使用します(またはルートファイルエクスプローラーまたはルート化されたデバイスを使用します)
アプリのユーザーIDとして実行されているコマンドラインシェルを取得するには、デバッグ可能なapkでadbおよびrun-asツールを使用します。 UNIXコマンドラインに精通している人にとって、これは最も効果的です(ただし、ツールボックスsh Androidは制限されており、誤解を招く方法でエラーメッセージの小さな語彙を使用します)
独自のデバッグ可能なapkのファイルをリストするには、次のコマンドを使用できます。
adb Shell run-as com.corp.appName ls /data/data/com.corp.appName/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'"
次に、次のようにキャッシュからファイルをプルできます。
./pull.sh cache/someCachedData.txt
ルートは必要ありません。
質問:Android上のアプリケーション固有のキャッシュはどこにありますか?
回答:/ data/data
キャッシュされたファイルは確かに/ data/data/my_app_package/cacheに保存されます
次の方法を使用して、ファイルを必ず保存してください。
String cacheDir = context.getCacheDir();
File imageFile = new File(cacheDir, "image1.jpg");
FileOutputStream out = new FileOutputStream(imageFile);
out.write(imagebuffer, 0, imagebufferlength);
ここで、imagebuffer []にはバイト形式の画像データが含まれ、imagebufferlengthはFileOutputStreamに書き込まれるコンテンツの長さです。
ここで、DDMS File Explorerを見るか、「adbシェル」を実行して/ data/data/my_app_package/cacheにcdし、「ls」を実行します。このディレクトリにコードを介して保存した画像ファイルがあります。
さらに、Android documentation:
データを永続的に保存するのではなくキャッシュする場合は、getCacheDir()を使用して、アプリケーションが一時キャッシュファイルを保存する内部ディレクトリを表すFileを開く必要があります。
デバイスの内部ストレージスペースが少ない場合、Androidはこれらのキャッシュファイルを削除してスペースを回復できます。ただし、これらのファイルをクリーンアップするためにシステムに依存するべきではありません。キャッシュファイルを自分で作成し、1MBなどの消費スペースの合理的な制限内に留まるユーザーがアプリケーションをアンインストールすると、これらのファイルは削除されます。
次のようにして、エミュレータでアプリケーション固有のデータを確認できます。
adb Shell
を実行します/data/data/
に移動して、アプリケーションに移動しますそこで、アプリケーションに固有のキャッシュデータとデータベースを見つけることができます。
コードは次のとおりです。package_nameを特定のパッケージ名に置き換えます。
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);