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

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

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

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

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

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

Чистое разрешение мастера

Чистый Учитель просит разрешения

Я не думаю, что «Чистый мастер» фактически использует разрешения доступности для очистки установленного кеша приложений. Но, если вас это интересует, эта цель может быть достигнута с помощью 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); ) и повторить описанную выше процедуру.

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