Wie lösche ich App-Cache für alle Apps in Android M?

Gibt es eine Möglichkeit, den Cache aller Apps oder bestimmte Apps in Android M zu löschen?

Scheint, wie die meisten Möglichkeiten nicht mehr in Android M. arbeiten.

  • Android numerisches Passwortfeld
  • Cardview mit Trennwänden in ihm
  • Umbenennen von Android-Paketname fehlschlägt
  • Wie kann ich die FontSize in einem Android WebView ändern?
  • Wie gibst du Text in einer android-Layer-List-XML-Datei?
  • Https Verbindung Android
  • Als Referenz habe ich diesen Code aus dieser Diskussion: Android: Clear Cache von allen Apps?

    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; } } 

    Kombiniert mit dieser Erlaubnis

     <uses-permission android:name="android.permission.CLEAR_APP_CACHE"/> 

    Dieser Code funktioniert gut auf Geräten niedriger als Android 6.0. Aber auf Geräten mit Android 6.0 ergibt sich diese Ausnahme

     java.lang.IllegalArgumentException: Wrong number of arguments; expected 3, got 2 

    Es gibt einen Open-Source-Reiniger auf GitHub, der die Entwicklung mit diesem Grund gestoppt hat:

    Teilweise Inkompatibilität mit Android 6.0 und neuer

    Beginnend mit Android 6.0 scheint die CLEAR_APP_CACHE-Berechtigung für reguläre Anwendungen nicht mehr verfügbar zu sein, und da diese Berechtigung für die Reinigung des internen Cache erforderlich ist, ist Cache Cleaner nicht in der Lage, den internen Cache auf Android 6.0 und neuer zu reinigen. Allerdings wird die Reinigung des externen Cache noch unterstützt.

    Gibt es wirklich keine Möglichkeit, App Cache auf Geräten mit Android M zu löschen?

    Wie funktioniert die Google Setting App? Es kann nicht die neue Methode sein:

     public abstract void freeStorage(String volumeUuid, long freeStorageSize, IntentSender pi) 

    Weil ich denke, es löscht nicht den Cache von bestimmten Apps, aber genug Apps, um die erwartete RAM-Größe zu löschen … Aber die Einstellungen App kann den Cache von bestimmten Apps löschen

    UPDATE Wie die ausgenommene Antwort erklärt, gibt es keine Möglichkeit, den App Cache ohne Root auf Devices mit Android M und höher zu löschen. Aber ich werde es hier posten, wenn ich einen Weg finde ….

  • Android Studio - Resource Entry bereits definiert
  • Ändern der SQLite-Datenbankversionsnummer
  • Wie kann ich Asynctask-Thread in Android stoppen?
  • Nicht unterstütztMethodException Android Studio 0.8.9
  • Fehler: kann die Variable abc_ic_ab_back_mtrl_am_alpha nicht finden
  • Starten des Android-Emulators in SDK-Tools, Revision 12
  • 2 Solutions collect form web for “Wie lösche ich App-Cache für alle Apps in Android M?”

    Gibt es eine Option, um den Cache aller Apps oder bestimmter Apps in Android M zu löschen?

    Eine Drittanbieter-App kann den Cache einer anderen App in Android 6.0+ nicht löschen. Die Schutzstufe von Manifest.permission.CLEAR_APP_CACHE von "gefährlich" auf "Signatur | privilegiert" oder "System | Signatur" in Android 6.0+ geändert. Jetzt können nur die mit dem Firmware-Schlüssel signierten Apps diese Berechtigung aufnehmen.

    Gibt es wirklich keine Möglichkeit, App-Cache auf Geräten mit Android M zu löschen?

    Wenn die App nicht als System App installiert ist oder Sie Root-Zugriff haben, gibt es keine Möglichkeit, den App-Cache auf Android 6.0+ zu löschen.

    Wie behandelt die Einstellungen App?

    Android ist natürlich Open Source. Lass uns den Code ansehen. In den AppStorageSettings.java Zeilen 172 – 178 finden wir:

     if (v == mClearCacheButton) { // Lazy initialization of observer if (mClearCacheObserver == null) { mClearCacheObserver = new ClearCacheObserver(); } mPm.deleteApplicationCacheFiles(mPackageName, mClearCacheObserver); } 

    Also, die Einstellungen App verwendet die versteckte Methode PackageManager#deleteApplicationCacheFiles(String, IPackageDataObserver) . Es kann dies tun, weil es die System-Level-Berechtigung "android.permission.CLEAR_APP_USER_DATA" ( eine Berechtigung, die eine Drittanbieter-App nicht halten kann ) enthält.


    Externer Cache

    Allerdings wird die Reinigung des externen Cache noch unterstützt.

    Dies ist auf Android 6.0+ noch möglich. Ich habe nicht auf den Quellcode für die App, die Sie erwähnt haben, aber ich würde davon ausgehen, alles, was Sie tun müssen, ist die WRITE_EXTERNAL_STORAGE Berechtigung WRITE_EXTERNAL_STORAGE , alle installierten Pakete mit PackageManager erhalten, das externe Cache-Verzeichnis der App zu erhalten und das Verzeichnis zu löschen.


    Root-Zugriff

    Natürlich, wenn du einen Root-Zugriff hast, kannst du den Cache einer anderen App löschen. Hier ist ein kurzes Beispiel für den Root-Zugriff, um alle App-Cache zu löschen. Du kannst Chainfires libsuperuser verwenden , um Befehle in einer Root-Shell auszuführen:

     PackageManager pm = getPackageManager(); List<ApplicationInfo> installedApplications = pm.getInstalledApplications(0); for (ApplicationInfo applicationInfo : installedApplications) { try { Context packageContext = createPackageContext(applicationInfo.packageName, 0); List<File> directories = new ArrayList<>(); directories.add(packageContext.getCacheDir()); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Collections.addAll(directories, packageContext.getExternalCacheDirs()); } else { directories.add(packageContext.getExternalCacheDir()); } StringBuilder command = new StringBuilder("rm -rf"); for (File directory : directories) { command.append(" \"" + directory.getAbsolutePath() + "\""); } Shell.SU.run(command.toString()); } catch (PackageManager.NameNotFoundException wtf) { } } 

    Für weitere Informationen, bitte sehen Sie meine Antwort auf Clear Cache von allen Apps in Marshmallow?

    In Android 6 (Marshmallow) gibt es eine zusätzliche freeStorage() Methode, die einen volumeUuid Parameter nimmt:

     public void freeStorage(long freeStorageSize, IntentSender pi) public abstract void freeStorage(String volumeUuid, long freeStorageSize, IntentSender pi) 

    Offensichtlich zeigt sich die neue Methode zuerst in der zurückgegebenen Liste der deklarierten Methoden.

    Sie können den ursprünglichen Code ändern, so dass es wie diese Top-Arbeit in Android 6 aussieht:

     PackageManager pm = getPackageManager(); // Get all methods on the PackageManager Method[] methods = pm.getClass().getDeclaredMethods(); for (Method m : methods) { if (m.getName().equals("freeStorage")) { Class[] params = m.getParameterTypes(); if (params.length == 2) { // 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; } } } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.