Android:清除所有应用程序的caching?

在我正在创build的Android应用程序中,我希望能够以编程方式清除设备上所有应用程序的caching。 这已被问了很多次:以编程方式清除应用程序caching? 反映清除Android应用程序caching的方法 清除另一个应用程序caching ,每个人都说没有root就不可能。

但是,情况显然不是这样。 如果您查看应用程序caching清理程序,历史logging清理程序,1Tap清理程序,简易历史logging清理程序以及Google Play中所有其他类似应用程序(所有这些程序都不需要root),您将会意识到它们都可以做到这一点。 因此,这是有可能的,但我找不到任何公开的例子如何做到这一点。

有谁知道所有这些应用程序在做什么?

谢谢

这是一个不需要IPackageDataObserver.aidl

 PackageManager pm = getPackageManager(); // Get all methods on the PackageManager Method[] methods = pm.getClass().getDeclaredMethods(); for (Method m : methods) { if (m.getName().equals("freeStorage")) { // Found the method I want to use try { long desiredFreeStorage = 8 * 1024 * 1024 * 1024; // Request for 8GB of free space m.invoke(pm, desiredFreeStorage , null); } catch (Exception e) { // Method invocation failed. Could be a permission problem } break; } } 

你需要在你的清单中有这个:

 <uses-permission android:name="android.permission.CLEAR_APP_CACHE"/> 

这要求Android清除足够的caching文件,以便有8GB的空闲空间。 如果你设置这个数字足够高,你应该达到你想要的(Android会删除caching中的所有文件)。

这样做的方式是,Android保持所有应用程序的caching目录中的所有文件的LRU(最近最less使用)列表。 当您调用freeStorage()它会检查存储量(在本例中为8GB)是否可用于caching文件。 如果不是,则开始通过首先删除最早的文件从应用程序的caching目录中删除文件。 它将继续删除文件,直到不再有任何要删除的文件,或者释放了您请求的存储量(本例中为8GB)。

您可以使用此 (freeStorageAndNotify)方法清除所有应用程序的数据。 你必须使用javareflection来访问这个方法。 你将需要IPackageDataObserver.aidl。 您还需要在清单文件中拥有删除caching的权限