¿Por qué obtengo un error "sqlite3: not found" en un Nexus One enraizado cuando intento abrir una base de datos usando el shell de adb?
# sqlite3 /data/data/com.moodme.android/databases/moodme sqlite3 /data/data/com.moodme.android/databases/moodme sqlite3: not found
- Unidad de pruebas de creación de una base de datos SQLite utilizando Spock y Robospock
- ¿Cómo puedo recuperar datos de la base de datos con el cursor? (Android, SQLite)
- Sqlite: parece que moveToNext funciona sin moverToFirst necesario
- SQLiteOpenHelper vs ContentProvider
- Android SQLiteOpenHelper no puede abrir el archivo de base de datos
- Necesidad de mostrar una consulta SQLite en orden descendente
- SelectionArgs en SQLiteQueryBuilder no funciona con valores enteros en columnas
- Android SQLite ORDER BY no funciona
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.
Como una alternativa (no puede ser seguro o incluso buena idea sin embargo) siempre se puede cargar el binario sqlite3
a /system/bin
esto funcionó para mí:
Primero permite que mount /system/
permita lectura / escritura (rw)
$ adb shell $ su # mount -o remount,rw /system
En otro directorio de cambio de terminal (cd) a donde sqlite3
es y permite empujarlo
$ ls sqlite3 $ adb push sqlite3 /sdcard/
Ahora de nuevo al otro shell permite copiar y cambiar los permisos del binario
# cat /sdcard/sqlite3 > /system/bin/sqlite3 # chmod 4755 /system/bin/sqlite3
Ahora permite montar de nuevo /system/
as sólo 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 utilizando el binario sqlite3 que viene con "SuperOneClickv1.6.5-ShortFuse"
Siempre se puede extraer sqlite3
binario desde el emulador:
Iniciar un emulador y luego de un terminal
$ adb pull /system/xbin/sqlite3
Si eres perezoso como yo, puedes descargar uno aquí para ICS o antes o para Jelly Bean y más tarde aquí
Asegúrese de usar 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 en ejecutar
Desde la respuesta de evelio, tuve problemas para empujar el archivo sqlite3 a / system / bin. Por lo tanto, en su lugar, lo he empujado a la / sdcard.
En este hilo encontré la solución correcta (respuesta de Kila): ¿Cómo puedo instalar sqlite3 en NexusOne con raíces ejecuta 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.
Para instalar sqlite3 en dispositivos NO ROOTADOS, he aquí una manera que ha sido probada trabajando 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>
En el Nexus 4, haga 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
Más información que puede ayudar a alguien acerca de este problema
Para las personas que se preguntan dónde obtener un archivo de trabajo sqilte3 binario para copiar:
Puede utilizar el emulador para obtener un binario de trabajo. Debe comprobar antes si su compilación se basa en _86, _64 o ARM y replicar esta imagen o puede obtener una versión incompatible que causará un error.
Comprobación de la versión de tu dispositivo Android
https://www.quora.com/How-can-I-check-whether-my-Android-phone-is-32-bit-or-64-bit
Construcción de ARM en el estudio android
Android Studio – ¿Cómo puedo hacer un AVD con ARM en lugar de HAXM?
A continuación, utilice las notas siguientes para mover archivos entre su máquina y volver al dispositivo Android.
Hacer adb escribible
Emulador de Android error de inserción de sdcard: Sistema de archivos de sólo lectura
Copiar archivos desde un dispositivo local a un dispositivo local
Cómo copiar archivos seleccionados de Android con adb pull
En un nexo de dispositivo enraizado 4 estos enlaces con la instrucción en esta página funcionó. Espero que ayude a alguien. La clave es que necesita montar para obtener permiso de escritura en el dispositivo a través de adb.
- Encontrado com.google.android.gms: play-services-gcm: 8.3.0, pero se necesita la versión 8.1.0
- ¿Cómo puedo añadir un archivo de imagen al objeto json?