#経緯
こちらにもありますが、個人情報を扱う場合、データベースの暗号化の必要がありそうだったため、Roomは暗号化できるのか調べたところSQLCipherというライブラリが目に留まりました。
#参考
AndroidにSQLCipherを導入してみる
Protect your Room database with SQLCipher on Android | by ...
#SQLCipherライブラリの導入
こちらを参考に、build.gradle(app)に追加します。
build.gradle(app)
dependencies {
implementation "net.zetetic:android-database-sqlcipher:4.4.2"
implementation "androidx.sqlite:sqlite:2.1.0"
}
データベースを操作する部分
UserDatabase.kt
package com.example.sample
import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import net.sqlcipher.database.SQLiteDatabase
import net.sqlcipher.database.SupportFactory
@Database(entities = [User::class], version = 2, exportSchema = false )
abstract class UserDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
companion object{
fun buildDatabase(context: Context): UserDatabase{
return Room.databaseBuilder(
context,
UserDatabase::class.java,
"user.db"
).openHelperFactory(SupportFactory(SQLiteDatabase.getBytes("test123".toCharArray())))
.allowMainThreadQueries()
.build()
}
}
}
#ビルドした際のDBファイルの場所
公式のドキュメントにある通り、
DeviceFileExplorerにて/data/data/app_name/databases内にDBファイルが作成される
(私の場合は/data/data/com.example.rworksample00026/databasesでした)
作成されたファイルをデスクトップとかにダウンロードします。
#データベースの中身の確認
DB Browser for sqliteにてSQLcipher側を起動してパスワードを入力すると中身が確認できます。(中身のデータがあればデータも確認できます。)