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.