Android Studio在Gradle中配置NDK编译,覆盖默认NDK编译

默认情况下,存在src/main/jni文件夹时,gradle生成脚本会执行ndk编译生成操作,但是,编译生成方式并不是像以前那样用ndk-build去处理Android.mk Application.mk等进行c/c++代码的编译链接,而是在临时文件路径中重新生成了一份新的mk文件,并以此作为ndk编译项目。

如果我们想自己在jni目录下面建立Android.mk和Application.mk来进行编译,比如在so库中加入log打印功能,则需要在Android.mk中将log库编译到so文件,此时要怎么做呢?

首先在项目gradle文件的android{}中添加如下代码:

sourceSets {
    main {
        jni.srcDirs = []   //屏蔽gradle的jni生成过程
        jniLibs.srcDir 'src/main/libs'
    }
}

然后在gradle文件最底部添加一个ndk编译任务:

task ndkBuild(type: Exec) {
    commandLine 'ndk-build', '-C', file('src/main/jni').absolutePath
}
tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn ndkBuild
}

注意:使用上述命令必须确定ndk的环境变量配置好了,也就是确定ndk的目录加到PATH中去了,否则该任务会执行失败。

在MAC中不能直接使用ndk-build,会找不到命令,即使已经在~/.bash_profile中将ndk目录加入到PATH中了也一样。需要使用绝对路径,如下:

commandLine '/User/xxx/xxx/ndk-build', '-C', file('src/main/jni').absolutePath

最后自己在jni目录下面建立Android.mk和Application.mk文件,直接点击AS上的运行就会先执行NDK编译的过程。

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章