如何查看Android应用程序特定的缓存?

时间:2012-03-28 22:52:29

标签: android image caching android-context

有没有办法在Android中动态查看特定于应用程序的缓存?我将图像保存到缓存(/ data / data / my_app_package / cache),我99%确定他们在那里保存,但不确定他们待在一起多久。

当我使用Eclipse中的DDMS文件资源管理器查看缓存时,它始终为空。我也尝试在ADB中检查适当的缓存目录,并且它总是空的。

有什么建议吗?

7 个答案:

答案 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 按钮以打开“设备文件资源管理器”。

Documentation

答案 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)

您可以按如下方式检查模拟器中特定于应用程序的数据,

  1. 在cmd中运行adb shell
  2. 转到/data/data/并导航到您的应用
  3. 在那里,您可以找到特定于您的应用程序的缓存数据和数据库