ti-enxame.com

Por que recebo um erro "sqlite3: not found" em um Nexus One com root quando tento abrir um banco de dados usando o shell adb?

# sqlite3 /data/data/com.moodme.Android/databases/moodme
sqlite3 /data/data/com.moodme.Android/databases/moodme
sqlite3: not found
44
Julian A.

No emulador do Android, sqlite3 está em /system/xbin. Não há /system/xbin em um Nexus One (Android 2.2). Por isso, suspeito que sqlite3 não esteja instalado no Nexus One.

21
CommonsWare

Como alternativa (pode não ser segura ou mesmo boa ideia), você sempre pode fazer o upload do binário sqlite3 para /system/bin que funcionou para mim:

Primeiro vamos montar /system/ para permitir leitura/gravação (rw)

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

em outro terminal, mude de diretório (cd) para onde sqlite3 é e vamos para Push it

$ ls
sqlite3
$ adb Push sqlite3 /sdcard/

Agora de volta para o outro Shell permite copiar e alterar as permissões do binário

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

Agora vamos voltar /system/ como somente leitura (ro)

# mount -o remount,ro /system

E agora podemos usar o sqlite3 da Shell:

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

NotaEu estou usando o binário sqlite3 que vem com "SuperOneClickv1.6.5-ShortFuse"

Você sempre pode extrair o binário sqlite3 do emulador:

Inicie um emulador e, em seguida, a partir de um terminal

$ adb pull /system/xbin/sqlite3

Se você é preguiçoso como eu, você pode baixar um aqui para ICS ou antes ou para Jelly bean e mais tarde aqui

Certifique-se de usar o apropriado para a sua versão do Android, pois você pode obter eloc_library[1306]: 14446 cannot locate 'sqlite3_enable_load_extension'... ou erros semelhantes em executar

92
eveliotc

A partir da resposta do evelio, tive problema para Empurrar o arquivo sqlite3 para/system/bin. Então, ao invés disso, eu o empurrei para o/sdcard.

Neste tópico eu encontrei a solução certa (resposta de Kila): Como posso instalar o sqlite3 em root NexusOne é executado 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 no meu Samsung Galaxy S II com 2.3.3.

12
jiahao

Para instalar o sqlite3 em dispositivos NÃO-ROOTED, aqui está uma maneira que foi provada trabalhando no meu 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>
3
Jeremy Kao

No Nexus 4, faça o seguinte:

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 a pasta é/system/xbin e o chmod é 777

2
vinzzz

Mais algumas informações que podem ajudar alguém sobre esse problema

Para as pessoas que se perguntam onde obter um arquivo binário sqilte3 para copiar: 

Você pode usar o emulador para obter um binário funcional. Você deve antes verificar se sua compilação é baseada em _86, _64 ou ARM e replicar esta imagem ou você pode obter uma versão incompatível que causará um erro. 

Verificando qual versão é seu dispositivo Android

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

Criando ARM no Android Studio

Android Studio - Como posso criar um AVD com ARM em vez de HAXM?


Em seguida, use as notas abaixo para mover arquivos entre sua máquina e de volta para o dispositivo Android.

Tornando adb writable 

Erro do push do sdcard do emulador do Android: sistema de arquivos somente leitura

Copiando arquivos do adb para a máquina do dispositivo local

Como copiar arquivos selecionados do Android com o adb pull

Em um dispositivo enraizado nexus 4 estes links com as instruções nesta página funcionaram. Espero que ajude alguém. A chave é que você precisa montar para obter permissão de escrita no dispositivo via adb. 

0
sivi