web-dev-qa-db-fra.com

Pourquoi une erreur "sqlite3: not found" apparaît-elle sur un Nexus One enraciné lorsque j'essaie d'ouvrir une base de données à l'aide du shell adb?

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

Sur l'émulateur Android, sqlite3 est dans /system/xbin. Il n'y a pas /system/xbin sur un Nexus One (Android 2.2). Par conséquent, je soupçonne que sqlite3 n’est pas installé sur le Nexus One.

21
CommonsWare

En guise d'alternative (cela peut ne pas être sûr ou même une bonne idée), vous pouvez toujours télécharger le binaire sqlite3 dans /system/bin ceci a fonctionné pour moi:

Commençons par monter /system/ pour permettre la lecture/écriture (rw)

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

dans un autre terminal, changez le répertoire (cd) vers sqlite3 et laissez Push it

$ ls
sqlite3
$ adb Push sqlite3 /sdcard/

Revenons maintenant à l’autre Shell permet de copier et de modifier les autorisations du fichier binaire.

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

Maintenant, remontons /system/ en lecture seule (ro)

# mount -o remount,ro /system

Et maintenant, nous pouvons utiliser sqlite3 de Shell:

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

RemarqueJ'utilise le binaire sqlite3 fourni avec "SuperOneClickv1.6.5-ShortFuse"

Vous pouvez toujours extraire sqlite3 binaire de l'émulateur:

Démarrer un émulateur puis à partir d'un terminal

$ adb pull /system/xbin/sqlite3

Si vous êtes paresseux comme moi, vous pouvez en télécharger un ici même pour ICS = ou avant ou pour Jelly Bean et plus tard ici

Assurez-vous d’utiliser la version adaptée à votre version Android, car vous risquez d’obtenir eloc_library[1306]: 14446 cannot locate 'sqlite3_enable_load_extension'... ou des erreurs similaires lors de l’exécution.

92
eveliotc

D'après la réponse d'evelio, j'ai eu un problème pour envoyer le fichier sqlite3 à/system/bin. Donc, au lieu de cela, je l'ai poussé sur la/sdcard.

Dans ce fil, j'ai trouvé la bonne solution (réponse de Kila): Comment puis-je installer sqlite3 sur un NexusOne rooté exécute 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 

Cela fonctionne sur mon Samsung Galaxy S II avec 2.3.3.

12
jiahao

Pour installer sqlite3 sur des périphériques NON-ROOTES, voici une méthode qui a fait ses preuves sur mon 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

Sur le Nexus 4, procédez comme suit:

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

Notez que le dossier est/system/xbin et que le chmod est 777

2
vinzzz

Quelques informations supplémentaires pouvant aider quelqu'un sur ce problème

Pour les personnes qui se demandent où trouver un fichier binaire sqilte3 qui fonctionne à copier: 

Vous pouvez utiliser l'émulateur pour obtenir un binaire fonctionnel. Vous devez au préalable vérifier si votre construction est basée sur _86, _64 ou ARM et répliquer cette image, sinon vous risquez d'obtenir une version incompatible qui provoquera une erreur. 

Vérifier quelle version est votre appareil Android

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

Construction ARM dans le studio Android

Android Studio - Comment créer un DAV avec ARM au lieu de HAXM?


Ensuite, utilisez les notes ci-dessous pour déplacer des fichiers de votre ordinateur vers l’appareil Android.

Rendre inscriptible en écriture 

Erreur sdcard Push de l'émulateur Android: système de fichiers en lecture seule

Copie de fichiers d'adb sur un ordinateur local

Comment copier des fichiers sélectionnés sous Android avec adb pull

Sur un lien de périphérique enraciné 4, ces liens avec les instructions de cette page fonctionnaient. J'espère que ça aide quelqu'un. La clé est que vous devez monter pour obtenir une autorisation d'écriture sur le périphérique via adb. 

0
sivi