web-dev-qa-db-ger.com

Warum erhalte ich die Fehlermeldung "sqlite3: not found" auf einem verwurzelten Nexus One, wenn ich versuche, eine Datenbank mit der Adb-Shell zu öffnen?

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

Im Android-Emulator befindet sich sqlite3 in /system/xbin. Es gibt keinen /system/xbin auf einem Nexus One (Android 2.2). Daher vermute ich, dass sqlite3 nicht auf dem Nexus One installiert ist.

21
CommonsWare

Als Alternative (möglicherweise nicht sicher oder sogar eine gute Idee) können Sie die sqlite3-Binärdatei immer in /system/bin hochladen. Dies hat für mich funktioniert:

Zuerst lässt sich /system/ einbinden, um Lesen/Schreiben (rw) zu ermöglichen.

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

wechseln Sie in einem anderen Terminal in das Verzeichnis (cd), in das sich sqlite3 befindet, und drücken Sie Push

$ ls
sqlite3
$ adb Push sqlite3 /sdcard/

Zurück zur anderen Shell können nun die Berechtigungen der Binärdatei kopiert und geändert werden

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

Jetzt kann /system/ als schreibgeschützt (ro) wieder eingebunden werden

# mount -o remount,ro /system

Und jetzt können wir sqlite3 von Shell verwenden:

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

HinweisIch verwende die sqlite3-Binärdatei, die mit "SuperOneClickv1.6.5-ShortFuse" geliefert wird.

Sie können sqlite3 binary immer vom Emulator abrufen:

Starten Sie einen Emulator und dann von einem Terminal aus

$ adb pull /system/xbin/sqlite3

Wenn Sie faul sind wie ich, können Sie hier direkt für ICS oder vor oder für Jelly Bean und später hier herunterladen

Stellen Sie sicher, dass Sie die richtige Version für Ihre Android-Version verwenden, da bei der Ausführung möglicherweise eloc_library[1306]: 14446 cannot locate 'sqlite3_enable_load_extension'...- oder ähnliche Fehler auftreten

92
eveliotc

Nach der Antwort von evelio hatte ich ein Problem, die sqlite3-Datei nach/system/bin zu verschieben. Ich habe es stattdessen auf die/sdcard geschoben.

In diesem Thread fand ich die richtige Lösung (Antwort von Kila): Wie installiere ich sqlite3 auf gerooteten NexusOne-Runs Lebkuchen

$ 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 

Es funktioniert auf meinem Samsung Galaxy S II mit 2.3.3.

12
jiahao

Um sqlite3 auf NICHT-ROOTED-Geräten zu installieren, haben Sie eine bewährte Methode für mein Galaxy S3, FYR, gefunden.

$ 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

Gehen Sie auf dem Nexus 4 wie folgt vor:

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

Beachten Sie, dass der Ordner/system/xbin und der chmod 777 ist

2
vinzzz

Weitere Informationen, die jemandem bei diesem Problem helfen können

Für die Leute, die sich fragen, wo man eine funktionierende binäre sqilte3-Datei zum Kopieren bekommt: 

Sie können den Emulator verwenden, um eine funktionierende Binärdatei zu erhalten. Sie müssen prüfen, ob Ihr Build auf _86, _64 oder ARM basiert und dieses Image replizieren. Andernfalls erhalten Sie möglicherweise eine inkompatible Version, die zu einem Fehler führt. 

Überprüfen, welche Version Ihr Android-Gerät ist

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

Gebäude ARM in Android Studio

Android Studio - Wie kann ich eine AVD mit ARM anstelle von HAXM erstellen?


.__ Verwenden Sie die nachstehenden Hinweise, um Dateien zwischen Ihrem Computer und dem Android-Gerät zu verschieben.

Adb schreibbar machen 

Android Emulator SD-Karte Push-Fehler: Schreibgeschütztes Dateisystem

Kopieren von Dateien von adb auf lokale Gerätemaschine

Wie kopiere ich ausgewählte Dateien von Android mit adb pull

Auf einem gerooteten Endgerät 4 funktionierten diese Links mit der Anleitung auf dieser Seite. Hoffe es hilft jemandem. Der Schlüssel ist, dass Sie mounten müssen, um über adb eine Schreibberechtigung im Gerät zu erhalten. 

0
sivi