He buscado en todas partes y no puedo encontrar una respuesta real precisa o un tutorial sobre cómo, si es posible, hacer esto.
¿Es posible extraer de alguna manera una base de datos de un dispositivo Android sin tener que rootearlo? Solo necesito extraer esos datos de cualquier manera para recopilarlos en mi PC, entonces, ¿cómo puedo realizar esto? ¿Tengo que reprogramar la aplicación o cualquier método que conozcan, pero recuerde sin rootear el dispositivo? Gracias
Respuestas:
Una forma común de lograr lo que desea es utilizar el comando de extracción de ADB.
Otra forma que prefiero en la mayoría de los casos es copiar la base de datos por código a la tarjeta SD:
No olvide establecer el permiso para escribir en SD en su manifiesto, como se muestra a continuación.
fuente
getPath
método.Si su dispositivo ejecuta Android v4 o superior, puede extraer datos de la aplicación, incluida su base de datos, sin root mediante el
adb backup
comando, luego extraer el archivo de respaldo y acceder a la base de datos sqlite.Primero haga una copia de seguridad de los datos de la aplicación en su PC mediante un cable USB con el siguiente comando, reemplácelo
app.package.name
con el nombre real del paquete de la aplicación.Esto le pedirá que "desbloquee su dispositivo y confirme la operación de copia de seguridad". No proporcione una contraseña para el cifrado de respaldo , para que pueda extraerla más tarde. Haga clic en el botón "Hacer una copia de seguridad de mis datos" en su dispositivo. La pantalla mostrará el nombre del paquete que está respaldando y luego se cerrará por sí solo cuando se complete con éxito.
El
data.ab
archivo resultante en su carpeta de inicio contiene datos de la aplicación en formato de copia de seguridad de Android. Para extraerlo use el siguiente comando:Si lo anterior terminó con un
openssl:Error: 'zlib' is an invalid command.
error, intente lo siguiente.El resultado es la
apps/app.package.name/
carpeta que contiene los datos de la aplicación, incluida la base de datos sqlite.Para obtener más detalles, puede consultar la publicación del blog original .
fuente
openssl:Error: 'zlib' is an invalid command.
, al que respondídd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
SIN EMBARGO, después de que muestra que17+0 records in17+0 records out17 bytes transferred in 0.000064 secs
no hay evidencia de que se haya hecho nada en la carpeta. Como solo tiene 17 bytes, supongo que el comando también falló. ¡Creo que es malo que no pueda acceder aadb pull
la base de datos desde una aplicación de depuración!android:allowBackup="false"
openssl
en Mac OS X no apoyaronzlib
comando tampoco, así que vuelve a instalar el uno con cerveza:brew reinstall openssl
. Esto no reemplazará su sistema openssl. Por lo tanto, modifiqué el comando PATH solo para la sesión actual:export PATH=/usr/local/opt/openssl/bin:$PATH
después de lo cual pude ejecutar con éxito los comandos de esta respuesta.Para aplicaciones depurables 1 en dispositivos no rooteados , puede usar el siguiente comando:
Ejemplo:
Establezca PATH adb para las variables de entorno o use el comando cd para las herramientas de plataforma de la carpeta sdk de Android.
Ejemplo:
luego use el comando anterior
1 Tenga en cuenta que la mayoría de las aplicaciones en Play Store no se pueden depurar, ya que requiere configurar el indicador de depuración en el manifiesto.
fuente
package.name
con el paquete de la aplicación, se devuelve el error:run-as: Package 'com.my.app' is unknown
La mayoría de las respuestas aquí son mucho más complicadas de lo que deberían ser. Si solo desea copiar la base de datos de su aplicación desde su teléfono a su computadora, solo necesita este comando:
Todo lo que necesita completar en el comando anterior es el nombre del paquete de su aplicación, cómo se llama la base de datos y, opcionalmente, qué / dónde desea que se copie la base de datos.
Tenga en cuenta que este comando específico solo funcionará si solo tiene un dispositivo conectado a su computadora. El
-d
parámetro significa que se apuntará al único dispositivo conectado. Pero hay otros parámetros que puede usar en su lugar:-e
apuntará al único emulador en ejecución-s <serialnumber>
apuntará a un dispositivo con un número de serie específico.fuente
adb -d shell "run-as your.package.name cat databases/database_name.db > /mnt/sdcard/database_name.db"
inicieSSHDroid
FileZilla y conéctese a su teléfono a través del protocolo SFTP. Establezca / mnt / sdcard como directorio remoto predeterminado.adb -d shell "run-as your.package.name ls databases"
) y 2) es posible que desee obtener cualquier otro archivo asociado junto con la base de datos, en mi caso, la extracción de los archivos -smh y -wal era la única forma de que DB Browser para SQLite abriera la base de datosCon Android Studio 3.0 o una versión posterior, es posible extraer la base de datos (también preferencia compartida, directorio de caché y otros) si la aplicación se ejecuta en modo de depuración en un dispositivo no rooteado.
Para extraer la base de datos usando Android Studio, siga estos pasos.
fuente
fuente
Para Ubuntu (¿no solo?):
vea la respuesta de Sergeis pero en lugar de openssl use zlib-flate:
De lo contrario, openssl probablemente arrojará:
porque openssl no está compilado con soporte zlib en Ubuntu
fuente
Desde entonces, nada funciona realmente para mí. Creo un pequeño script de Windows BATCH basado en otras respuestas combinadas. Espero que ayude a alguien. Simplemente use: backupDatabase <PackageName> <ApplicationName> [TargetDirectory]. Utiliza el método de copia de seguridad de Sergei y Android Backup Extractor .
fuente
puede extraer fácilmente el archivo sqlite de su dispositivo (root no es necesario)
empezar adb
cd / sdk / platform-tools ./adb shell
Luego escriba el siguiente comando en la terminal
./adb -d shell "ejecutar-as com.your_packagename cat /data/data/com.your_packagename/databases/jokhanaNepal> /sdcard/jokhana.sqlite"
Por ejemplo
./adb -d shell "ejecutar-como com.yuvii.app cat /data/data/com.yuvii.app/databases/jokhanaNepal> /sdcard/jokhana.sqlite"
fuente
Si está intentando hacerlo en Android 6 solicite el permiso y use el código de la respuesta de esta pregunta
Una vez que se concede
fuente
Alternativamente, puede usar mi biblioteca Ultra Debugger . Permite descargar la base de datos como archivo o editar valores directamente en el navegador. No se necesita root, muy fácil de usar.
fuente
En Mac (NO se requiere root)
Copiará el archivo sqlite en la carpeta de herramientas de la plataforma.
fuente
sí, si su aplicación de Android crea una copia de archivo de la base de datos a la que todos pueden acceder.
Android protege los datos privados de las aplicaciones para que no sean visibles / accesibles por otras aplicaciones. una base de datos son datos privados. su aplicación puede, por supuesto, leer el archivo de base de datos para que pueda hacer una copia de archivo en algún archivo público visible.
fuente
En un dispositivo rooteado puede:
fuente
Según la respuesta dada por Lam Vinh, aquí hay un archivo por lotes simple que funciona para mí en mi Nexus 7 de primera generación. Le pide al usuario que ingrese el nombre del paquete y luego el nombre de la base de datos (sin la extensión .sqlite) y lo coloca en c: \ temp. Esto supone que tiene el sdk de Android configurado en las variables de entorno.
fuente
Si está en Android 4.0 o superior, y está en una Mac , entonces aquí hay un script ruby que guardará el contenido de su aplicación en el escritorio. Me imagino que esto también funcionaría en Ubuntu, aunque no lo probé.
para ejecutar -> ruby your_ruby_file_name.rb
Esta secuencia de comandos es solo "ruta feliz", así que asegúrese de que su dispositivo esté conectado y de que adb se haya agregado a su perfil.
fuente
Doy la solución completa para "guardar" y "restaurar" la base de datos de la aplicación hacia / desde el almacenamiento interno (no a la PC con adb).
He hecho dos métodos, uno para guardar y otro para restaurar la base de datos. Utilice estos métodos al final de onCreate () en MainActivity (uno u otro si desea guardar o restaurar la base de datos).
guardar la base de datos en el almacenamiento interno:
restaurar la base de datos desde el almacenamiento interno:
fuente
Siempre es mejor si las cosas están automatizadas Es por eso que escribí un script de Python simple para copiar el archivo db desde el dispositivo usando ADB. Ahorra mucho tiempo de desarrollo si lo hace con frecuencia.
Solo funciona con aplicaciones depurables si el dispositivo no está rooteado.
Aquí hay un enlace a la esencia.
Ejecútelo como:
python copyandroiddbfile.py
fuente
Si quieres tu archivo de base de datos
Ver DDMS> Explorar archivos
encuentre su archivo db a partir del nombre de su paquete
luego haga clic en extraer un archivo del dispositivo (solo dispositivo rooteado)
fuente