繁体   English   中英

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

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

我有两个项目AB.

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

NDK库位于两个项目中:

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


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

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

我尝试将JNI包含在两个项目中:

一块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", ""
            }
        }

    }
    ...

来自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", ""
            }
        }

    }
    ...

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

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

最后我解决了我的问题。 仔细阅读。

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

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

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

暂无
暂无

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

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