使用经历如下
由于项目中需要用到加密数据库,使用特意用了github的经典项目 sqlcipher, 使用起来也很简单,和原生的数据库没有差异,甚至连类名都一样,只是包路径需要替换为Sqlcipher的相应路径。还有获取数据库的方式需要加上密码,如 SQLiteOpenHelper.getWritableDatabase(“secret”)。一开始接入也没有想太多,就直接用了。没想到,后来bugly发现了一些bug的描述,是关于这个加密数据库,大致错误描述如下:file is not a database: , while compiling: select count(*) from sqlite_master。当然首先会去百度进行搜索,也去github项目的issue,得到的答案就是说加解密数据库使用的密码不一样,导致解密失败,不是数据库的格式,所以抛异常。
解决问题的过程
- 一开始抱着这种思路去解决问题,因为本身自己在使用加密数据库的时候,密码是字符串加上Build.BOARD组成,所以猜测是Build.BOARD变化了,导致密码不同而导致。碰巧的是,刚刚好有一个用户遇上这个问题,所以立马打了一个包给他,满心以为会正常,因为这一次密码是固定的字符串,没想到还是报错。他的手机是坚果R1。
在bugly上面