有没有办法在Android中动态查看特定于应用程序的缓存?我将图像保存到缓存(/ data / data / my_app_package / cache),我99%确定他们在那里保存,但不确定他们待在一起多久。
当我使用Eclipse中的DDMS文件资源管理器查看缓存时,它始终为空。我也尝试在ADB中检查适当的缓存目录,并且它总是空的。
有什么建议吗?
答案 0 :(得分:26)
您可以使用此命令列出您自己的debuggable 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
不需要Root。
答案 1 :(得分:11)
除非ADB以root用户身份运行(就像在模拟器上运行一样),否则通常无法查看/ data下的任何内容,除非拥有它的应用程序使其具有全局可读性。此外,您无法浏览目录结构 - 只有在到达可访问的目录后才能列出文件,方法是明确输入其路径。
从广义上讲,您有五种选择:
在拥有的应用程序中进行调查
将相关文件标记为公开,并使用某些内容(adb shell或adb pull),您可以在其中输入完整路径名,而不是尝试浏览树
让拥有的应用程序将整个目录复制到SD卡
使用模拟器或root设备,其中adb(以及ddms浏览器的访问权限)可以作为root运行(或使用根文件资源管理器或root设备)
使用adb和带有debuggable apk的run-as工具来获取作为应用程序用户ID运行的命令行shell。对于那些熟悉unix命令行的人来说,这可能是最有效的(尽管android上的工具箱是有限的,并且以误导的方式使用其错误消息的微小词汇表)
答案 2 :(得分:2)
缓存文件确实存储在/ 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文件资源管理器或执行“adb shell”并cd到/ data / data / my_app_package / cache并执行“ls”。您将在此目录中找到通过代码存储的图像文件。
此外,来自Android文档:
如果您想缓存某些数据,而不是持久存储它们,则应使用getCacheDir()打开一个File,该文件代表应用程序应保存临时缓存文件的内部目录。
当设备内部存储空间不足时,Android可能会删除这些缓存文件以恢复空间。但是,您不应该依赖系统来清理这些文件。您应该始终自己维护缓存文件并保持合理的空间限制,例如1MB。当用户卸载您的应用程序时,将删除这些文件。
答案 3 :(得分:1)
问题: Android上的应用专用缓存在哪里?
回答: / data / data
答案 4 :(得分:1)
在Android Studio上,您可以使用 Device File Explorer
查看 / data / data / my_app_package / cache 。
单击 View > Tool Windows > Device File Explorer
或单击工具窗口栏中的 Device File Explorer
按钮以打开“设备文件资源管理器”。
答案 5 :(得分:0)
以下是代码:将您的特定包名替换为 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);
答案 6 :(得分:0)
您可以按如下方式检查模拟器中特定于应用程序的数据,
adb shell
/data/data/
并导航到您的应用在那里,您可以找到特定于您的应用程序的缓存数据和数据库