Android Sqlite相关应用实践

来源:互联网 发布:matlab 数据推测 编辑:程序博客网 时间:2024/05/08 17:37

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.失败问题解决办法

还好虚拟机执行没什么问题,最后的最后,我还是屈服了用了虚拟机啊哈哈哈

1 0
原创粉丝点击