SQLCipher の代替 LibraryLoader を追加する方法があるかどうか疑問に思っています。(Android 5.1 をルート化した) および(Android 6.0.1 をルート化していない)
一部のデバイスでは、次のクラッシュが発生します。Huawei Enjoy 9s
Nexus 4
致命的な例外: java.lang.UnsatisfiedLinkError dalvik.system.PathClassLoader[DexPathList[[zip ファイル "/data/app/com.application-1/base.apk"]、nativeLibraryDirectories=[/data/app/com.application.app -1/lib/arm、/vendor/lib、/system/lib]]] で「libsqlcipher.so」が見つかりませんでした
可能であれば、ロードする適切なライブラリ名とアクションを実行する場所を見つけるにはどうすればよいですか?
のコードは次のSQLiteDatabase
とおりです。
/**
* Loads the native SQLCipher library into the application process.
*/
public static synchronized void loadLibs (Context context, File workingDir, LibraryLoader libraryLoader) {
libraryLoader.loadLibraries("sqlcipher");
// System.loadLibrary("stlport_shared");
// System.loadLibrary("sqlcipher_android");
// System.loadLibrary("database_sqlcipher");
// boolean systemICUFileExists = new File("/system/usr/icu/icudt46l.dat").exists();
// String icuRootPath = systemICUFileExists ? "/system/usr" : workingDir.getAbsolutePath();
// setICURoot(icuRootPath);
// if(!systemICUFileExists){
// loadICUData(context, workingDir);
// }
}
これは、DB インスタンスを作成する方法です。
import net.sqlcipher.database.SQLiteDatabase
import net.sqlcipher.database.SupportFactory
...
val passphrase: ByteArray = SQLiteDatabase.getBytes((BuildConfig.ROOM_PASSPHRASE + session.getRoomUUID()).toCharArray())
val factory = SupportFactory(passphrase)
val instance = Room.databaseBuilder(context.applicationContext, MyDatabase::class.java, "MyDatabase")
.openHelperFactory(factory)
.fallbackToDestructiveMigration()
.build()
...