在安卓6.0上删除系统缓存

16
我正在使用带有权限android.permission.CLEAR_APP_CACHE的方法freeStorageAndNotify()来删除所有已安装应用程序的系统缓存。但是自从 Android Marshmallow 6.0 版本以后,该方法开始抛出InvocationTargetException异常。 经过搜索,我发现与此问题相关的报告在这里:Android M reflection method freeStorageAndNotify exception。 所以结论是,由于谷歌现在已将该方法的签名级别提高至signature|system,因此freeStorageAndNotify()不再起作用。
但现在的问题是,其他第三方应用程序,例如“Clean Master”,如何通过获取用户对 6.0 设备的辅助功能权限仍能够删除所有已安装应用程序的系统缓存?

Clean Master 应用程序不使用辅助功能权限。 - Aaron Franco
你尝试过查看APK文件吗?peeking - kichik
你尝试过直接删除缓存文件夹吗?(可能需要读写存储访问权限,但我不确定你是否能够这样做) - Stefano P.
3个回答

0

我认为“Clean master”并没有实际使用辅助功能权限来清除安装的应用程序缓存。但是,如果您感兴趣,您可以通过在应用程序中使用AccessibilityService来实现此目标。在扩展AccessibilityService的类中,您会有这个回调函数:

    @Override
    public void onAccessibilityEvent(AccessibilityEvent aEvent) {
       AccessibilityNodeInfo rootNode = aEvent.getSource();
       //...
    }

在这里,您可以调用rootNode.findAccessibilityNodeInfosByViewId()rootNode.findAccessibilityNodeInfosByText(),它将返回树中所有匹配的AccessibilityNodeInfo对象(子节点)。然后,您只需要检测哪个是Buttonnode.getClassName()),并调用subNode.performAction(AccessibilityNodeInfo.ACTION_CLICK)

在Android M上,您首先需要打开系统的App Info屏幕(您可以在此处找到说明如何以编程方式启动android应用程序信息屏幕?)来针对具体应用程序执行上述方案中描述的顺序点击“存储”按钮 ->“清除缓存”。

为了清除所有已安装应用程序的缓存,您可能需要遍历所有已安装的应用程序(List<ApplicationInfo> installedApplications = context.getPackageManager.getInstalledApplications(0);)并重复上述过程。


-1

我知道这个。我的问题是,“清理大师”应用程序如何通过获取用户的辅助功能权限来实现它。 - Audumbar
Clean Master 只需要存储权限。 - Aaron Franco
Clean Master明确要求访问存储权限。 - Aaron Franco
如果您查看完整的权限集,Clean Master根本不使用辅助功能权限。 - Aaron Franco
Clean Master在需要清除缓存文件时会向用户请求辅助功能权限。 - Logo

-4

这些应用程序一直在做同样的事情。无论是在旧设备上还是新设备上使用,结果都是相同的。我所看到的唯一帮助是它们可以杀死或重新启动一些后台进程,而不是清理缓存。因此,没有API可以限制它们的技巧。


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