Android Studio项目中包含jni文件时,编译会遇到
Error:Execution failed for task ':app:compileDebugNdk'.
这是因为gradle android plugin试图自己去调用ndk-build来编译项目中的源文件,而且会忽略项目中的Makefile文件使用自动生成的Makefile。
为了避免自动调用ndk-build来编译jni,需在app/build.gradle中加入以下代码:
sourceSets.main {
jniLibs.srcDir 'src/main/libs'
jni.srcDirs = [] //disable automatic ndk-build call
}
import org.apache.tools.ant.taskdefs.condition.Os
// call regular ndk-build(.cmd) script from app directory
task ndkBuild(type: Exec) {
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePath
} else {
commandLine 'ndk-build', '-C', file('src/main').absolutePath
}
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}