您的位置:首页 > 移动开发 > Android开发

Android Sqlite相关应用实践

2016-08-27 20:12 218 查看

Android开发sqlite踩坑记录

开发应用需要用到SQlite数据库存储,基础的使用没有出现问题,但是由于习惯了真机测试,在ADB下想使用sqlite3查看创建的数据库及相关表的时候出现了问题,我的踩坑之旅也从这里开始:

进入adb shell后想查看/data/data下项目的数据库权限不够

原因是因为真机没有获取到root权限,下载kingroot获取到root权限,然后执行啊 adb shell

如果shell提示输入符号为$,则执行su,使其变为#,若一开始就是#则不必执行

使用sqlite3命令打开数据库结果显示sqlite3 not found

原因是我的测试机的rom没有带sqlite3这个可执行脚本程序,解决方法是本地下载sqlite3相关文件,然后再将其装入测试机中

下载链接:sqlite3&libcurses.so

我本来采取的装入方法是网上一种方法:

1.开始—cmd—adb shell—mkdir /mnt/sdcard/tmp,然后退出到cmd下

2.adb push D:/temp/sqlite3 /mnt/sdcard/tmp

3.cp /mnt/sdcard/tmp/sqlite3 /system/xbin/sqlite3 此时报出错误

read-only file system,说明/system是只读的,此时需要重新挂载,改为可读写,然后继续拷贝

4.mount命令为:mount -o remount,rw -t 文件系统 设备名 /system 执行完成后再次执行步骤3,则成功

5.修改权限:chmod 4755 /system/xbin/sqlite3,依赖库和sqlite操作是一样的

教程连接在这里:sqlit3 not found 解决方式

如果到这里,你的问题已解决那真是运气超级好~

但是我执行了第四步后执行第三步还是没有效果 ,一直反复的报 read-only file system的错误

于是继续百度,发现也有人和我出现了一样的问题,于是他采取了另外一种将sqlite3和其依赖文件放入测试机系统的方法

1.先利用adb push命令将sqlite3文件导入手机sdcard中随便一个文件中

2.先将/system处于挂载状态,允许读写 mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system

3.cat /mnt/sdcard/sqlite3 > /system/xbin/sqlite3 将文件复制到/system分区中

4.添加权限 chmod 4755 sqlite3

5.对libncurses.so库文件按照同样的原理执行 1 2 3 4步骤,只不过将复制导入的文件夹换成/system/lib文件夹下

cat /mnt/sdcard/libncurses.so > /system/lib/libncurses.so

教程地址:Android真机安装sqlite3

本来以为这么辛苦好歹能用了,没想到又报错了,信息是这样->error: only position independent executables (PIE) are supported

我查了一下资料,找到了原因,PIE这个安全机制从4.1引入,但是Android L之前的系统版本并不会去检验可执行文件是否基于PIE编译出的。因此不会报错。但是Android L已经开启验证,如果调用的可执行文件不是基于PIE方式编译的,则无法运行。

解决方法是在Android.mk中加入flag,但是我不太熟悉NDK开发,所以最后还是没能成功在真机上执行sqlite3

教程地址:NDK编译可执行文件在Android L中运行显示error: only position independent executables (PIE) are supported.失败问题解决办法

还好虚拟机执行没什么问题,最后的最后,我还是屈服了用了虚拟机啊哈哈哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android android开发