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

21

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

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

有没有任何方法可以在应用程序外部实现这一点(即无需更改代码)?

1个回答

13
我一直在探索 /data/data/<应用程序包名> 文件夹,发现里面有一个 cache 文件夹,其中包含我想要清除缓存的应用程序的缓存文件。然后我从 adb shell 中删除了其中的内容,这样应用程序的缓存就被重置了。
您可以运行 adb shell su -c "rm -rf /data/data/<应用程序包名>/cache/*" 来仅删除该应用程序的缓存(该应用程序可能具有一些自定义缓存,不受此影响)。对我而言,它起作用了。 编辑:当然,您的设备的adb必须设置为具有root访问权限(在Cyanogen中,您可以启用它)。 编辑:@running-codebase 在评论中指出,如果您的应用程序使用调试密钥编译,则还可以在adb的shell中使用 run-as 命令。因此,它看起来像这样: adb shell run-as <应用程序包名> rm -rf /data/data/<应用程序包名>/cache/*。此方法不需要root权限。

2
如果您使用调试密钥构建应用程序,则可以通过 adb shell run-as <app's package> 删除文件而无需 root 权限。 - running-codebase
1
谢谢,我自那时以来就发现了,但是我忘记更新这个答案。我很快会添加的。 - Tamás Barta
2
在 Android 10 模拟器上,run-as 命令对我不起作用。该命令由“外部”shell(未在应用程序用户下运行)解释,并且此 shell 无法访问应用程序目录,因此 glob star 不匹配任何内容。该命令会静默执行,但不会删除缓存内容。有效的方法是:adb shell 'run-as com.ebay.mobile sh -c "rm -rf cache/*"' - 它在应用程序用户下运行一个 shell,成功执行 glob。 - Gene Pavlovsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接