【发布时间】:2015-11-06 12:05:57
【问题描述】:
我使用的是反射方法freeStorageAndNotify:
Method freeStorageAndNotify = null;
freeStorageAndNotify = service.packageManager.getClass().getMethod(
"freeStorageAndNotify", long.class, IPackageDataObserver.class);
freeStorageAndNotify.invoke(PackageManager.class, maxCache + freeSpace, packageDataObserver);
这会导致 InvocationTargetException:
java.lang.SecurityException: Neither user 10199 nor current process has android.permission.CLEAR_APP_CACHE.
几点: - 我已经有 android.permission.CLEAR_APP_CACHE - 这只发生在 android "M" 版本中(从开发者网站刷出预览版 sdk)
我知道这是一个 hack,而 google 并没有为此提供一些官方 API, 但是有很多清理应用程序可以一键清理所有设备缓存,所以如果有人知道如何用另一种解决方法绕过这个问题,我会很高兴看到这一点。
非常感谢您的帮助
【问题讨论】:
-
“我已经有 android.permission.CLEAR_APP_CACHE - 这只发生在 android "M" 版本中(从开发者网站上刷新了预览 sdk)" -- 他们可能更改了
protectionLevel的此权限为signature或system。这可以解释症状。 -
真可惜 :) 我们也只需要绕过它。有什么建议从哪里开始?谢谢
-
我在
framework-res.apk中查看了第三M预览的权限,CLEAR_APP_CACHE和DELETE_CACHE_FILES的保护级别确实是signature|system -
stackoverflow.com/questions/3635101/… 我在那里找到了解决方案(以上链接)。
标签: android performance caching android-package-managers