Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 房间SQLCipher提供一个备用的图书馆装载机_Android_Android Sqlite_Sqlcipher Android - Fatal编程技术网

Android 房间SQLCipher提供一个备用的图书馆装载机

Android 房间SQLCipher提供一个备用的图书馆装载机,android,android-sqlite,sqlcipher-android,Android,Android Sqlite,Sqlcipher Android,我想知道是否有一种方法可以为SQLCipher添加一个替代的LibraryLoader 一些设备,如华为享受9s(安卓5.1版本)和Nexus 4(安卓6.0.1版本未版本)会导致下一次崩溃: 致命异常:java.lang.UnsatisfiedLinkError dalvik.system.PathClassLoader[DexPathList[[zip文件”/data/app/com.application-1/base.apk”], NativeLibraryDirectory=[/dat

我想知道是否有一种方法可以为SQLCipher添加一个替代的LibraryLoader
一些设备,如
华为享受9s(安卓5.1版本)和
Nexus 4(安卓6.0.1版本未版本)会导致下一次崩溃:

致命异常:java.lang.UnsatisfiedLinkError dalvik.system.PathClassLoader[DexPathList[[zip文件”/data/app/com.application-1/base.apk”], NativeLibraryDirectory=[/data/app/com.application.app-1/lib/arm、/vendor/lib、/system/lib]] 找不到“libsqlcipher.so”

如果可能,我如何找到要加载的适当库名称以及在何处执行操作
以下是来自
SQLiteDatabase
的代码:

/**
*将本机SQLCipher库加载到应用程序进程中。
*/
公共静态同步void loadLibs(上下文上下文、文件workingDir、LibraryLoader LibraryLoader){
loadLibraries(“sqlcipher”);
//系统加载库(“stlport_共享”);
//加载库(“sqlcipher_android”);
//加载库(“数据库_sqlcipher”);
//布尔值systemICUFileExists=新文件(“/system/usr/icu/icudt46l.dat”).exists();
//字符串icuRootPath=systemICUFileExists?/system/usr:workingDir.getAbsolutePath();
//setICURoot(icuRootPath);
//如果(!systemicufiles存在){
//loadICUData(上下文,workingDir);
// }
}
以下是我创建DB实例的方式:

import net.sqlcipher.database.SQLiteDatabase
导入net.sqlcipher.database.SupportFactory
...
val passphrase:ByteArray=SQLiteDatabase.getBytes((BuildConfig.ROOM\u passphrase+session.getRoomUUID()).toCharArray())
val factory=SupportFactory(密码短语)
val instance=Room.databaseBuilder(context.applicationContext,MyDatabase::class.java,“MyDatabase”)
.openHelperFactory(工厂)
.fallbackToDestructiveMigration()
.build()
...

这并不明显,但我发现了一个问题。
SupportFactory
实例在每次打开数据库时只能使用一次。因此,重置在登录屏幕上保存数据库实例的Dagger组件修复了该问题

无需手动加载库,只需在正确的位置重置DI组件即可