Почему я получаю ошибку «sqlite3: not found» на укорененном Nexus One, когда пытаюсь открыть базу данных с помощью оболочки adb? - PullRequest
44 голосов
/ 05 сентября 2010
# sqlite3 /data/data/com.moodme.android/databases/moodme
sqlite3 /data/data/com.moodme.android/databases/moodme
sqlite3: not found

Ответы [ 6 ]

92 голосов
/ 17 февраля 2011

В качестве альтернативы (хотя это может быть небезопасно или даже не очень хорошая идея), вы всегда можете загрузить двоичный файл sqlite3 в /system/bin, это сработало для меня:

Сначала давайте смонтируем /system/, чтобы разрешить чтение / запись (rw)

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

в другом каталоге смены терминала (cd), где находится sqlite3, и давайте нажмем на него

$ ls
sqlite3
$ adb push sqlite3 /sdcard/

Теперь вернемся к другой оболочке, позволяющей копировать и изменять разрешения двоичного файла

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

Теперь давайте смонтируем обратно /system/ только для чтения (ro)

# mount -o remount,ro /system

И теперь мы можем использовать sqlite3 из оболочки:

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

Примечание : Я использую двоичный файл sqlite3, который поставляется с "SuperOneClickv1.6.5-ShortFuse"

Вы всегда можете извлечь sqlite3 двоичный файл из эмулятора:

Запустите эмулятор, а затем из терминала

$ adb pull /system/xbin/sqlite3

Если вы ленивый как я, вы можете скачать один прямо здесь для ICS или до или для Jelly Bean и позже здесь

Убедитесь, что вы используете правильный вариант для вашей версии Android, так как вы можете получить eloc_library[1306]: 14446 cannot locate 'sqlite3_enable_load_extension'... или похожие ошибки при выполнении

21 голосов
/ 05 сентября 2010

В эмуляторе Android sqlite3 находится в /system/xbin. На Nexus One (Android 2.2) нет /system/xbin. Следовательно, я подозреваю, что sqlite3 не установлен на Nexus One.

12 голосов
/ 08 декабря 2011

Из ответа evelio у меня возникла проблема с отправкой файла sqlite3 в / system / bin.Итак, вместо этого я поместил его в /sdcard.

В этой теме я нашел правильное решение (ответ Килы): Как я могу установить sqlite3 на Rox NexusOne запускается 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 

Работает на моем Samsung Galaxy S II с 2.3.3.

3 голосов
/ 26 марта 2014

Чтобы установить sqlite3 на устройства без ROOTED, вот способ, который доказал свою работоспособность на моем 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>
2 голосов
/ 24 октября 2013

На Nexus 4 выполните следующие действия:

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

Обратите внимание, что папка / system / xbin и chmod - 777

0 голосов
/ 21 февраля 2016

Еще немного информации, которая может помочь кому-то об этой проблеме

Для тех, кому интересно, где взять рабочий двоичный файл sqilte3 для копирования:

Вы можете использоватьэмулятор для получения рабочего бинарника.Прежде чем проверять, основана ли ваша сборка на _86, _64 или ARM , нужно скопировать этот образ, иначе вы можете получить несовместимую версию, которая приведет к ошибке.

Проверка, какая версия вашего устройства Android

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

Сборка ARM в андроид студии

Android Studio - Как я могу сделать AVD с ARM вместо HAXM?


Затем используйте приведенные ниже примечания для перемещения файлов между устройством и обратно на устройство Android.

Обеспечение возможности записи в adb

Ошибка отправки sdcard в эмулятор Android: только для чтения,

Копирование файловadb на локальное устройство устройства

Как скопировать выбранные файлы с Android с помощью adb pull

На подключенном устройстве nexus 4 эти ссылки приведены в инструкции на этой странице.работал.Надеюсь, это кому-нибудь поможет.Ключ вам нужно смонтировать, чтобы получить разрешение на запись в устройстве через adb.

...