SQLCipher

As of 3.0.0-beta2+, DBFlow now supports SQLCipher fairly easily.

To add the library add the library to your build.gradle with same version you are using with the rest of the library.

dependencies {
  implementation "com.dbflow5:sqlcipher:${version}"
  implementation "net.zetetic:android-database-sqlcipher:${sqlcipher_version}"
}

You also need to add the Proguard rule:

-keep class net.sqlcipher.** { *; }
-dontwarn net.sqlcipher.**

Next, you need to subclass the provided SQLCipherOpenHelper (taken from test files):

class SQLCipherOpenHelperImpl(context: Context,
                              databaseDefinition: DBFlowDatabase,
                              callback: DatabaseCallback?)
    : SQLCipherOpenHelper(context, databaseDefinition, callback) {
    override val cipherSecret get() = "dbflow-rules"
}

Note: that the constructor with DatabaseDefinition and DatabaseHelperListener is required.

Then in your application class when initializing DBFlow:

FlowManager.init(FlowConfig.Builder(context)
  .database(
      DatabaseConfig.Builder(CipherDatabase::class) { db, callback -> SQLCipherHelperImpl(context, databaseDefinition, callback))
      .build())
  .build())

And that's it. You're all set to start using SQLCipher!

Last updated