在Android Studio中使用自己的Android.mk

2016/05/30 Android

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本身的功能相冲突,所以会带来一些问题:

  1. Android Studio对C/C++的代码补全功能失效.
  2. Android Studio对C/C++的自动跳转功能失效.

系统版本

因为gradle版本在不停的更新中,并且版本之间存在不兼容的情况,本文章所描述的放在实在一下测试环境下实现的.如果按照本文的方法不能执行,很可能就是因为gradle的版本问题.

gradle verison: 2.1
os : Ubuntu 14.04
ndk: r10e

Search

    Table of Contents