在 Android Studio 中引用 .so 文件遇到问题

我正在尝试在 Android 中集成 CLE,并因此必须添加一些 .so 文件。 我正在遵循来自 这里 的教程。

一切都很好,直到集成 Star 库时出现问题,然而当我运行程序时,我获得以下异常:

Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: library "/data/data/com.srplab.starcore/lib/libstar_java.so" not found

现在为了包括这些 .so 文件,我创建了一个 jniLibs 文件夹并放置了 3 个架构的 .so 文件:

enter image description here

我已经将以下代码添加到我的 build.gradle 中:

 sourceSets
            {
                main
                        {

                            jniLibs.srcDirs = ['src/main/jnilibs']

                        }
            }

然而,当我再次运行以下代码时:

try {
            //System.loadLibrary("mysharedlibrary");
            System.load("/data/data/"+getPackageName()+"/libstar_java.so");
        } catch (UnsatisfiedLinkError use) {
            Log.e("JNI", "WARNING: Could not load libmysharedlibrary.so");
            use.printStackTrace();
        }

我遇到了一个异常,这意味着 .so 文件未加载。

如何正确做到这一点?

点赞
用户5819959
用户5819959

你的“_armeabiv7a_”文件夹必须重命名为“ armeabi-v7a ”。

另外在代码中出现了拼写错误:

jniLibs.srcDirs = ['src/main/jnilibs']

正确的应该是:

jniLibs.srcDirs = ['src/main/jniLibs']

顺便提一下,“**src/main/jniLibs**” 是默认用于本地库的,你不需要在 gradle 脚本中指定它。

虽然上面没有完整的代码块,但你是在静态初始化器中加载库吗?比如:

static
{
    System.loadLibrary("star_java");
}

然后检查一下你的 apk,确认库已经被成功收集到了 app/build/outputs/apk/ 中。

2016-12-13 13:24:30