Почему я получаю ошибку "sqlite3: not found" на укорененном Nexus One, когда пытаюсь открыть базу данных с помощью оболочки adb?
# sqlite3 /data/data/com.moodme.android/databases/moodme
sqlite3 /data/data/com.moodme.android/databases/moodme
sqlite3: not found
6 ответов
В эмуляторе Android sqlite3
в /system/xbin
, Здесь нет /system/xbin
на Nexus One (Android 2.2). Следовательно, я подозреваю, что sqlite3
не установлен на Nexus One.
В качестве альтернативы (хотя это может быть небезопасно или даже не очень хорошая идея), вы всегда можете загрузить 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/
только для чтения (ро)
# 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'...
или похожие ошибки при выполнении
Судя по ответу 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.
Чтобы установить 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>
На 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
Еще немного информации, которая может помочь кому-то об этой проблеме
Для тех, кто интересуется, где взять рабочий бинарный файл 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.