Android:清除所有应用的缓存?

fhg3lkii  于 2023-01-15  发布在  Android
关注(0)|答案(2)|浏览(164)

在我正在开发的Android应用中,我希望能够通过编程清除设备上所有应用该高速缓存,这一点之前已经被问过很多次了:Clearing app cache programmatically?Reflecting methods to clear Android app cacheClear another applications cache每个人都说没有root用户是不可能的。
然而,这显然不是事实。如果你看看应用程序缓存清洁,历史擦除,1Tap清洁,轻松历史清洁,和无数其他类似的应用程序在Google Play(所有这些都不需要根),你会发现他们都可以做到这一点。因此,这是可能的,但我只是找不到任何公开的例子如何做到这一点。
有人知道这些应用程序在做什么吗?
谢谢

z31licg0

z31licg01#

下面是一种不需要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清除足够的缓存文件,以便有8GB的可用空间。如果您将此数字设置得足够高,您应该可以实现您所希望的(Android将删除该高速缓存中的所有文件)。
其工作原理是Android保留一个LRU所有应用程序缓存目录中所有文件的(最近最少使用)列表。当您调用freeStorage()时,它会检查存储量是否(在本例中为8GB)可用于缓存文件。如果没有,它开始从应用程序的缓存目录中删除文件,首先删除最旧的文件。它会继续删除文件,直到不再有任何要删除的文件,或者释放了您请求的存储空间(在本例中为8GB)。

t0ybt7op

t0ybt7op2#

您可以使用此(freeStorageAndNotify)方法清除所有应用程序的数据。您必须使用java反射访问此方法。您将需要IPackageDataObserver.aidl。您还需要在清单文件中具有删除缓存的权限

相关问题