Android使用GreenDAO无法使用SQLCipher加密数据库

9

我正在使用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;

然而,每当我使用这个会话执行任何数据库操作时,它都会出现错误。
 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'

我的Proguard规则如下:

-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");

你的项目类路径中是否有Gradle插件?classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1' - maxoumime
@maxoumime 当我添加了这行代码后,我遇到了一个重复文件的错误,就像这里提到的那样..... http://stackoverflow.com/questions/39935916/generate-duplicate-class-in-greenado-in-android 如何解决这个问题? - Prateek Ratnaker
1个回答

2

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

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

来源:数据库加密


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接