编译JNI同时使用libs:情况如下
sourceSets {
main() {
jni.srcDirs = [] // disable automatic ndk-build call, which ignore our Android.mk
jniLibs.srcDir 'src/main/libs'
}
}
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
错误提示:
Error:Execution failed for task ':wzz:transformNativeLibsWithMergeJniLibsForDebug'.
> More than one file was found with OS independent path 'lib/armeabi-v7a/libJniMethod.so'
此时在externalNativeBuild后补充
packagingOptions {
exclude 'lib/armeabi-v7a/libJniMethod.so'
}
问题就解决了。
解释一下问什么要这么做:
新版Gradle实现了自动打包编译so文件的功能,并且为so文件指定了默认的目录app/src/main/jniLibs,那么
运行工程的时候因为使用了externalNativeBuild libJniMethod会被多编译一次,那么就会多出现一次,那么运行的时候的时候就会提示More than one file was found。所以在后面补充packagingOptions就是为了避免二次编译导致再次生成xxx.so文件;