Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Genymotion. Cómo extraer la base de datos del dispositivo. Mi / data / data / carpeta parece estar vacía

Tengo un problema con mi instalación de Ubuntu de genymotion. Principalmente no puedo depurar mi base de datos ya que tanto a través de DBMS en eclipse y adb en shell no puedo ver el contenido de / data / carpeta. No se muestran archivos.

Yo registro a través de adb por cd a / sdk / platform-tools y escribiendo ./adb shell su. Veo que la pestaña no funciona, por lo que ciegamente escriba el camino. De todas formas no soy capaz de sacar db, tal vez estoy haciendo algo mal con los comandos.

A través de DBMS intento conectar pero la carpeta de datos no muestra el contenido.

En Emulator todo funciona bien, pero el emulador es lento y prefiero usar genymotion.

¿Alguna sugerencia de cómo tratar este problema?

4 Solutions collect form web for “Genymotion. Cómo extraer la base de datos del dispositivo. Mi / data / data / carpeta parece estar vacía”

No tengo el problema que estás hablando, el usuario de shell por defecto en Genymotion es root, por lo que no debería suceder. A pesar de todo, puedes usar el comando run-as para acceder a tus datos directamente.

Para que sea breve. La carpeta de datos de la aplicación está protegida por los derechos de usuario de la aplicación. El usuario de shell predeterminado no tiene acceso correcto a la carpeta de la aplicación. Puede cambiar el usuario que está utilizando el shell gracias al comando run-as .

  1. Abrir un shell: adb shell
  2. A continuación, escriba: run-as your.package.name

Este comando cambiará el usuario de la shell al usuario de la aplicación. Así que usted tendrá derecho a leer y escribir en los datos de la aplicación. También será redirigido a la carpeta de datos de su aplicación: /data/data/you.package.name

Cuando se hace usted puede hojear sus archivos fácilmente.

Aviso : Su aplicación tiene que ser construida como depuración para poder utilizar este comando. Se supone que se muestra en la lista de procesos del dispositivo en DDMS.

Ejecute el emulador en su computadora local, luego

Localuser: ~ localhost $ adb shell
Shell @ android: / $ su
Shell @ android: / # cp / datos / datos / your.package.name / databases / your_database.db / mnt / shell / emulated / 0 / Descargar / your_database.db
Shell @ android: / # salida
Shell @ android: / $ exit
Localuser: ~ localhost $ adb pull / mnt / shell / emulated / 0 / Descargar / your_database.db ~ / your_database.db

Lo que hace es:
1. Se conecta al emulador
2. Solicita permisos de superusuario
3. Copia el archivo que sólo está disponible para el superusuario en un directorio público (descargas en este caso)
4. Extrae el archivo de la carpeta pública (descargas) a su directorio local de la máquina local; También puede realizar este paso desde eclipse gui.

Tienes que establecer permisos para esa carpeta / archivo, entonces puedes tirar fácilmente:

Adb shell "run-as package.name chmod 666 /data/data/package.name/databases/file"

Adb pull /data/data/package.name/databases/file.

Me las arreglé para tipo de ir alrededor del tema por lo que publicar mi solución en caso de que alguien va a encontrar útil.

Anteriormente he estado creando VM sin apis google, la aplicación superUser se estrelló cada vez que quería arraigar el teléfono.

Por lo que creó VM que se proporciona con google play y descargado SQL Depurador App. También uso este código en mi suite de pruebas y así que busco db a SD-card al final de cada prueba que corro. De esa manera no necesito tener permisos de superusuario.

 public static void copyDbToSd(Context context) { File dbFile = context.getDatabasePath((String) DatabaseHandler.DATABASE_NAME); InputStream myInput; try { myInput = new FileInputStream(dbFile); OutputStream myOutput = new FileOutputStream( Environment.getExternalStorageDirectory() + java.io.File.separator + "database.db"); byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer)) > 0) { myOutput.write(buffer, 0, length); } myOutput.flush(); myOutput.close(); myInput.close(); } catch (FileNotFoundException e) { Log.e(TAG, "Exception: ", e); } catch (IOException e) { Log.e(TAG, "Exception: ", e); } } 

Donde DatabaseHandler.DATABASE_NAME es el nombre de mi base de datos que establezco en crear db.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.