配置Gradle生成so
在AndroidStudio2.1及以前我是通过下面的方式配置NDK的,不知道是从哪个版本开始的,我第一次在AS上使用NDK的时候用的就是AndroidStudio2.1了。
首先在gradle.properties里面添加 android.useDeprecatedNDK = true
android{}下的defaultconfig{}代码块中添加ndk{}
ndk{
moduleName = "xxx"
//abiFilters("armeabi", "armeabi-v7a"..)
//ldLibs = ["log"]
//cFlags
//stl(ie:gnustl_shared,stlport_static..)
}
默认在src/main/jni目录下面找c/c++文件编译,也可以在android{}下添加sourceSet{}
sourceSet{
main{
jni.srcDirs=['src/main/cpp']
}
}
就能将指定目录下的c/c++文件编译成指定的模块名.so。
编译多个模块
上面这种方式通过gradle无法编译成多个模块,编译多个模块还是要自己写Android.mk文件实现,通过手动执行ndk-build编译成的*.so文件默认在src/main/libs下面。
打包APK时,默认是寻找so的目录是/build/intermediates/ndk和/build/intermediates/jniLibs,前者是使用源码由Gradle编译成的so所处的位置,后者一般是一些第三方的so或者自己手动使用ndk编译生成的so文件所生成的,这个位置在src/main/jniLibs。
因此手动编译好so文件后,将其复制到jniLibs下面,或者在此放