用到android自带数据库sqlite时,发现使用不了sqlite3命令。
这是因为手机系统\system\xbin缺少sqlite3文件,下载一个sqlite3文件放入该目录即可。
具体操作如下。
1.在cmd模式下将sqlite3文件从电脑放入手机。
adb push E:\sqlite3 /mnt/sdcard/tmp
2.然后执行 adb shell 进入adb,再su获取root权限($表示非root用户,#表示root用户)。
否则会出现Permission denied错误提示。
再将sqlite3复制到/system/xbin中
root@android:/ # cat /mnt/sdcard/tmp/sqlite3 > /system/xbin/sqlite3
3.此时如果遇到read-only file system错误,则表示system只能读取,要改变文件权限。
首先执行mount,得到设备名称
root@android:/ # mount
mount
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
<span style="color:#FF0000;">/dev/block/mmcblk0p9</span> /system ext4 rw,relatime,barrier=1,data
=ordered 0 0
/dev/block/mmcblk0p3 /efs ext4 rw,nosuid,nodev,noatime,barri
er=1,journal_async_commit,data=ordered 0 0
/dev/block/mmcblk0p8 /cache ext4 rw,nosuid,nodev,noatime,bar
rier=1,journal_async_commit,data=ordered 0 0
/dev/block/mmcblk0p12 /data ext4 rw,nosuid,nodev,noatime,bar
rier=1,journal_async_commit,data=ordered,noauto_da_alloc,dis
card 0 0
/sys/kernel/debug /sys/kernel/debug debugfs rw,relatime 0 0
/dev/fuse /storage/sdcard0 fuse rw,nosuid,nodev,noexec,relat
ime,user_id=1023,group_id=1023,default_permissions,allow_oth
er 0 0
改变目录权限
root@android:/ # mount -o remount,rw -t rfs /dev/block/mmcblk0p9 /system
再将权限改回
root@android:/ # chmod 4755 /system/xbin/sqlite3
4.此时执行sqlite3命令,有可能出现libncurses.so not found,找到从虚拟机找到libncurses.so文件放入/system/lib目录下即可。
5.若执行sqlite3还是不能成功,且错误为
root@android:/ # sqlite3
sqlite3
reloc_library[1307]: 22062 cannot locate 'sqlite3_enable_load_extension'...
CANNOT LINK EXECUTABLE
是因为sqlite3的版本太低,从高一点api的虚拟机中拷贝出sqlite3,再重复上面操作。
6.执行sqlite3命令。
root@android:/ # sqlite3
sqlite3
SQLite version 3.7.11 2012-03-20 11:35:50
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
done.