No1:
在根项目下的local.properties文件中配置
sdk.dir=/home/frame/android/android-sdk
ndk.dir=/home/frame/android/android-ndk
在gradle.properties里配置
android.useDeprecatedNdk=true
No2:
配置so库的模块名,是在build.gradle脚本文件里配置
android{ compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig{ applicationId "org.flysnow.app.example132" minSdkVersion 14 targetSdkVersion 23 versionCode 1 versionName '1.0.0' ndk{ moduleName 'helloworld' } } buildTypes{ release{ minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro' zipAlignEnabled true } } }
No3:
android{ compileSdkVersion 23 buildToolsVersion "23.0.1" }
申明NDK级别必须是Android SDK和Android NDK都存在的API级别,否则找不到相应的NDK就会报找不到jni.h这个错误
No4:
多平台编译
生成so文件包含4个平台架构:armeabi、armeabi-v7a、mips、x86
android{ compileSdkVersion 23 buildToolsRevision "23.0.1" defaultConfig{ applicationId "org.flysnow.app.example132" minSdkVersion 14 targetSdkVersion 23 versionCode 1 versionName '1.0.0' ndk{ moduleName 'helloworld' abiFilters 'armeabi-v7a','x86' } } }
No5:
第三方的so库放到特定的目录src/main/jniLibs,和jni目录平级
例:x86的so库放在src/main/jniLibs/x86/
armeabi的so库放在src/main/jniLibs/armeabi-v7a/
No6:
使用NDK提供的库,比如:liblog、libz、libandroid等
android{ compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig{ applicationId "org.flysnow.app.example132" targetSdkVersion 23 ndk{ moduleName 'helloworld' ldLibs 'log','z' } } }
注:moduleName不能带有lib前缀
No7:
C++库支持
1)libstdc++,默认的,迷你版C++运行库
2)gabi++_static,GAbi++运行库,静态的,支持C++异常和RTTI特性
3)gabi++_shared,GAbi++运行库,动态的,支持C++异常和RTTI特性
4)stlport_static,STLport运行库,静态的,支持C++异常、RTTI和标准库
5)stlport_shared,STLport运行库,动态的,支持C++异常、RTTI和标准库
6)gnustl_static,GUN STL,静态的,支持C++异常、RTTI和标准库
7)gnustl_shared,GUN STL,动态的,支持C++异常、RTTI和标准库
8)c++_static,LLVM libc++运行库,静态的,支持C++异常、RTTI和标准库
9)c++shared,LLVM libc++运行库,动态的
例:
在Application.mk中配置
APP_STL :=gnustl_static
gradle中配置
android{ defaultConfig{ ndk{ moduleName 'helloworld' abiFilter 'armeabi-v7a' abiFilter 'x86' ldLibs 'log','z' stl 'gnustl_static' } } }
------------------------------------
启用C++异常
APP_CPPFLAGS += -fexceptions
gradle配置
android{ defaultConfig{ ndk{ moduleName 'helloworld' abiFilter 'armeabi-v7a' abiFilter 'x86' ldLibs 'log','z' stl 'gnustl_static' cFlags '-fexceptions' } } }
启用RTTI
android{ defaultConfig{ ndk{ moduleName 'helloworld' abiFilter 'armeabi-v7a' abiFilter 'x86' ldLibs 'log','z' stl 'gnustl_static' cFlags '-fexceptions -frtti' } } }
持续集成平台可以使用Jenkins