46
# sqlite3 /data/data/com.moodme.android/databases/moodme
sqlite3 /data/data/com.moodme.android/databases/moodme
sqlite3: not found
4

6 回答 6

93

作为替代方案(尽管可能不安全甚至是好主意),您始终可以将sqlite3二进制文件上传到/system/bin这对我有用:

首先让我们挂载/system/以允许读/写(rw)

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

在另一个终端更改目录(cd)到 wheresqlite3并让我们推送它

$ ls
sqlite3
$ adb push sqlite3 /sdcard/

现在回到另一个 shell,让我们复制和更改二进制文件的权限

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

现在让我们/system/以只读方式挂载 (ro)

# mount -o remount,ro /system

现在我们可以在 shell 中使用 sqlite3 了:

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

注意我使用的是“SuperOneClickv1.6.5-ShortFuse”附带的 sqlite3 二进制文件

您始终可以sqlite3从模拟器中提取二进制文件:

启动模拟器,然后从终端

$ adb pull /system/xbin/sqlite3

如果你像我一样懒惰,你可以在这里下载一个 ICS 或之前Jelly Bean 和稍后在这里

确保为您的 Android 版本使用正确的版本,因为您可能会eloc_library[1306]: 14446 cannot locate 'sqlite3_enable_load_extension'...在执行时遇到类似错误

于 2011-02-16T21:31:05.477 回答
21

在 Android 模拟器上,sqlite3位于/system/xbin. Nexus One (Android 2.2) 上没有/system/xbin。因此,我怀疑sqlite3Nexus One 上没有安装它。

于 2010-09-05T10:53:39.040 回答
12

从 evelio 的回答来看,我在将 sqlite3 文件推送到 /system/bin 时遇到了问题。因此,相反,我将其推送到 /sdcard。

在这个线程中,我找到了正确的解决方案(Kila 的答案): 如何在有根的 NexusOne 上安装 sqlite3 运行 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 

它适用于我的三星 Galaxy S II 2.3.3。

于 2011-12-08T14:12:08.623 回答
5

要在非根设备上安装 sqlite3,这是一种已被证明适用于我的 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>
于 2014-03-26T01:53:16.817 回答
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

于 2013-10-24T17:39:48.187 回答
0

更多信息可能会帮助某人解决此问题

对于想知道在哪里获得工作的 sqilte3 文件二进制文件以进行复制的人:

您可以使用模拟器获取工作二进制文件。您必须先检查您的构建是否基于_86、_64 或 ARM并复制此映像,否则您可能会得到一个不兼容的版本,这将导致错误。

检查哪个版本是您的 android 设备

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

在 android studio 中构建 ARM

Android Studio - 如何使用 ARM 而不是 HAXM 制作 AVD?


然后,使用下面的说明在您的机器之间移动文件并返回到 android 设备。

使 adb 可写

Android Emulator sdcard推送错误:只读文件系统

将文件从 adb 复制到本地设备机器

如何使用 adb pull 从 Android 复制选定的文件

在有根设备 nexus 4 上,这些链接与此页面上的说明有效。希望它可以帮助某人。关键是您需要挂载才能通过 adb 在设备中获得写入权限。

于 2016-02-21T08:42:55.990 回答