android - telefono - ¿Es posible ver los datos de la aplicación desde el shell adb de la misma manera que lo veo al montar la tarjeta SD?
porque no puedo mover aplicaciones ala tarjeta sd (3)
Estoy probando una aplicación de Android.
Me gustaría vigilar el contenido de
/sdcard/Android/data/com.myapplication
mientras que la aplicación se está ejecutando.
Pero mi aplicación no funciona correctamente si la tarjeta sd está montada como unidad de disco en la PC (accede a fotos y videos).
Así que pensé que podría usar adb shell. Pero no me deja acceder a esa misma carpeta:
ls /sdcard/Android/data/com.myapplication
/sdcard/Android/data/com.myapplication: Permission denied
Buscando en Stack Overflow, encontré esta manera de ver los datos de la aplicación a través de la shell adb:
run-as com.myapplication
Y al hacerlo me encuentro en la carpeta.
/data/data/com.myapplication
Lo que me confunde es que los datos que veo aquí son diferentes de los que veo al navegar por el contenido de la tarjeta sd a través de la PC.
$ ls
ls
files
databases
shared_prefs
lib
Veo en los archivos algo que también estaba en la carpeta sdcard Android / data / com.myapplication, pero no en lo que estaba buscando. Además, todas las demás carpetas son diferentes.
¿Hay una correlación entre esto?
/data/data/com.myapplication
carpeta accesible a través de adb y la
/sdcard/Android/data/com.myapplication
carpeta accesible a través de PC?
¿Hay alguna manera de ver en adb shell los archivos presentes en este último?
Como regla general, los archivos que se encuentran en el Internal storage
y almacenados por su aplicación (de forma predeterminada, no se pueden WORLD_READABLE
) solo estarán disponibles para que los lea su aplicación. Cuando intente pull
estos archivos utilizando adb pull
, obtendrá un permiso denegado en un dispositivo NO rooteado. Hay una manera de evitar esto, explicaré más adelante. Los archivos en External storage
por otro lado, están disponibles para el usuario y para todas las demás aplicaciones para leer. así que depende de lo que estés buscando.
Ahora, para leer archivos en su almacenamiento internal ( /data/data/com.app.name
) no puede leer estos archivos directamente, pero lo que puede hacer es moverlos al almacenamiento external y luego leerlos desde allí de esta manera.
adb shell "run-as com.yourappName cat /data/data/com.yourappName/files/myfile.txt > /sdcard/Downloads/myfile.txt"
Luego, puede extraer el archivo del almacenamiento externo sin problemas de permisos.
adb pull /sdcard/Downloads/myfile.txt
Si no está seguro de qué archivo o si desea explorar todos los archivos, utilice el shell para explorar todos los archivos de su aplicación.
adb shell
run-as yourappPackageName
cd /data/data/youappPackageName
ls -all
He podido obtener el DB de Sqlite que la aplicación está utilizando con este comando de Adb:
adb exec-out run-as xxx.xxx.xxx.xxx cat "/data/data/xxx.xxx.xxx.xxx/databases/databasefile.db" > %userprofile%/Desktop/databasefile.db
Donde xxx.xxx.xxx.xxx es el bundleId de su aplicación de Android, y databasefile.db es el nombre de la base de datos de Sqlite
Así que me imagino que puede obtener cualquier archivo existente de la aplicación, saber dónde está y usar el comando adb exec-out run-as xxx.xxx.xxx.xxx
Puede acceder a él a través de la utilidad que se publicó anteriormente en un blog. Es una utilidad java a través de la cual puede obtener todas las carpetas en la carpeta de datos de su aplicación con solo dar el nombre del paquete de su aplicación. Solo la aplicación necesita ser debuggable.
Realmente funciona