¿Cómo puedo extraer bases de datos de mi Android en mi escritorio?

Estoy intentando esto con mi Nexus One. Tengo el androide SDK y he utilizado el comando adb pull /data/data/com.myapp.android/databases C: \ pulls pero todo lo que consigo es tirar: la construcción de lista de archivos … 0 archivos extraídos. 0 archivos saltados. Además, parece que no importa la cantidad de datos que agregué a la aplicación de Bloc de notas tutorial que instalé, el tamaño de los datos de la aplicación (como se muestra en Configuración) nunca supera los 8 KB. ¿Cómo es esto posible? ¿Hay algún otro lugar donde se almacenan las bases de datos? Cuando uso la vista Explorador de archivos (que forma parte de ADT) en Eclipse, veo que no hay nada en / data. Para añadir un giro, no tengo problemas para sacar otros archivos del dispositivo. Son sólo las bases de datos con las que tengo problemas. ¿Me estoy perdiendo de algo? Muchas gracias.

No es posible acceder al almacenamiento interno a menos que el teléfono esté enraizado. Una manera simple es usar el emulador, y entonces usted puede conseguir en los archivos. Para obtener una base de datos fuera del dispositivo que escribió una pequeña utilidad y poner en algún depuración UI para él:

private void backupDb() throws IOException { File sd = Environment.getExternalStorageDirectory(); File data = Environment.getDataDirectory(); if (sd.canWrite()) { String currentDBPath = "/data/com.yourcompany.yourapp/databases/yourapp.db"; String backupDBPath = "/yourapp_logs/yourapp.db"; File currentDB = new File(data, currentDBPath); File backupDB = new File(sd, backupDBPath); if (backupDB.exists()) backupDB.delete(); if (currentDB.exists()) { makeLogsFolder(); copy(currentDB, backupDB); } dbFilePath = backupDB.getAbsolutePath(); } } private void makeLogsFolder() { try { File sdFolder = new File(Environment.getExternalStorageDirectory(), "/yourapp_logs/"); sdFolder.mkdirs(); } catch (Exception e) {} } private void copy(File from, File to) throws FileNotFoundException, IOException { FileChannel src = null; FileChannel dst = null; try { src = new FileInputStream(from).getChannel(); dst = new FileOutputStream(to).getChannel(); dst.transferFrom(src, 0, src.size()); } finally { if (src != null) src.close(); if (dst != null) dst.close(); } } 

Cree un archivo "pull.bat" en el escritorio de Windows.

En el archivo puesto:

 db pull /data/com.APPNAME/databases/DBNAME.sqlite pause 

Si está utilizando MAC o Linux, pruebe este script. Esto no requiere permisos de root

 #!/bin/bash REQUIRED_ARGS=2 ADB_PATH=/Users/Tadas/Library/sdk/platform-tools/adb PULL_DIR="~/" if [ $# -ne $REQUIRED_ARGS ] then echo "" echo "Usage:" echo "android_db_move.sh [package_name] [db_name]" echo "eg. android_db_move.sh lt.appcamp.impuls impuls.db" echo "" exit 1 fi; echo"" cmd1="$ADB_PATH -d shell 'run-as $1 cat /data/data/$1/databases/$2 > /sdcard/$2' " cmd2="$ADB_PATH pull /sdcard/$2 $PULL_DIR" echo $cmd1 eval $cmd1 if [ $? -eq 0 ] then echo ".........OK" fi; echo $cmd2 eval $cmd2 if [ $? -eq 0 ] then echo ".........OK" fi; exit 0 
  • ¿Por qué el comando SQLite 3 que usa la shell ADB de Android devuelve "permiso denegado"?
  • ¿Cómo instalo el controlador USB para Nexus One en Windows 7 con fines de depuración?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.