TL;RD:
En el dispositivo, podemos navegar a Configuración › Aplicaciones, y para cada aplicación por separado podemos obtener detalles sobre el almacenamiento utilizado: por la aplicación en sí, por sus datos, por su caché. ¿Es posible obtener esos detalles desde la línea de comandos, idealmente a través de ADB, y sin tener acceso a la raíz?
En detalle:
Ya he buscado en la web, pero no encontré información al respecto. Ya intenté recorrer la lista de paquetes ( pm list packages
), obtener la ruta al archivo APK ( adb shell pm path $pkgname | awk -F':' '{print $2}'
) y obtener el tamaño del archivo ( adb shell stat $path | grep Size
), pero eso tiene una serie de desventajas:
Idealmente, Android ya ha recopilado esos detalles en alguna parte; no lleva tanto tiempo a través de la GUI. ¿Tal vez hay alguna base de datos que uno podría consultar sin tener privilegios de root , o algún XML para analizar, o algún comando de shell que me perdí?
PD: si conoce una solución solo para root, sería "mejor que nada". Indique eso en un comentario para que pueda volver y pedirle que responda si no hay soluciones no raíz.
Mi primer instinto para extraer dicha información, que a menudo está disponible a través de la ruta de programación, es revisar los volcados de varios servicios del sistema. Uno de esos servicios es diskstats , cuyo único propósito es volcar el estado del disco. Al examinar el código java de DiskStatsService.java para varias versiones de Android, noté que la información que está buscando está disponible desde Android Oreo. Entre otras cosas, el volcado muestra todos los nombres de los paquetes, sus tamaños de paquete, el tamaño de los datos de su aplicación y sus tamaños de caché. Esa información también se descarga en el archivo /data/system/diskstats_cache.json , pero no se puede acceder a este archivo sin acceso de root.
El volcado es bastante feo, así que escribí un script bash para mostrar los datos de forma clara. Ejecute este script en su Linux.
Aquí está el script (y tampoco requiere acceso de root):
#!/bin/bash USRDIR="$INICIO" F_DISK_STATS="$USRDIR"/diskstats.txt F_PKG_NAMES="$USRDIR"/nombres_paquete.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 # CONSEJO: verifique si ADB funciona bien o no adb shell dumpsys diskstats > "$F_DISK_STATS" # Separación de datos en archivos con nombres relevantes sed -n '/Nombres de paquetes:/p' "$F_DISK_STATS" | sed -e 's/,/\n/g' -e 's/"//g' -e 's/.*\[//g' -e 's/\].*//g' > "$F_PKG_NAMES" sed -n '/Tamaños de aplicación:/p' "$F_DISK_STATS" | sed -e 's/,/\n/g' -e 's/.*\[//g' -e 's/\].*//g' > "$F_PKG_SIZE" sed -n '/Tamaños de datos de la aplicación:/p' "$F_DISK_STATS" | sed -e 's/,/\n/g' -e 's/.*\[//g' -e 's/\].*//g' > "$F_DAT_SIZE" sed -n '/Tamaños de caché:/p' "$F_DISK_STATS" | sed -e 's/,/\n/g' -e 's/.*\[//g' -e 's/\].*//g' > "$F_CACHE_SIZE" # Imprimir nombres de paquetes y sus tamaños ttl_apps=$(wc -l "$F_PKG_NAMES" | cut -d ' ' -f1) cuenta=1 while [ $contar -le $ttl_apps ]; hacer paquete=$(sed -n "${contar}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 "Nombre del paquete: $paquete" 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" cuenta=$(( $cuenta + 1)); hecho
Salida cuando se prueba en OnePlus 6 (Android 9):
Nombre del paquete: org.xbmc.kodi Pkg_size=144297984 bytes Tamaño_datos=55771136 bytes Cache_size=54341632 bytes Tamaño_total=254410752 bytes Nombre del paquete: rikka.appops Pkg_size=10330112 bytes Tamaño_datos=1740800 bytes Cache_size=163840 bytes Tamaño_total=12234752 bytes Nombre del paquete: com.a0soft.gphone.aSpotCat Pkg_size=16228352 bytes Tamaño_datos=1101824 bytes Cache_size=163840 bytes Tamaño_total=17494016 bytes
izzy
dumpsys
estaba buscando y me perdí. ¡Muchas gracias!Señor del Fuego
izzy
adb shell dumpsys diskstats
El comando está disponible incluso en LP pero sin los detalles específicos de la aplicación en su salida (probado en una tableta antigua que tengo aquí), pero no tengo idea (todavía) para MM.Raúl Salinas Monteagudo