Почему я получаю ошибку «sqlite3: not found» на укорененном Nexus One, когда пытаюсь открыть базу данных с помощью оболочки adb?

41
# sqlite3 /data/data/com.moodme.android/databases/moodme
sqlite3 /data/data/com.moodme.android/databases/moodme
sqlite3: not found
Теги:
adb
rooted-device

6 ответов

20
Лучший ответ

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

  • 1
    Если вы устанавливаете cyanogenmod, то в оболочке работает sqlite3.
  • 0
    Но не нужно ли устройству создавать и читать базы данных sqlite3? Кроме того, если это не на Nexus One, есть ли способ получить его там?
Показать ещё 6 комментариев
92

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

Сначала установите mount /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'... или подобные ошибки при выполнении

  • 0
    Подскажите, пожалуйста, где я могу найти sqlite3 для NexusOne на Gingerbread? Спасибо.
  • 0
    Это было действительно отличное решение - спасибо!
Показать ещё 6 комментариев
12

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

В этой теме я нашел правильное решение (ответ Килы): Как установить sqlite3 на внедренные NexusOne работает пряничный файл

$ 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.

  • 1
    Работает на рутированном Nexus-S под управлением Android ICS 4.0.4 с использованием двоичного файла sqlite3 от SuperOneClick ( shortfuse.org/?page_id=2 / download.cnet.com/SuperOneClick/3000-2094_4-75447027.html )
  • 0
    Спасибо! (работает на LG P500, Android 2.3.3)
Показать ещё 3 комментария
3

Чтобы установить sqlite3 на устройствах NON-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>
  • 0
    Я получил разрешение отказано
  • 3
    Также пытаюсь заставить это работать на некорневом 4.4 устройстве. Ваши шаги почти работают, за исключением того, что после использования run-as учетная запись пользователя приложения больше не имеет разрешения на / mnt / sdcard (используется для работы в более старых версиях Android; должно быть недавнее изменение). Я обошел эту часть, поместив двоичный файл sqlite3 в папку ресурсов приложения, а затем извлекая его в папку баз данных при первом запуске приложения.
Показать ещё 4 комментария
2

В 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
    Это работает на моем nexus 4 с kitkat, бинарный файл sqlite3, полученный из папки emulator / system / xbin
0

Дополнительная информация, которая может помочь кому-то в этом вопросе

Для людей, которые задаются вопросом, где можно скопировать рабочий файл 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

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


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

Выполнение записи в adb

Android-эмулятор sdcard push error: файловая система только для чтения

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню