build.gradle脚本的编写
因为我一开始接触Android的NDK开发时就是使用的Android.mk作为C和C++的配置文件,但是后来Android Studio开始流行之后,google就使用gradle作为默认的打包工具,虽然gradle对Java的支持很好,但是感觉对C/C++语言的支持一直不是很好,最近在使用Android Studio进行开发,需要使用到C/C++,但是在build.gradle文件中进行配置感觉不是很熟悉,并且gradle一直在更新,有些gradle配置文件的写法,还存在兼容性问题,所以索性不用gradle对C/C++代码进行编译,直接使用原来的Andoroid.mk的方式进行编译.
在build.gradle文件中进行配置
要在Android Studio的module的build.gradle配置文件中添加下面的内容,要注意的是下面的关于sourceSets这个属性的配置需要放在android这个属性中,如果放错了位置之后配置是不能起作用的.
sourceSets { main { jni.srcDirs = [] //屏蔽gradle的jni生成过程 jniLibs.srcDir 'src/main/libs' } }
需要注意的是下面的自己定义的两个函数(方法),不能和上面的配置一样,放在android的下面,要和android是平级的关系.
task ndkBuild(type: Exec) { commandLine '/home/tiankai/tools/ADT/android-ndk-r10e/ndk-build', '-C', file('src/main').absolutePath } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn ndkBuild }
只要上面两个配置好了之后,就不会遇到问题.
在Android Studio中使用Android.mk编译的缺点
在Android Studio中使用Android.mk编译之后,由于和Android Studio本身的功能相冲突,所以会带来一些问题:
- Android Studio对C/C++的代码补全功能失效.
- Android Studio对C/C++的自动跳转功能失效.
系统版本
因为gradle版本在不停的更新中,并且版本之间存在不兼容的情况,本文章所描述的放在实在一下测试环境下实现的.如果按照本文的方法不能执行,很可能就是因为gradle的版本问题.
gradle verison: 2.1 os : Ubuntu 14.04 ndk: r10e