码迷,mamicode.com
首页 > 移动开发 > 详细

正确使用sqlcipher for Android

时间:2019-08-15 19:09:52      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:ring   libs   byte   nta   卡顿   支持   使用   集成   常用   

 android-database-sqlcipher是基于SQLCipher的数据库加密框架,支持android4到android9,经常用来对android的SqlLite进行加密,现在支持Gradle集成,如果要支持androidx,可以使用Room框架,也可以配合原声的SQLiteOpenHelper使用。

首先在你的build.gradle中添加依赖:

implementation ‘net.zetetic:android-database-sqlcipher:4.2.0‘  
如果要兼容androidx请参考github页的配合Room框架使用的方案。

这里介绍怎么和原生API配合使用:

1、将所有android.database.sqlite.*的引入全部更改为net.sqlcipher.database.*,例如android.database.sqlite.SQLiteDatabase改为 net.sqlcipher.database.SQLiteDatabase;

2、在你的application的oncreate方法里面调用SQLiteDatabase.loadLibs();传入application的上下文作为参数;

3、在你获取数据库对象的时候,使用SQLiteDatabase.g() ,传入密码,支持String,byte[],char[] 作为密码;

这里有一个guide页作为使用简介https://www.zetetic.net/sqlcipher/sqlcipher-for-android/

 

下面说一说使用过程中可能出现的问题

  •  SQLiteDatabase mSQLiteDatabase = helper.getWritableDatabase(GlobalConst.DB_PASSWORD);  

虽然guide页是在onCreate里创建的数据库对象,但是实测执行这段代码耗时非常严重,通常情况下为0.8s-1.5s左右,不像使用原生的速度很快不会卡顿,因此建议维系一个全局的单例句柄,可以在应用启动加载页异步加载数据库对象设置为Application全局变量使用或者在每次需要获取db对象的时候都使用异步操作,如果你使用单例模式,要保证每次同时操作数据库的db对象不再同一个线程,因此全部数据操作建议都用异步操作。

  • 密码是对的但是打不开数据,如果你有使用多个类似个继承自DBHelper的对象,加密密钥是一样的也是不能操作的,要么合并这些类,要么把数据库分开

正确使用sqlcipher for Android

标签:ring   libs   byte   nta   卡顿   支持   使用   集成   常用   

原文地址:https://www.cnblogs.com/yjpjy/p/11359595.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!