《Gradle权威指南》--Android Gradle NDK支持
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2016-03-28 Xml解析