En Android, ¿hay alguna forma de borrar todos los datos de la aplicación al mismo tiempo sin utilizar el restablecimiento de fábrica? Trabajo en una biblioteca y tenemos tabletas Android para pagar para que los usuarios las usen y después de que el usuario termine de usar la tableta, queremos eliminar el nombre de usuario de todas y cada una de las aplicaciones que el usuario haya usado para que su nombre de usuario no quede en el aplicación Sé que el botón "Borrar datos" en el Administrador de aplicaciones borrará el nombre de usuario, pero tendríamos que hacer esto para cada aplicación y preferiríamos hacerlo en una instancia en lugar de una a la vez. Cualquier ayuda será apreciada.
Eso podría hacerse a través de ADB y un poco de secuencias de comandos, aunque actualmente no estoy seguro de si podría requerir root (seguramente entiende que no quiero probar eso en ninguno de mis dispositivos de trabajo en este momento;):
#!/sistema/bin/sh para la aplicación en $ (paquetes de lista pm); hacer pm claro $ {aplicación: 8} hecho
Este fragmento se puede guardar en un archivo (p. ej. clear_data.sh
), o ejecutarlo directamente al copiar y pegar cuando se conecta al dispositivo mediante adb shell
.
Alguna explicación de lo que hace, ya que hubo algunos problemas al final del OP:
pm list packages
da una lista con los nombres de los paquetes de todas las aplicaciones instaladas, una por línea.for app in $(pm list packages); do
recorrería esa lista y ejecutaría el "comando interno" para cada paquete por separadopm clear ${app:8}
elimina los datos de cada paquete especificado por $app
, cortando los primeros 8 caracteres ( pm list
antepone cada nombre de aplicación por la cadena package:
, que debemos cortar)Para verificar en la línea de comando, puede copiar y pegar la siguiente línea:
adb shell 'for app in $(pm list packages); do echo pm clear ${app:8}; done'
(nota: cuando se ejecuta desde una línea de comandos de Windows, tendrá que usar comillas dobles (¡gracias a Jesse por esta sugerencia!) – en Linux/Unix/Mac quédese con las comillas simples o las variables se expandirían "al revés fin")
Eso es una "ejecución en seco", que no hace nada más que enumerar los comandos que se ejecutarían directamente en el bloque de código anterior. Puede usar el resultado de eso para eliminar los datos de cada aplicación manualmente, eligiendo las que le interesen. 1
Para dar un comando de ejemplo producido por esto: pm clear com.facebook.katana
eliminaría los datos de la aplicación de Facebook.
1: Esto podría ser una parte importante, ya que el ciclo realmente borraría los datos de todas las aplicaciones (incluidas las aplicaciones del sistema), lo que podría no ser exactamente lo que busca. Puede restringir eso automáticamente a, por ejemplo, aplicaciones de usuario pasando el parámetro -3
(para "solo aplicaciones de terceros") al pm list
comando, es decir pm list packages -3
, .
${app:8}
fue algo nuevo para aprender. Gracias por la explicación. @JesseTweed Creo que sería bueno limpiar los comentarios. :):8
parte para ver el contenido de la $app
variable por completo. También intente ejecutar solo la pm list packages
parte para ver su salida. Este último generalmente produce un montón de líneas en el formato package:com.foobar.app
; si eso se ve diferente en su caso, ese será el problema. ¿Qué obtienes de este último? ¿Coincide el formato? Si es así, es posible que el shell de su dispositivo no entienda la sintaxis de ${app:8}
; entonces intente $(echo $app | awk -F":" '{print $2}')
en su lugar.pm list packages
produce en su dispositivo? (solo las primeras líneas: la salida completa no se ajusta a un comentario de todos modos;)pm list packages
(que solo enumera los nombres de los paquetes, pero no antepone los comandos). for app in $(pm list packages); do echo pm clear ${app:8}; done
El resultado en su último comentario es más bien lo que produciría el completo : el resultado que quería tener: los comandos para "borrar todos los datos de la aplicación sin realizar un restablecimiento de fábrica". Aunque es posible que desee verificar esas declaraciones antes de ejecutarlas, para no borrar demasiadas aplicaciones :)pmclean.sh
), y luego usar un paso doble: adb push pmclean.sh /sdcard/pmclean.sh
más adb shell sh /sdcard/pmclean.sh
(opcionalmente seguido de adb shell rm /sdcard/pmclean.sh
para eliminar el script nuevamente)./sdcard
, y no a otro lugar? Con Kitkat y superior, podría imaginar un "permiso denegado", pero un "solo lectura" me deja suponga que trató de escribir en otro lugar, por ejemplo, /
o /system
).adb shell 'for app in $(pm list packages); do echo pm clear ${app:8}; done'
y reemplaza las comillas simples con comillas dobles como esta, adb shell "for app in $(pm list packages); do echo pm clear ${app:8}; done"
se ejecutará en un archivo por lotes de Windows.$variables
para el Droid;) Integraré esto con mi respuesta: la gloria por esa parte es para ti, por supuesto :)
Huey