greenrobot / greenDAO

greenDAO is a light & fast ORM solution for Android that maps objects to SQLite databases.
http://greenrobot.org/greendao/
12.63k stars 2.89k forks source link

Fatal Exception after calling getEncryptedWritableDb(password) #1046

Closed NaserKhoshfetrat closed 2 months ago

NaserKhoshfetrat commented 4 years ago

in Samsung android 10 i'm getting error immediately after tapping on lunches icon, my project config is as this: project level gradle:

  dependencies {
        classpath 'com.android.tools.build:gradle:4.0.0'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'
    }

app level gradle:

apply plugin: 'org.greenrobot.greendao'
greendao {
    schemaVersion 1
    daoPackage "com.main.apps.dodosx.models.Dao"
    targetGenDir "src/main/java"
//    generateTests true
//    targetGenDirTests "src/androidTest/java"
}

dependencies:{

    implementation 'org.greenrobot:greendao:3.3.0'
    implementation 'net.zetetic:android-database-sqlcipher:3.5.7'
}

Appcontroller . onCreate()

private static DaoSession daoSession;

private void setUpTheDatabase() { DaoMaster.OpenHelper helper = new MyOpenHelper(getApplicationContext(), getString(R.string.dbTitle));

    Database db = helper.getEncryptedWritableDb(getString(R.string.db_access_key));

// Database db = helper.getWritableDb(); daoSession = new DaoMaster(db).newSession();

}

private static void DbClearContent() {
    daoSession.clear();
}

MyOpenHelper.java


import org.greenrobot.greendao.database.Database;

public class MyOpenHelper extends DaoMaster.OpenHelper {
    public MyOpenHelper(Context context, String name) {
        super(context, name);
    }

    public MyOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
        super(context, name, factory);
    }

    @Override
    public void onCreate(Database db) {
        super.onCreate(db);
    }

    @Override
    public void onUpgrade(Database db, int oldVersion, int newVersion) {
        Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
        AgentMessageDao.dropTable(db, true);
        onCreate(db);
    }
}

app progurd file


-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
public static java.lang.String TABLENAME;
}
-keep class **$Properties { *; }

-keep class org.greenrobot.greendao.database.SqlCipherEncryptedHelper { *; }
-keep,includedescriptorclasses class net.sqlcipher.** { *; }
-keep,includedescriptorclasses interface net.sqlcipher.** { *; }

# If you do not use Rx:
-dontwarn rx.**

and the error im getting is


Fatal Exception: java.lang.RuntimeException
Unable to create application com.main.apps.dodosx.app.AppController: net.sqlcipher.database.SQLiteException: file is encrypted or is not a database: , while compiling: select count(*) from sqlite_master;

Caused by net.sqlcipher.database.SQLiteException
file is encrypted or is not a database: , while compiling: select count(*) from sqlite_master;
net.sqlcipher.database.SQLiteCompiledSql.native_compile

net.sqlcipher.database.SQLiteCompiledSql.native_compile (SQLiteCompiledSql.java)
net.sqlcipher.database.SQLiteCompiledSql.compile (SQLiteCompiledSql.java:91)
net.sqlcipher.database.SQLiteCompiledSql.<init> (SQLiteCompiledSql.java:64)
net.sqlcipher.database.SQLiteProgram.<init> (SQLiteProgram.java:89)
net.sqlcipher.database.SQLiteQuery.<init> (SQLiteQuery.java:48)
net.sqlcipher.database.SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver.java:60)
net.sqlcipher.database.SQLiteDatabase.rawQueryWithFactory (SQLiteDatabase.java:1867)
net.sqlcipher.database.SQLiteDatabase.rawQuery (SQLiteDatabase.java:1785)
net.sqlcipher.database.SQLiteDatabase.keyDatabase (SQLiteDatabase.java:2486)
net.sqlcipher.database.SQLiteDatabase.openDatabaseInternal (SQLiteDatabase.java:2415)
net.sqlcipher.database.SQLiteDatabase.openDatabase (SQLiteDatabase.java:1149)
net.sqlcipher.database.SQLiteDatabase.openOrCreateDatabase (SQLiteDatabase.java:1212)
net.sqlcipher.database.SQLiteOpenHelper.getWritableDatabase (SQLiteOpenHelper.java:162)
net.sqlcipher.database.SQLiteOpenHelper.getWritableDatabase (SQLiteOpenHelper.java:129)
org.greenrobot.greendao.database.SqlCipherEncryptedHelper.getEncryptedWritableDb (SqlCipherEncryptedHelper.java:51)
org.greenrobot.greendao.database.DatabaseOpenHelper.getEncryptedWritableDb (DatabaseOpenHelper.java:175
NaserKhoshfetrat commented 4 years ago

after many hours of trying i found the solution and all i need to do was update sqlcipher to'net.zetetic:android-database-sqlcipher:4.4.0'

please update the example and document, it has used an older version

justindemo commented 2 months ago

But when I update to net.zetetic:android-database-sqlcipher:4.4.0', a DaoException will appear. When checkingEncryptedHelper, what operations need to be done when updating to 4+?

greenrobot-team commented 2 months ago

@justindemo answered in #1116

As this issue has not received any responses in a while closing it.