简体   繁体   English

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

[英]How to setup NDK libs path in Gradle?

I have two projects A and B . 我有两个项目AB.

A is a main project, that use B thought dependency A->B A是一个主要项目,使用B思想依赖A-> B.

NDK libs located in two projects : NDK库位于两个项目中:

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


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

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

And I try to include JNI into both projects : 我尝试将JNI包含在两个项目中:

Piece of build.gradle from A : 一块build.gradle来自A:

 ...
 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", ""
            }
        }

    }
    ...

Piece of build.gradle from B : 来自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", ""
            }
        }

    }
    ...

And when I try to launch my App I've got an error about missing implementation of method from JNI lib. 当我尝试启动我的应用程序时,我遇到了一个关于缺少JNI lib方法实现的错误。 You can say that jni lib doesn't contains the method, but if I put all .so files to A project and try use the lib from B project - I doesn't have any error. 您可以说jni lib不包含该方法,但是如果我将所有.so文件放到A项目并尝试使用B项目中的lib - 我没有任何错误。

So the question is : how to locate directly JNI lib path in gradle? 所以问题是:如何在gradle中直接找到JNI lib路径?

Finally I solved my problem. 最后我解决了我的问题。 Read attentively. 仔细阅读。

The mistake was in path of Java class that worked with JNI. 错误在于与JNI一起工作的Java类的路径。

There is no gradle mistakes. 没有gradle错误。 Mistake was in package name. 错误是包名。 I move my class that contains native methods to another package. 我将包含本机方法的类移动到另一个包中。

When you change package name(move package) for class that contains native methods, you should change method signature in native code. 当您为包含本机方法的类更改包名称(移动包)时,您应该在本机代码中更改方法签名。 If you doesn't have ability to change native code you should keep package name for this class. 如果您无法更改本机代码,则应保留此类的包名称。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM