2017-02-09 351 views
9

我正在使用greendao ORM。我正在尝试使用SQLCipher加密我的数据库。 Greendao自动支持sqlcipher。所以我写了下面的代码进行加密。Android无法使用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"); 
+0

你在你的项目的classpath的摇篮插件? ['classpath'org.greenrobot:greendao-gradle-plugin:3.2.1''](https://github.com/greenrobot/greenDAO#add-greendao-to-your-project) – maxoumime

+0

@maxoumime当我添加这个行,我得到这个重复的文件错误,像这里提到的一个..... http://stackoverflow.com/questions/39935916/generate-duplicate-class-in-greenado-in-android如何解决这个问题? –

回答

1

您还需要添加对SQLCipher的依赖关系。该行添加到您的摇篮依赖关系:

compile 'net.zetetic:android-database-sqlcipher:[email protected]'

来源:Database Encryption

相关问题