Android无法使用greendao使用sqlcipher加密数据库

标签 android greendao sqlcipher sqlcipher-android greendao3

我正在使用 greendao ORM。我正在尝试使用 SQLCipher 加密我的数据库。 Greendao 自动支持 sqlcipher。所以我写了下面的代码进行加密。

 DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "encrypted-db",null);

        Database db = helper.getEncryptedWritableDb("mySecretPassword");
        DaoSession session = new DaoMaster(db).newSession();
        return session;

但是每当我使用这个 session 执行任何数据库操作时,它都会报错

 Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/greenrobot/greendao/database/DatabaseOpenHelper$EncryptedHelper;
                                                                       at org.greenrobot.greendao.database.DatabaseOpenHelper.checkEncryptedHelper(DatabaseOpenHelper.java:121)
                                                                       at org.greenrobot.greendao.database.DatabaseOpenHelper.getEncryptedWritableDb(DatabaseOpenHelper.java:133)

我的gradle依赖是->

compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.2.0'
    compile 'org.greenrobot:greendao:3.2.0'
    compile 'com.google.code.gson:gson:2.8.0'

我的混淆规则是

-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
public static java.lang.String TABLENAME;
}
-keep class **$Properties
# If you do not use Rx:
-dontwarn rx.**

那么如何使用 greendao 和 SQLCipher 加密我的数据库呢?

PS: Database db = helper.getEncryptedWritableDb("mySecretPassword"); 此行会在执行任何数据库操作时产生错误。

 Database db = helper.getEncryptedWritableDb("mySecretPassword");

最佳答案

您还需要添加对SQLCipher 的依赖。将此行添加到您的 Gradle 依赖项中:

编译'net.zetetic:android-database-sqlcipher:3.5.4@aar'

来源:Database Encryption

关于Android无法使用greendao使用sqlcipher加密数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42127768/

相关文章:

ios - iOS中使用SqlCipher存储数据时可以使用CoreData来管理离线数据吗

java - 自动刷新抽屉导航标题

android - 初始化 bool 值 "no such instance field"

android - 如何处理在 URL 中使用无效字符获取结果的 xml 解析

android - 使用 greendao 3 从 2 个不同实体获取值

php - 从PHP中的Sqlcipher加密数据库中选择行

android - 如何浏览 Android C++ 源代码

android - GreenDao Generator 类在生成模型和 Dao 类时出错。

android - 与 greenDAO 不兼容的 JUnit 测试

android - 恢复应用程序后打开数据库时出现 net.sqlcipher.database.SQLiteException