Actualmente estoy trabajando en una aplicación WiFi para Android. Tengo problemas al intentar acceder a la base de datos en el dispositivo. La depuración en el emulador no me funciona, porque no hay soporte WiFi en el emulador. Intenté sacar el archivo de la base de datos del dispositivo usando
adb pull data/data/package-name/databases/database-name
Pero aparece el error "Permiso denegado". En esta respuesta Android: ¿Dónde se almacenan los archivos de la base de datos? , Commonsware ha sugerido extraer el archivo de la base de datos ejecutándolo en modo de depuración. Pero tampoco funciona. Cualquier ayuda sobre cómo depurar la base de datos sin rootear el dispositivo será muy apreciada.
SQLite format 3
cadena. También asegúrese de tener unasqlite
versión correcta (es decir, no está intentando abrir la base de datos sqlite3 con el ejecutable sqlite2). Y también puede probar otros clientes de SQLite (por ejemplo, SQLiteStudio ). Espero eso ayude.permission denied
Utilizo este script de shell en mi MAC, que copia la base de datos directamente en mi carpeta de inicio. Solución fácil de un clic, simplemente cambie el nombre del paquete (com.example.app) y el nombre de la base de datos (database.sqlite)
Script simple
Script que acepta argumentos [nombre_paquete] [base de datos]
fuente
La mejor manera de ver y administrar la base de datos de su aplicación de Android es usar esta biblioteca https://github.com/sanathp/DatabaseManager_For_Android
Con esta biblioteca puede administrar la base de datos SQLite de su aplicación desde su propia aplicación. puede ver las tablas en la base de datos de su aplicación, actualizar, eliminar, insertar filas en sus tablas. Todo desde su aplicación.
Es un solo archivo de actividad java, simplemente agregue el archivo java a su carpeta de origen. Cuando el desarrollo haya terminado, elimine el archivo java de su carpeta src, eso es todo.
Me ayudó mucho. Espero que te ayude a ti también.
Puede ver la demostración de 1 minuto aquí: http://youtu.be/P5vpaGoBlBY
fuente
Aunque es una pregunta antigua, creo que sigue siendo relevante y merece una respuesta de estado actual. Hay herramientas disponibles que le permiten inspeccionar bases de datos directamente (sin la necesidad de extraerlas del dispositivo o emulador).
La herramienta que descubrí más recientemente (y la que más me gusta ) es la base de datos de depuración de Android .
Solo necesita agregar esta dependencia:
No se requiere más código. Después de iniciar su aplicación, abra logcat y filtre por "DebugDB" y encontrará un mensaje que dice
Funciona con todos los navegadores y puede inspeccionar las tablas de su base de datos y las preferencias compartidas.
También funciona con los emuladores predeterminados y Genymotion.
La herramienta que usé antes es stetho .
Desventaja: debe agregar un poco de código y está vinculado al navegador Chrome.
Ventaja: tiene la opción de inspeccionar también el tráfico de la red.
fuente
En mi aplicación, exporto la base de datos a la tarjeta SD. Una vez que la base de datos está en la tarjeta SD, se puede acceder conectando el dispositivo a su computadora.
Mire esta publicación: Hacer una copia de seguridad de la base de datos en SDCard en Android
fuente
Si lo consigues
tratar
¡Tenga en cuenta las comillas dobles!
fuente
Simplemente hice:
Entonces puedo depurar una base de datos sqlite o lo que quiera hacer desde el shell con los permisos adecuados.
fuente
Hay una manera si un apk se puede depurar para usar un programa llamado run-as desde el shell adb (no root) para copiar el archivo privado de una aplicación.
fuente
Aquí hay instrucciones paso a paso, en su mayoría tomadas de una combinación de las otras respuestas. Esto funciona con dispositivos que no están desbloqueados.
Conecte su dispositivo e inicie la aplicación en modo de depuración.
Copie el archivo de la base de datos de la carpeta de su aplicación a su tarjeta sd: ejecute:
./adb -d shell 'ejecutar-como com.yourpackge.name cat /data/data/com.yourpackge.name/databases/filename.sqlite> /sdcard/filename.sqlite'
Extraiga los archivos de la base de datos a su máquina: ejecute:
./adb pull / sdcard / execute: ./adb
Instale Firefox SQLLite Manager: https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/
Abra Firefox SQLLite Manager y abra su archivo de base de datos desde el paso 3 anterior.
¡Disfrutar!
fuente
Android Studio 4.1 Se agregó una nueva función para ver / editar bases de datos SQLite de Android.
Cómo abrir el Inspector de base de datos
Para abrir el Inspector de base de datos en Android Studio, debe seleccionar
View > Tool Windows > Database Inspector
en la barra de menú.Además, debe ejecutar la aplicación en un dispositivo que ejecute API nivel 26 o superior.
Con esta herramienta puede
Consulta tus bases de datos
Modifica y depura tu base de datos
fuente
En el nuevo Android Studio 4.1 existe el nuevo Inspector de base de datos .
Puede seleccionar las siguientes opciones de la barra de menú
View > Tool Windows > Database Inspector
para abrirlo. En este blog se pueden encontrar instrucciones más detalladas .Otra forma es usar stetho para esto. Agrega la dependencia y luego puede usar Chrome DevTools (chrome: // inspeccionar) para verificar la base de datos cuando el dispositivo está conectado.
fuente
Debe ejecutar adb como root o usarlo en un teléfono rooteado.
Para ejecutar adb como root, use
adb root
Consulte también: ¿Por qué se me niega el acceso a la carpeta de datos cuando uso adb?
fuente
Ninguna de las
run-as
soluciones -and-cat-to-sdcard funcionó para mí en Android 4.4.2. No estoy seguro, pero sospecho que puede ser debido a larun-as
herramienta no manejar correctamente el nuevosdcard_r
ysdcard_rw
permisos.Primero tuve que copiar el archivo de la base de datos
/files
en el almacenamiento interno privado de mi aplicación:Luego copié
/sdcard/Android/data/com.example.myapp/files
en Javaland (esto requiere elWRITE_EXTERNAL_STORAGE
permiso):Finalmente, copié el archivo a mi computadora portátil:
fuente
Mi dispositivo no tenía sdcard
así que la primera solución no funcionó para mí.Si tiene un problema similar, intente así:
fuente
/sdcard
no es necesariamente una tarjeta SD. En mi teléfono, apunta al almacenamiento interno cuando no hay una tarjeta SD física.Pruebe esta aplicación: SQLiteWeb ( https://play.google.com/store/apps/details?id=br.com.cm.sqliteweb ). Proporciona acceso remoto a su base de datos sin tener que extraerla.
En la versión paga, tiene acceso de root para la base de datos privada (/ data / data / package-name ...) o implementa un proveedor de contenido para conectarse usando SQLiteWeb (instrucciones dentro de la aplicación)
Pero si desea quedarse con la versión gratuita, puede crear su base de datos en un almacenamiento externo:
fuente
En OSX, usando @Tadas responde con automator y sqllitebrowser ( https://github.com/sqlitebrowser/sqlitebrowser ):
abra Automator y cree un nuevo flujo de trabajo.
agregue la acción "Ejecutar Shell Script".
Pega esto:
source ~ / .bash_profile adb shell 'ejecutar-as cat /data/data/your_app_uid/databases/db.name> /tmp/db.name' adb pull /tmp/db.name ~ / open -a sqlitebrowser ~ / db. nombre
haga clic en ejecutar para actualizar la base de datos en sqlitebrowser.
fuente
cd <ANDROID_SDK_PATH>
(para mí en Windowscd C:\Users\Willi\AppData\Local\Android\sdk
)cd platform-tools
adb shell
(esto solo funciona si solo se está ejecutando un emulador)cd data/data
su
(obtenga privilegios de superusuario)cd <PACKAGE_NAME>/databases
sqlite3 <DB_NAME>
;
, de lo contrario, la sentencia no se emite y se rompe a una nueva línea).Nota: Utilice
ls
(Linux) odir
(Windows) si necesita enumerar el contenido del directorio.fuente