Estoy intentando esto con mi Nexus One. Tengo el SDK de Android y ha utilizado el comando adb /data/data/com.myapp.android/databases tracción C: \ tira pero todo lo que consigo es tirón: lista de archivos edificio ... 0 archivos sacaron. 0 archivos omitidos Además, parece que no importa cuántos datos agregue a la aplicación Notepad que instalé, el tamaño de los datos para 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 almacenen las bases de datos? Cuando uso la vista Explorador de archivos (que es parte de ADT) en Eclipse, veo que no hay nada en/data. Para agregar un giro, no tengo problemas para sacar cualquier otro archivo del dispositivo. Solo tengo problemas con las bases de datos. ¿Me estoy perdiendo algo? Muchas gracias.¿Cómo puedo extraer las bases de datos de mi android en mi escritorio?
6
A
Respuesta
10
No es posible acceder al almacenamiento interno a menos que su teléfono esté rooteado. Una forma simple es usar el emulador y luego puedes obtener los archivos. Para la obtención de una base de datos fuera del dispositivo escribí una pequeña utilidad y poner en un cierto interfaz de usuario de depuración para ello:
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();
}
}
0
Crear un archivo "pull.bat" en su escritorio de Windows.
En el puesto archivo:
db pull /data/com.APPNAME/databases/DBNAME.sqlite
pause
0
Si está utilizando MAC o Linux tratar 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
Cuestiones relacionadas
- 1. ¿Cómo puedo depurar Javascript que funciona en mi escritorio pero no en mi teléfono móvil?
- 2. ¿Cómo puedo cambiar el fondo de mi escritorio con python?
- 3. ¿Cómo puedo hacer que mi wxpython se muestre en la parte superior de mi escritorio?
- 4. ¿Cómo puedo licenciar mi aplicación de Android?
- 5. ¿Cuál es mi entorno de escritorio actual?
- 6. ¿Cómo puedo leer mi base de datos desde DDMS
- 7. ¿Cómo puedo bloquear las solicitudes de China en mi aplicación?
- 8. ¿Cómo puedo integrar AirPush Ads en mi aplicación de Android?
- 9. ¿Cómo puedo actualizar mi ADT en Eclipse?
- 10. ¿Cómo puedo encontrar las diferencias entre dos bases de datos?
- 11. ¿Cómo puedo aumentar las consultas de lectura/segundo en mi base de datos?
- 12. ¿Cómo puedo almacenar un hash en mi base de datos?
- 13. ¿Cómo puedo admitir mi aplicación Android para múltiples tiendas Android?
- 14. ¿Cómo puedo obtener las estadísticas de mi aplicación en iTunes?
- 15. ¿Cómo puedo mejorar mi detección de pata?
- 16. Bases de datos RDF en Android
- 17. ¿Cómo obtengo una lista de todas las ventanas en mi escritorio gnome2 usando pygtk?
- 18. ¿Cómo funcionan las bases de datos internamente?
- 19. ¿Cómo puedo dibujar el diseño de mi base de datos?
- 20. ¿Cómo puedo obtener la ruta relativa de las carpetas en mi proyecto de Android?
- 21. Android nueva línea en mi EditText
- 22. ¿Cómo puedo ver la información de mi base de datos de aplicaciones de Android?
- 23. ¿Cómo puedo cambiar los prefijos en todas las tablas de mi base de datos MySQL?
- 24. ¿Cómo puedo asegurar mi conexión a la base de datos?
- 25. ¿Dónde se guardan los datos de mi aplicación en Android?
- 26. ¿Cómo puedo mostrar mi actividad como un diálogo en Android?
- 27. ¿Cómo son las bases de datos eficientes?
- 28. ¿Cómo puedo degradar mi versión de SDK?
- 29. ¿Cómo puedo tomar el color de un píxel en mi escritorio? (Linux)
- 30. Android: ¿Cómo puedo saber cuántos textos pueden caber en mi textView (mi página)?
Gracias por compartir su código. Inicialmente utilicé el emulador pero cambié al desarrollo en mi teléfono Nexus One Dev porque es mucho más rápido de esa manera. Lo extraño es que mi Nexus One está rooteado. Cuando arranque, veo el candado desbloqueado en la parte inferior de la pantalla mientras se carga Android. ¿No significa esto que debería poder ejecutar comandos raíz? –
Tu código se ve bien, pero mi Eclipse no reconoce la copia (currentDB, backupDB); instrucción. ¿Tiene alguna biblioteca adicional (.jar) instalada para usar el método de copia? – Rutger
Hola, dhaag23, ¿podrías proporcionar la implementación del método de copia? –