GreenDAO не может получить доступ к существующей базе данных после обновления sqlcipher с 3.5.4 до 4.2.0 - PullRequest
0 голосов
/ 17 июня 2019

Я использую GreenDAO с SQLCipher. После обновления SQLCipher с 3.5.4 до 4.2.0 мое приложение не может получить доступ к старой зашифрованной базе данных. Я уже искал решение и обнаружил, что мне нужно запустить PRAGMA cipher_migrate в postKey из SQLiteDatabaseHook для переноса моей базы данных. Я попробовал следующее, но это не помогло:

SQLiteDatabaseHook hook = new SQLiteDatabaseHook() {
@Override
public void preKey(net.sqlcipher.database.SQLiteDatabase database) {}
@Override
public void postKey(net.sqlcipher.database.SQLiteDatabase database) {
                SQLiteDatabase.loadLibs(context);
                database.execSQL("PRAGMA key = '" + key + "';");
                database.execSQL("PRAGMA cipher_migrate;");
            }
        };
try {
            logger.d(TAG, "before openOrCreateDatabase");
            SQLiteDatabase sqLiteDatabase = net.sqlcipher.database.SQLiteDatabase.openOrCreateDatabase("DB.db", password, null, hook);
            logger.d(TAG, "before EncryptedDatabase");
            db = new EncryptedDatabase(sqLiteDatabase);
            logger.d(TAG, "DB session is encrypted");
            return new DaoMaster(db).newSession();
} catch (Exception e) {

Я получаю эту ошибку:

No implementation found for void net.sqlcipher.database.SQLiteDatabase.dbopen(java.lang.String, int) (tried Java_net_sqlcipher_database_SQLiteDatabase_dbopen and Java_net_sqlcipher_database_SQLiteDatabase_dbopen__Ljava_lang_String_2I)
Could not dispatch event: class com.*.LoginResponse to subscribing class class com..LoginViewModel
java.lang.UnsatisfiedLinkError: No implementation found for void net.sqlcipher.database.SQLiteDatabase.dbopen(java.lang.String, int) (tried Java_net_sqlcipher_database_SQLiteDatabase_dbopen and Java_net_sqlcipher_database_SQLiteDatabase_dbopen__Ljava_lang_String_2I)
at net.sqlcipher.database.SQLiteDatabase.dbopen(Native Method)
at net.sqlcipher.database.SQLiteDatabase.openDatabaseInternal(SQLiteDatabase.java:3)
at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:10)
at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:7)
at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:5)
at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:3)
at net.sqlcipher.database.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:3)
at com.elt.passsystem.infrastructure.di.modules.GreenDAOModule.provideDAO(GreenDAOModule.java:8)
at com.elt.passsystem.infrastructure.di.modules.GreenDAOModule_ProvideDAOFactory.get(GreenDAOModule_ProvideDAOFactory.java:3)
at com.elt.passsystem.infrastructure.di.modules.GreenDAOModule_ProvideDAOFactory.get(GreenDAOModule_ProvideDAOFactory.java:1)
...