¿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 

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.

  • Tabla de puntuaciones altas
  • ¿Cuál es la sintaxis de "no igual" en SQLite?
  • Sqlite actualiza una columna basada en la cláusula where android
  • Android.database.sqlite.SQLiteCantOpenDatabaseException: error desconocido (código 14): No se pudo abrir el problema de la base de datos
  • Cómo personalizar FTS tokenizer en Android
  • Una buena biblioteca de ORM de Java en Android
  • ¿Cómo puedo ordenar mi base de datos SQLITE en orden descendente, para una aplicación de Android?
  • Cómo ver la base de datos de aplicación de Android que se ejecuta en mi teléfono
  • Visualización de la imagen desde la base de datos sqlite con el cursor en android
  • Cómo almacenar un valor de tiempo en la base de datos SQLite en Android?
  • Longitud máxima de Android Sqlite String?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.