【问题标题】:Room SQLCipher provide an alternative LibraryLoaderRoom SQLCipher 提供了一个替代的 LibraryLoader
【发布时间】:2021-02-10 23:25:09
【问题描述】:

我想知道是否有办法为 SQLCipher 添加替代 LibraryLoader。
一些设备如Huawei Enjoy 9s(Android 5.1 root)和Nexus 4(Android 6.0.1 未root)会产生下一次崩溃:

致命异常:java.lang.UnsatisfiedLinkError dalvik.system.PathClassLoader[DexPathList[[zip 文件“/data/app/com.application-1/base.apk”], nativeLibraryDirectories=[/data/app/com.application.app-1/lib/arm, /v​​endor/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);
    // }
  }

这就是我创建数据库实例的方式:

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()

...

【问题讨论】:

    标签: android android-sqlite sqlcipher-android


    【解决方案1】:

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

    无需手动loadLibraries,只需在正确的位置重置DI组件即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      相关资源
      最近更新 更多