9

我正在尝试使用需要使用本机库的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) 构建项目,不幸的是没有任何成功。

4

3 回答 3

10

一旦原生库位于 /libs/armeabi/ 中,您所要做的就是正确配置 android 插件。像这样的东西:

<plugin>
    <groupId>com.jayway.maven.plugins.android.generation2</groupId>
    <artifactId>android-maven-plugin</artifactId>
    <configuration>
         <nativeLibrariesDirectory>${project.basedir}/libs</nativeLibrariesDirectory>
         ...
    </configuration>
    <extensions>true</extensions>
</plugin>
于 2013-08-22T12:48:04.297 回答
1

对问题 1:是的。我以前没有遇到过这个特定的问题,但通常你不需要切换到 gradle。可以使用 ant 任务将 SO 文件添加到 APK。而且由于 maven 可以运行 Ant 任务,所以它是可能的。

您在此处找到的nativeLibsToJar只不过是将所有 SO 文件放入 ZIP 文件然后使用扩展名 JAR 而不是 ZIP 的任务。您可以使用Ant 任务 Zip轻松做到这一点(可能还需要rename)。

对问题2:没有。因为第一个答案。不需要“maven 支持本机库”。只需使用 Ant 作为构建系统。

于 2013-08-22T10:30:19.417 回答
1

您必须使用 android studio 为包含在 android 项目中的 .so 文件创建 jni 文件夹。

我附上了图片,请按照以下步骤操作。

创建 jnilib 文件夹后,您可以将所有 .so 文件放在此文件夹中。在此处输入图像描述

于 2015-11-09T09:23:56.837 回答