2017-02-09 12 views
9

Tôi đang sử dụng greendao ORM. Tôi đang cố gắng để mã hóa cơ sở dữ liệu của tôi bằng cách sử dụng SQLCipher. Greendao automativally hỗ trợ sqlcipher. Vì vậy, tôi đã viết mã sau để mã hóa.Android Không thể mã hóa cơ sở dữ liệu bằng cách sử dụng sqlcipher bằng cách sử dụng greendao

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

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

Tuy nhiên bất cứ khi nào tôi thực hiện bất kỳ hoạt động cơ sở dữ liệu sử dụng phiên này, nó mang lại cho một lỗi

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) 

phụ thuộc gradle My laø->

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' 

quy tắc Proguard của tôi là

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

Vậy làm thế nào để mã hóa cơ sở dữ liệu của tôi bằng cách sử dụng greendao và SQLCipher?

PS: Database db = helper.getEncryptedWritableDb("mySecretPassword"); dòng này tạo ra lỗi khi thực hiện bất kỳ thao tác cơ sở dữ liệu nào.

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

Bạn có plugin Gradle trong classpath dự án của bạn? ['classpath 'org.greenrobot: greendao-gradle-plugin: 3.2.1''] (https://github.com/greenrobot/greenDAO#add-greendao-to-your-project) – maxoumime

+0

@maxoumime khi tôi thêm thông tin này dòng, tôi đã nhận lỗi này tập tin trùng lặp như một trong những đề cập ở đây ..... http://stackoverflow.com/questions/39935916/generate-duplicate-class-in-greenado-in-android làm thế nào để giải quyết này? –

Trả lời

1

Bạn cũng cần thêm phụ thuộc cho SQLCipher. Thêm dòng này vào phụ thuộc Gradle của bạn:

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

Nguồn: Database Encryption

Các vấn đề liên quan