我正在尝试使用需要使用本机库的sqlitecipher库。他们的教程非常简单,但对我不起作用。每次我收到以下错误:
FATAL EXCEPTION: main
java.lang.UnsatisfiedLinkError: Couldn't load stlport_shared from loader dalvik.system.PathClassLoader[dexPath=/data/app/org.example.test-2.apk,libraryPath=/data/app-lib/org.example.test-2]: findLibrary returned null
at java.lang.Runtime.loadLibrary(Runtime.java:365)
at java.lang.System.loadLibrary(System.java:535)
at net.sqlcipher.database.SQLiteDatabase.loadLibs(SQLiteDatabase.java:141)
at net.sqlcipher.database.SQLiteDatabase.loadLibs(SQLiteDatabase.java:136)
这意味着 .so 文件在编译期间未附加。
所有 3 个文件都存储在 /libs/armeabi/ 目录中。
我认为问题在于我使用 maven 来管理依赖项(无论如何,构建都是使用 Android Studio 执行的)。下一次尝试 - 将这些库包含到 Maven 依赖项中。根据文档,这很容易。我在公共存储库中找不到它们,所以我使用<scope>system</scope>
了标签。它们是可见的,但它不起作用。后来发现这个链接说范围“系统”不起作用,尝试使用将这些库添加到本地存储库中
mvn install:install-file -DgroupId=net.sqlitecipher -DartifactId=stlport_shared -Dversion=1.0 -Dfile=libstlport_shared.so -Dpackaging=so -DgeneratePom=true
最后 - 它没有工作。
我也看到了这个话题,可能这是一个解决方案,但我目前不使用 gradle。有没有办法在不从 maven 移动到 gradle 的情况下将 .so 文件包含到 apk 中?
据我了解,Android Studio 在内部使用 gradle 来构建 apk,所以在 maven 开始支持本机库之前,我所做的所有努力都是无用的,对吗?我还尝试使用 Intellij IDEA Cardea (13.0) 构建项目,不幸的是没有任何成功。