From 9248b6cfdfe7e55d5fc51ff957b6d0fc53b1ee5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=9C=E5=9D=82=E9=9B=85?= <23130178+ShadowRZ@users.noreply.github.com> Date: Mon, 23 Jun 2025 15:29:44 +0800 Subject: [PATCH] refactor: Migrate SQLCipher Android to new API (#4874) Co-authored-by: Benoit Marty --- gradle/libs.versions.toml | 2 +- libraries/encrypted-db/consumer-proguard-rules.pro | 4 ---- .../io/element/encrypteddb/SqlCipherDriverFactory.kt | 7 ++++--- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f564cd3adb..f3eb9364d8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -178,7 +178,7 @@ matrix_richtexteditor_compose = { module = "io.element.android:wysiwyg-compose", sqldelight-driver-android = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" } sqldelight-driver-jvm = { module = "app.cash.sqldelight:sqlite-driver", version.ref = "sqldelight" } sqldelight-coroutines = { module = "app.cash.sqldelight:coroutines-extensions", version.ref = "sqldelight" } -sqlcipher = "net.zetetic:android-database-sqlcipher:4.5.4" +sqlcipher = "net.zetetic:sqlcipher-android:4.9.0" sqlite = "androidx.sqlite:sqlite-ktx:2.5.2" unifiedpush = "org.unifiedpush.android:connector:3.0.10" otaliastudios_transcoder = "com.otaliastudios:transcoder:0.11.2" diff --git a/libraries/encrypted-db/consumer-proguard-rules.pro b/libraries/encrypted-db/consumer-proguard-rules.pro index 5d01f21e9b..f1b424510d 100644 --- a/libraries/encrypted-db/consumer-proguard-rules.pro +++ b/libraries/encrypted-db/consumer-proguard-rules.pro @@ -19,7 +19,3 @@ # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile - -# Prevent ProGuard from renaming internal SQLCipher classes, which breaks the library. -# From https://github.com/sqlcipher/android-database-sqlcipher#proguard --keep class net.sqlcipher.** { *; } diff --git a/libraries/encrypted-db/src/main/kotlin/io/element/encrypteddb/SqlCipherDriverFactory.kt b/libraries/encrypted-db/src/main/kotlin/io/element/encrypteddb/SqlCipherDriverFactory.kt index c1c2c6eb2a..172e4b5285 100644 --- a/libraries/encrypted-db/src/main/kotlin/io/element/encrypteddb/SqlCipherDriverFactory.kt +++ b/libraries/encrypted-db/src/main/kotlin/io/element/encrypteddb/SqlCipherDriverFactory.kt @@ -13,10 +13,10 @@ import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.db.SqlSchema import app.cash.sqldelight.driver.android.AndroidSqliteDriver import io.element.encrypteddb.passphrase.PassphraseProvider -import net.sqlcipher.database.SupportFactory +import net.zetetic.database.sqlcipher.SupportOpenHelperFactory /** - * Creates an encrypted version of the [SqlDriver] using SQLCipher's [SupportFactory]. + * Creates an encrypted version of the [SqlDriver] using SQLCipher's [SupportOpenHelperFactory]. * @param passphraseProvider Provides the passphrase needed to use the SQLite database with SQLCipher. */ class SqlCipherDriverFactory( @@ -29,8 +29,9 @@ class SqlCipherDriverFactory( * @param context Android [Context], used to instantiate the driver. */ fun create(schema: SqlSchema>, name: String, context: Context): SqlDriver { + System.loadLibrary("sqlcipher") val passphrase = passphraseProvider.getPassphrase() - val factory = SupportFactory(passphrase) + val factory = SupportOpenHelperFactory(passphrase) return AndroidSqliteDriver(schema = schema, context = context, name = name, factory = factory) } }