解析“SQLiteDatabase”中的方法“loadLibs”时出错(SQLiteDatabase.loadLibs();)
我正在尝试将 SQLCipher 用于 android studio,尽管我已将库添加到依赖项中,但我收到此错误。
(DBHelper类)
public DBHelper(Context context) {
super(context, DB_Name, null, DATABASE_VERSION);
this.myContext = context;
this.DB_Path = "/data/data/" + context.getPackageName() + "/" + "databases/";
Log.e("Path 1", DB_Path);
SQLiteDatabase.loadLibs();
}
我已经添加了这个库:
implementation 'net.zetetic:sqlcipher-android:4.5.4@aar'
implementation 'androidx.sqlite:sqlite:2.2.0'
(也尝试过旧的库)
import net.zetetic.database.sqlcipher.SQLiteDatabase;
我已同步项目,并构建了 gradle,并尝试了“无效缓存”和清理并重建项目,但问题仍然存在。
因此,在与类似问题苦苦挣扎了一天的大部分时间后,我想我有一个解决方案......
当我需要将应用程序从使用
net.zetetic:android-database-sqlcipher:4.4.0
(已弃用)迁移到列出的替代品 net.zetetic:sqlcipher-android:4.5.5
时,我的错误开始了,然后导致应用程序在打开时崩溃,但出现异常 java.lang.UnsatisfiedLinkError: No implementation found for long net.zetetic.database.sqlcipher.SQLiteConnection.nativeOpen(...
我能找到的所有答案都只提到需要在应用程序中调用
SQLiteDatabase.loadLibs()
,但我的应用程序在此更新之前没有,并且工作正常。此外,新库net.zetetic:sqlcipher-android:4.5.5
没有任何这样的方法(我检查了源代码库)...所以经过更多搜索,我发现库源中的一个测试类中使用了另一种方法(net.zetetic.database.sqlcipher_cts.RoomUpsertTest
)
这是
System.loadLibrary("sqlcipher");
所以我将其添加到我的数据库初始化中,现在应用程序再次运行良好。