如何使用现有NDK项目添加预编译的共享库?

时间:2016-05-30 10:18:50

标签: android android-ndk

我使用两个独立的共享库,使用正常的gradle工作正常。我使用以下gradle命令包含库:

    sourceSets.main
        {
            jni.srcDirs = []// This means that ndk-build.cmd needs to be invoked from command line
            jniLibs.srcDirs "src/main/libs" //include other libraries
        }

我需要开始编译两个库中的一个,所以我转到实验gradle。我让这个对我正在建造的图书馆工作得很好。但是,当我去添加预编译的共享库时,我遇到了java.lang.UnsatisfiedLinkError的崩溃:找不到我的JNI方法的实现。我没有更改包名称或共享库。

当我跑步时

jar xvf app-release.apk 

我看到我的共享库出现在文件列表中,因此它被APK版本接收。如果库在APK中,可能是UnsatisfiedLinkError的来源是什么?将预构建的.so文件包含在NDK项目中的步骤是什么。 NDK项目代码不会调用额外的库,只调用java代码。

1 个答案:

答案 0 :(得分:0)

您应该从java代码手动加载库。

System.loadLibrary("yourlib");

不要忘记处理异常,因为loadLibrary可以抛出异常。这很重要,因为异常消息会显示路径,它试图找到您的共享库。另外,请确保您的库已添加到 apk 中。然后,请确保为不同的ABI编译了共享库,因为armeabi库不能在x86手机上运行。

Here您可以找到使用gradle-experimental插件向您的项目添加库的示例,因此它会添加到您的 apk