Удалить системный кеш на android 6.0

Я использую метод freeStorageAndNotify() с разрешением android.permission.CLEAR_APP_CACHE для удаления системного кеша всех установленных приложений. Но метод начал бросать InvocationTargetException из версии 6.0 андроидного зефира. После поиска проблем, которые я нашел, здесь сообщается одна и та же проблема: Метод отражения Android M freeStorageAndNotify исключение Итак, вот вывод: freeStorageAndNotify() перестало работать, так как Google теперь повысил уровень сигнатуры метода до сигнатуры | system.

Но теперь вопрос заключается в том, как другие сторонние приложения, такие как "Чистый мастер", все еще могут удалять системный кеш всех установленных приложений, принимая разрешения на доступ для пользователя для 6.0 устройств?

Ответы

Ответ 1

Очиститель системы, который я использую, имеет доступ к разрешениям STORAGE. Это разрешение предоставляет полномочиям приложения очищать любые данные в общем хранилище внешних хранилищ.

http://developer.android.com/reference/android/Manifest.permission_group.html#STORAGE

Я не думаю, что какое-либо стороннее приложение может на самом деле очистить системный кеш, если устройство не внедрено, а приложение предназначено для корневых устройств.

clean Master permission

clean Master asking for permission

Ответ 2

Я не думаю, что "Чистый мастер" фактически использует разрешения доступности для очистки установленного кеша приложений. Но, если вам интересно, эту цель можно достичь, используя AccessibilityService в вашем приложении. В вашем классе, который расширяет AccessibilityService, у вас есть этот обратный вызов:

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

Здесь вы можете ссылаться rootNode.findAccessibilityNodeInfosByViewId() или rootNode.findAccessibilityNodeInfosByText() он вернет все соответствующие объекты AccessibilityNodeInfo (под-узлы) в дереве. Затем вам нужно просто определить, какая из них Button (node.getClassName()) и вызвать subNode.performAction(AccessibilityNodeInfo.ACTION_CLICK).

На Android M вам сначала нужно открыть системный экран App Info (здесь вы можете найти инструкции Как я могу запустить программный экран приложения для Android по умолчанию?) для конкретное приложение и, по описанной выше схеме, выполните последовательные щелчки на кнопках "Хранение" → "Очистить кеш".

Чтобы очистить кеш для всех установленных приложений, вам, вероятно, придется перебирать все установленные приложения (List<ApplicationInfo> installedApplications = context.getPackageManager.getInstalledApplications(0);) и повторите описанную выше процедуру.

Ответ 3

эти приложения все время делают одно и то же. использовать его на старом устройстве и новом устройстве, результаты одинаковы. единственная помощь, которую я видел, - это то, что они могут убить или перезапустить некоторые фоновые процессы, а не очищать кеш. поэтому API не может ограничить свой трюк.