android sqlite shell adb rooted-device

android - ¿Por qué aparece el error "sqlite3: no encontrado" en un Nexus One rooteado cuando intento abrir una base de datos usando el shell adb?



rooted-device (6)

# sqlite3 /data/data/com.moodme.android/databases/moodme sqlite3 /data/data/com.moodme.android/databases/moodme sqlite3: not found


Como alternativa (aunque puede que no sea seguro ni siquiera una buena idea), siempre puedes subir el binario sqlite3 a /system/bin esto funcionó para mí:

Primero permite montar /system/ para permitir lectura / escritura (rw)

$ adb shell $ su # mount -o remount,rw /system

en otro directorio de cambio de terminal (cd) donde está sqlite3 y vamos a empujarlo

$ ls sqlite3 $ adb push sqlite3 /sdcard/

Ahora, de vuelta al otro shell, copiemos y cambiemos los permisos del binario

# cat /sdcard/sqlite3 > /system/bin/sqlite3 # chmod 4755 /system/bin/sqlite3

Ahora vamos a montar /system/ como solo lectura (ro)

# mount -o remount,ro /system

Y ahora podemos usar sqlite3 desde shell:

# sqlite3 /data/data/com.telly/databases/fun.db SQLite version 3.7.4 Enter ".help" for instructions sqlite> .tables android_metadata lulz

Nota : Estoy usando el binario sqlite3 que viene con "SuperOneClickv1.6.5-ShortFuse"

Siempre puedes extraer sqlite3 binario sqlite3 del emulador:

Comience un emulador y luego desde un terminal

$ adb pull /system/xbin/sqlite3

Si eres flojo como yo, puedes descargar uno aquí para ICS o antes o para Jelly Bean y más tarde aquí

Asegúrese de utilizar el adecuado para su versión de Android, ya que puede obtener eloc_library[1306]: 14446 cannot locate ''sqlite3_enable_load_extension''... o errores similares al ejecutar


En el Nexus 4 haz lo siguiente:

adb shell $ su # mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system # dd if=/sdcard/sqlite3 of=/system/xbin/sqlite3 # chmod 777 /system/xbin/sqlite3 # mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system

Observe que la carpeta es / system / xbin y el chmod es 777


En el emulador de Android, sqlite3 está en /system/xbin . No hay /system/xbin en un Nexus One (Android 2.2). Por lo tanto, sospecho que sqlite3 no está instalado en el Nexus One.


Para instalar sqlite3 en dispositivos NO ENRAIZADOS, he aquí una manera de probar que funciona en mi Galaxy S3, FYR.

$ adb -e pull /system/xbin/sqlite3 # get sqlite3 binary from emulator with the same CPU arch. $ adb -d push sqlite3 /mnt/sdcard # push it $ adb -d shell $ run-as <PACKAGE_NAME> # run as your app, which should be debuggable. $ cd databases; pwd /data/data/<PACKAGE_NAME>/databases $ cat /mnt/sdcard/sqlite3 > sqlite3 # copy it to internal storage directory $ ls -l sqlite3 -rw-rw-rw- u0_a138 u0_a138 36860 2014-03-26 06:37 sqlite3 $ chmod 777 sqlite3 # change mode bits, to be executable $ ./sqlite3 # now it works on your NON-ROOTED device SQLite version 3.7.11 2012-03-20 11:35:50 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite>


Por la respuesta de evelio, tuve un problema al insertar el archivo sqlite3 en / system / bin. Entonces, en cambio, lo he llevado a la / sdcard.

En este hilo encontré la Solución correcta (respuesta de Kila): ¿Cómo puedo instalar sqlite3 en las ejecuciones de raíz de NexusOne Gingerbread?

$ adb push sqlite3 /sdcard/ $ adb shell $ su # mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system # dd if=/sdcard/sqlite3 of=/system/bin/sqlite3 # chmod 4755 /system/bin/sqlite3 # mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system

Funciona en mi Samsung Galaxy S II con 2.3.3.


Más información que puede ayudar a alguien sobre este problema

Para las personas que se preguntan dónde obtener un archivo binario sqilte3 en funcionamiento para copiar:

Puedes usar el emulador para obtener un binario funcional. Antes de comprobar si su creación se basa en _86, _64 o ARM, debe replicar esta imagen o puede obtener una versión incompatible que provocará un error.

Verificando qué versión es tu dispositivo android

https://www.quora.com/How-can-I-check-whether-my-Android-phone-is-32-bit-or-64-bit

Construyendo ARM en android studio

Android Studio - ¿Cómo puedo hacer una AVD con ARM en lugar de HAXM?


Luego, use las notas a continuación para mover archivos entre su máquina y volver al dispositivo Android.

Hacer que adb se pueda escribir

Error de inserción de sdcard de Android Emulator: sistema de archivos de solo lectura

Copia de archivos de adb a la máquina del dispositivo local

Cómo copiar archivos seleccionados de Android con adb pull

En un dispositivo enraizado nexus 4 estos enlaces con las instrucciones en esta página funcionaron. Espero que ayude a alguien. La clave es que necesita montar para obtener permiso de escritura en el dispositivo a través de adb.