安卓打包时加入数据库
真能感受到安卓高版本的权限更严格
Sqlite下载页:sqlite.org
developer开发文档:developer
参考自:
csdn、博客园、Android获取程序路径
Sqlite不需要一个单独的服务器进程或操作的系统,正是因为他的轻量级,使得他成为移动设备上最佳的数据库。
数据量少的时候可以直接写在初始化函数中,而这些天自己写的小软件,需要在安装好的时候就内置一个数据库。以往在Web项目中多数使用navicat新建数据库,然后使用数据库连接池连上即可使用,部署到服务器上时也可以把这个数据库文件放上去。但是安卓不是这么一回事,每个软件有自己独立的数据库,存在/data/data/<package name>/databases/
之中
常见的方法是把res/raw目录或者asset目录下的数据库文件复制到数据库目录中,因为两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。输入流读取文件,再输出到文件,照理说很容易才对,但偏偏提示Permission denied
,做了申请读写权限,关闭SELinux等操作还是没有效心想着路径是肯定没写错的,但还是试试吧,于是把手动填写的路径改成了getApplicationContext的方式获取路径
String DB_NAME = "love_letter.db";//数据库名称
String DB_FILE = getApplicationContext().getDatabasePath(DB_NAME).getAbsolutePath();
这个路径出来的是data/user/0/<package name>/love_letter.db
发现这个目录下的数据库跟data/data目录下的是同一个文件,且也成功地把数据库复制了过去这下也终于明白,或许我没权限修改data/data里面的东西,但可以通过user目录下修改,
补充:新建数据库时建议在安卓app中用SQLiteOpenHelper生成一个默认的,复制出来再在Sqlite expert添加数据因为安卓中的数据库需要有一个android_metadate表,不然会报错
留言