TL;DR:
Auf dem Gerät können wir zu Einstellungen › Apps navigieren und für jede App separat Details zum verwendeten Speicher abrufen: von der App selbst, von ihren Daten, von ihrem Cache. Ist es möglich, diese Details über die Befehlszeile zu erhalten, idealerweise über ADB – und ohne Root-Zugriff?
Im Detail:
Ich habe schon im Netz gesucht, aber keine Informationen dazu gefunden. Ich habe bereits versucht, die Paketliste ( pm list packages
), den Pfad zur APK-Datei ( adb shell pm path $pkgname | awk -F':' '{print $2}'
) und die Dateigröße davon abzurufen ( adb shell stat $path | grep Size
) – aber das hat eine Reihe von Nachteilen:
Idealerweise hat Android diese Details bereits irgendwo gesammelt; Über die GUI dauert es nicht so lange. Vielleicht gibt es eine Datenbank, die man ohne Root-Rechte abfragen könnte – oder etwas XML zum Parsen, oder einen Shell-Befehl, den ich übersehen habe?
PS: Wenn Sie eine reine Root-Lösung kennen, wäre das "besser als nichts". Bitte geben Sie dies in einem Kommentar an, damit ich zurückkommen und Sie bitten kann, darauf eine Antwort zu geben, wenn es keine Nicht-Root-Lösungen gibt.
Mein erster Instinkt, solche Informationen auszugraben, die oft über die Programmierroute verfügbar sind, besteht darin, die Dumps verschiedener Systemdienste zu durchsuchen. Ein solcher Dienst ist diskstats , dessen einziger Zweck darin besteht, den Status der Festplatte auszugeben. Als ich mir den Java-Code von DiskStatsService.java für verschiedene Android-Versionen ansah , bemerkte ich, dass die gesuchten Informationen seit Android Oreo verfügbar sind. Der Dump zeigt unter anderem alle Paketnamen, ihre Paketgrößen, ihre App-Datengröße und ihre Cache-Größen. Diese Informationen werden auch in die Datei /data/system/diskstats_cache.json abgelegt , auf diese Datei kann jedoch nicht ohne Root-Zugriff zugegriffen werden.
Der Dump ist ziemlich hässlich, also habe ich ein Bash-Skript geschrieben, um die Daten ordentlich anzuzeigen. Führen Sie dieses Skript in Ihrem Linux aus.
Hier ist das Skript (und es erfordert auch keinen Root-Zugriff):
#!/bin/bash USRDIR="$HOME" F_DISK_STATS="$USRDIR"/diskstats.txt F_PKG_NAMES="$USRDIR"/package_names.txt F_PKG_SIZE="$USRDIR"/app_pkg_sizes.txt F_DAT_SIZE="$USRDIR"/app_data_sizes.txt F_CACHE_SIZE="$USRDIR"/app_cache_sizes.txt # HINWEIS: Überprüfen Sie, ob ADB gut funktioniert oder nicht adb shell dumpsys diskstats > "$F_DISK_STATS" # Trennen von Daten in relevant benannte Dateien sed -n '/Paketnamen:/p' "$F_DISK_STATS" | sed -e 's/,/\n/g' -e 's/"//g' -e 's/.*\[//g' -e 's/\].*//g' > "$F_PKG_NAMES" sed -n '/App-Größen:/p' "$F_DISK_STATS" | sed -e 's/,/\n/g' -e 's/.*\[//g' -e 's/\].*//g' > "$F_PKG_SIZE" sed -n '/App-Datengrößen:/p' "$F_DISK_STATS" | sed -e 's/,/\n/g' -e 's/.*\[//g' -e 's/\].*//g' > "$F_DAT_SIZE" sed -n '/Cache-Größen:/p' "$F_DISK_STATS" | sed -e 's/,/\n/g' -e 's/.*\[//g' -e 's/\].*//g' > "$F_CACHE_SIZE" # Drucken von Paketnamen und deren Größen ttl_apps=$(wc -l "$F_PKG_NAMES" | cut -d ' ' -f1) Anzahl = 1 while [ $count -le $ttl_apps ]; Tun pkg=$(sed -n "${count}p" "$F_PKG_NAMES") pkg_size=$(sed -n "${count}p" "$F_PKG_SIZE") dat_size=$(sed -n "${count}p" "$F_DAT_SIZE") csh_size=$(sed -n "${count}p" "$F_CACHE_SIZE") echo -e "Paketname: $pkg" echo -e "\t Pkg_size=$pkg_size bytes" echo -e "\t Data_size=$dat_size bytes" echo -e "\t Cache_size=$csh_size bytes" echo -e "\t Total_size=$(($pkg_size + $dat_size + $csh_size)) Bytes\n" count=$(( $count + 1)); Erledigt
Ausgabe beim Test auf OnePlus 6 (Android 9):
Paketname: org.xbmc.kodi Pkg_size=144297984 Bytes Data_size=55771136 Bytes Cache_size=54341632 Bytes Gesamtgröße = 254410752 Byte Paketname: rikka.appops Pkg_size=10330112 Bytes Data_size=1740800 Byte Cache_size=163840 Bytes Gesamtgröße = 12234752 Byte Paketname: com.a0soft.gphone.aSpotCat Pkg_size=16228352 Bytes Data_size=1101824 Bytes Cache_size=163840 Bytes Gesamtgröße = 17494016 Bytes
Izzy
dumpsys
ich gesucht und vermisst habe. Vielen Dank!Feuerlord
Izzy
adb shell dumpsys diskstats
Befehl ist sogar auf LP verfügbar, aber ohne die App-spezifischen Details in seiner Ausgabe (versucht auf einem alten Tablet, das ich hier habe), aber (noch) keine Idee für MM.Raúl Salinas-Monteagudo