I'm running some automated tests (with calabash-android) on an Android app and I need to programatically trigger a clear of the app's cache, but not user data.
I found that the adb shell pm clear
solution is not adequate, since it clears user data (which includes login details).
Is there any way to achieve this externally to the app (i.e. without code changes)?
I've been exploring the
/data/data/<app's package>
folder, and found acache
folder inside, which contained the cached files for the app that I wanted to clear the cache of. Then fromadb shell
I deleted the contents, and the app's cache was reset.Most probably you can run
adb shell su -c "rm -rf /data/data/<app's package>/cache/*"
to delete the cache only for the app (the app might have some custom caching, which isn't affected by this). It worked for me.Edit: Of course, your device's adb must be set up to have root access (in Cyanogen, you can enable it).
Edit: @running-codebase pointed out in the comments, that if your application is compiled with a debug key, you can also use
run-as
command in adb's shell. So it would look like this:adb shell run-as <app's package> rm -rf /data/data/<app's package>/cache/*
This method does not require root.