Android NDK:为不同的体系结构编译不同的JNI模块(jniLibs)

时间:2017-07-19 14:15:36

标签: android android-ndk java-native-interface android.mk

我有编译具有不同架构的JNI库的不同模块的问题

Module jniOne:
    /jniLib/armeabi

&安培;

Module jniTwo: 
    /jniLib/armeabi-v7a
    /jniLib/x86

两个模块都不同,并且具有不同的.so文件。

现在问题是当我在主应用程序中包含两个模块时,一个模块jni库没有编译并获得java.lang.UnsatisfiedLinkError

MainApp: 
    build.gradle
    compile project(':jniOne')
    compile project(':jniTwo')

如果我包含两个以上的任何一个,那么应用程序运行完美。

那么我在这个jniLib编译中缺少什么?

1 个答案:

答案 0 :(得分:0)

据我所知。在项目中具有jniLibs的所有模块应该具有相同的abiFilters jnilibs。

示例:

模块jniOne:     / jniLib / armeabi

模块jniTwo:     / jniLib / armeabi

在你的情况下,问题是jniOne创建了armeabi,jniTwo创建了armeabi-v7a,x86。在运行时系统尝试链接'所以'所有已创建文件夹中的文件在那里找不到JniTwo'所以' armeabi和JniOne中的文件'所以'文件在armeabi-v7a,x86中,并给出UnsatisfiedLinkError。

另外添加:

ndk {             abiFilters' armeabi',' armeabi-v7a',....         }     在项目和模块渐变的defaultConfig中。