如何在Gradle中设置NDK库路径?

时间:2016-05-17 21:19:14

标签: java android gradle android-ndk java-native-interface

我有两个项目 A B

A 是一个主要项目,使用 B 思想依赖 A-> B

NDK libs位于两个项目中:

--------------    --------------
|      A      |   |     B      | 
--------------    --------------
|  JNI libs   |   |  JNI libs  |
--------------    --------------


A
|-jniLibs
     |-armeabi-v7a
     |-x86

B
|-jniLibs
     |-armeabi-v7a
     |-x86

我尝试将JNI纳入两个项目:

来自A:

的build.gradle
 ...
 sourceSets {
        main {
            jni.srcDirs = []
            jniLibs.srcDirs = ['jniLibs']
        }

    }

    splits {
        abi {
            enable true
            reset()
            include 'x86', 'armeabi-v7a'
            universalApk true
        }
    }

    productFlavors {

        x86 {
            ndk {
                abiFilters "x86", ""
            }
        }

        arm7 {
            ndk {
                abiFilters "armeabi-v7a", ""
            }
        }

    }
    ...

来自B的build.gradle:

 ...
 sourceSets {
        main {
            jni.srcDirs = []
            jniLibs.srcDirs = ['jniLibs']
        }

    }

    splits {
        abi {
            enable true
            reset()
            include 'x86', 'armeabi-v7a', 'mips'
            universalApk true
        }
    }

    productFlavors {

        x86 {
            ndk {
                abiFilters "x86", ""
            }
        }

        arm7 {
            ndk {
                abiFilters "armeabi-v7a", ""
            }
        }

    }
    ...

当我尝试启动我的App时,我遇到了一个错误,即错过了JNI lib中方法的实现。您可以说jni lib不包含该方法,但如果我将所有.so文件放入A项目并尝试使用B项目中的lib - 我没有任何错误。

所以问题是:如何在gradle中直接找到JNI lib路径?

1 个答案:

答案 0 :(得分:0)

最后我解决了我的问题。 认真阅读。

错误在于与JNI一起工作的Java类的路径。

没有gradle错误。错误是包名。我将包含本机方法的类移动到另一个包中。

当您为包含本机方法的类更改包名称(move package)时,您应该在本机代码中更改方法签名。如果您无法更改本机代码,则应保留此类的包名称。