美文网首页
从SQLCipher到WCDB

从SQLCipher到WCDB

作者: gdutkyle | 来源:发表于2018-04-02 22:47 被阅读259次

    为什么要使用WCDB替换已有的SQLCipher?

    WCDB实际上是基于SQLCipher上设计的,当初我们项目接入wcdb的第一个初衷是,想要看看我们的apk能不能小点,后来发现其实不会。因为wcdb最基本的就是sqlcipher,所以,如果只使用基本的功能,那么是不会对基本sql大小有影响的。但是,如果我们需要使用到数据库分词icu(wcdb对应mmicu),那么确实是可以把我们的apk缩小大概10m左右,这个我们后面再讲。第二个初衷是,wcdb提供了比较强大的数据库备份和恢复的功能,我们的项目在给用户使用的时候,还是存在数据库损坏的情况。所以,鉴于这两点,我们将原来的sqlcipher,替换成了wcdb。

    wcdb的接入

    基于sqlcipher的wcdb,在接入到我们的项目中出乎意料的简单。我们接下来看下具体的步奏

    第一步:引入依赖

    在app的build.gradle中,添加

    dependencies {  
    compile 'com.tencent.wcdb:wcdb-android:1.0.0'
    }
    

    第二步:选择需要使用的架构

    我们工程使用的是armeabi-v7a,如果有需要,可以自由选择当前工程的实际需要

    android {
        defaultConfig {
            ndk {
            abiFilters 'armeabi-v7a'
            }
        }
    }  
    

    第三步:开始替换

    替换其实很简答,只要把工程中android.database.* 改为 com.tencent.wcdb.*android.database.sqlite.* 改为 com.tencent.wcdb.database.*

    第四步:开始数据库的迁移

    private PersonalDatabase() {
            String passphrase = getDBKey();//生成加密数据库的key
            String dbPath = ECContextParameter.getDbPath() + DB_NAME;//db所在的path
            SQLiteCipherSpec cipher = new SQLiteCipherSpec()  // 加密描述对象
                    .setPageSize(1024)        // SQLCipher 默认 Page size 为 1024
                    .setSQLCipherVersion(3);  // 1,2,3 分别对应 1.x, 2.x, 3.x 创建的 SQLCipher 数据库,当前版本用的是3.X版本
    
            SQLiteOpenHelper helper = new PersonalDatabaseOpenHelper(getContext(), dbPath, DB_VERSION, passphrase, cipher);
            encryptedDB = helper.getWritableDatabase();
    }  
    

    迁移的步奏在上面有详细的代码,这里不做赘述。

    相关文章

      网友评论

          本文标题:从SQLCipher到WCDB

          本文链接:https://www.haomeiwen.com/subject/stsfhftx.html