为什么当我尝试使用adb shell打开数据库时,在根用户的Nexus One上出现“sqlite3:not found”错误?

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

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

作为替代(可能不安全,甚至是好主意),你总是可以将sqlite3二进制file upload到/system/bin这对我sqlite3

首先让mount /system/允许读/写(rw)

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

在另一个terminal更改目录(CD)到sqlite3是在哪里,并推动它

 $ 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二进制文件:

启动一个模拟器,然后从terminal

 $ adb pull /system/xbin/sqlite3 

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

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

从evelio的答案,我有问题推sqlite3文件到/系统/斌。 所以,相反,我把它推到了/ SD卡。

在这个线程中,我find了正确的解决scheme(Kila的答案): 我如何安装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 

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

要在非ROOTED设备上安装sqlite3,以下是在我的Galaxy S3,FYR上已经certificate可行的一种方法。

 $ 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,并复制此图像之前,您可能会得到一个不兼容的版本,将导致err。

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

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

在android studio中构buildARM

Android Studio – 如何用ARM代替HAXM来制作AVD?

然后,使用下面的注释来移动你的机器之间的文件,并返回到Android设备。

使adb可写

Android模拟器sdcard推送错误:只读文件系统

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

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

在根植设备nexus 4上,这个页面上的指令与这些链接起作用。 希望它可以帮助别人。 关键是你需要安装通过adb获得设备的写入权限。

Interesting Posts