Android:如何通过adb清除应用缓存并保留用户数据?

And*_*des 15 android caching clear adb

我正在Android应用程序上运行一些自动化测试(使用calabash-android),我需要以编程方式触发清除应用程序的缓存,而不是用户数据.

我发现adb shell pm clear解决方案不够用,因为它清除了用户数据(包括登录详细信息).

有没有办法在应用程序外部实现这一点(即没有代码更改)?

Tam*_*rta 9

我一直在探索该/data/data/<app's package>文件夹,并在cache里面找到了一个文件夹,其中包含我要清除缓存的应用程序的缓存文件.然后从adb shell我删除内容,并重置应用程序的缓存.

很可能你只能为应用程序运行adb shell su -c "rm -rf /data/data/<app's package>/cache/*"删除缓存(应用程序可能有一些自定义缓存,不受此影响).它对我有用.

编辑:当然,您的设备的adb必须设置为具有root访问权限(在Cyanogen中,您可以启用它).

编辑:@ running-codebase在评论中指出,如果您的应用程序是使用调试密钥编译的,您也可以run-as在adb的shell中使用命令.因此,它应该是这样的:adb shell run-as <app's package> rm -rf /data/data/<app's package>/cache/* 此方法不会要求根.

  • run-as 命令在 Android 10 模拟器上对我不起作用。该命令由“外部”shell(不在应用程序的用户下运行)解释,并且该 shell 无权访问应用程序的目录,因此 glob 星号不匹配任何内容。该命令以静默方式执行,但不会删除缓存内容。有效的是: `adb shell 'run-as com.ebay.mobile sh -c "rm -rf cache/*"'` - 它在应用程序的用户下运行一个 shell,成功执行 glob (3认同)
  • 如果使用调试密钥构建了应用程序,则可以以&lt;app's package&gt;运行adb shell,并删除没有root的文件。 (2认同)