我有两个项目 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纳入两个项目:
...
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", ""
}
}
}
...
...
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路径?
答案 0 :(得分:0)
最后我解决了我的问题。 认真阅读。
错误在于与JNI一起工作的Java类的路径。
没有gradle错误。错误是包名。我将包含本机方法的类移动到另一个包中。
当您为包含本机方法的类更改包名称(move package)时,您应该在本机代码中更改方法签名。如果您无法更改本机代码,则应保留此类的包名称。