Android Studio SQLCipher:解析“SQLiteDatabase”中的方法“loadLibs”时出错(SQLiteDatabase.loadLibs();)

问题描述 投票:0回答:1

解析“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,并尝试了“无效缓存”和清理并重建项目,但问题仍然存在。

android-studio sqlcipher sqlcipher-android
1个回答
0
投票

因此,在与类似问题苦苦挣扎了一天的大部分时间后,我想我有一个解决方案......

当我需要将应用程序从使用

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");

所以我将其添加到我的数据库初始化中,现在应用程序再次运行良好。

© www.soinside.com 2019 - 2024. All rights reserved.