《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
《Gradle权威指南》--Android Gradle NDK支持的更多相关文章
- 《Gradle权威指南》--Gradle插件
No1: 应用插件 apply plugin:'java' apply plugin:org.gradle.api.plugins.JavaPlugin apply plugin:JavaPlugin ...
- 《gradle权威指南》--Gradle入门
No1: Window下搭建Gradle:添加GRADLE_HOME环境变量,然后把GRADLE_HOME\bin添加到PATH系统变量里保存即可.完成后打开CMD,运行gradle -v来验证 No ...
- 《Gradle权威指南》--Gradle构建脚本基础
No1: 设置文件默认名是setting.gradle,放在根目录下,大多数作用都是为了配置子工程 No2: 一个Project包含很多个Task.Task就是一个操作,一个原子性的操作.其实它是Pr ...
- 《Gradle权威指南》--Gradle任务
No1: 多种方式创建任务 def Task ex41CreateTask1 = task(ex41CreateTask1) ex41CreateTask1.doLast{ println " ...
- 读书笔记--Android Gradle权威指南(上)
本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 最近看了一本书<Android Gradle 权威指南>,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所 ...
- 读书笔记--Android Gradle权威指南(下)
前言 最近看了一本书<Android Gradle 权威指南>,收获挺多,就想着来记录一些读书笔记,方便后续查阅. 本篇内容是基于上一篇:读书笔记--Android Gradle权威指南( ...
- Android Gradle 构建工具(Android Gradle Build Tools)是什么?
转载地址:http://mrfu.me/android/2015/07/17/New_Android_Gradle_Build_Tools/ 译者地址:[翻]一览新的 Android Gradle 构 ...
- Gradle系列之Android Gradle插件
原文发于微信公众号 jzman-blog,欢迎关注交流. 通过前面几篇文章学习了 Gradle 基础知识以及 Gradle 插件相关的知识,关于 Gradle 及其插件相关知识请先阅读下面几篇文章: ...
- Gradle系列之Android Gradle基础配置
原文发于微信公众号 jzman-blog,欢迎关注交流. 通过前面几篇文章学习了 Gradle 基础知识以及 Gradle 插件相关的知识,关于 Gradle 及其插件相关知识请先阅读下面几篇文章: ...
随机推荐
- node.js 找不到 xxx 模块解决办法
node.js找不到xxx 这个模块的解决方法. 按顺序来. 1.检查一下是否拼写错误. 2.这个模块是自己写的,是的话.检查一下路径是否正确. 3.如果是导入的模块.用 npm list这个命令输出 ...
- Java添加过期注解
加上 @Deprecated 后方法名称显示: 中划线(删除线)意为:发生这些变化并不会影响编译,只是提醒一下程序员,这个方法以后是要被删除的,最好别用.就是如果一个类从另外一个类继承,并且overr ...
- centos6 python 安装 sqlite 解决 No module named ‘_sqlite3′
原文连接: http://blog.csdn.net/jaket5219999/article/details/53512071 系统red hat6.7 也即centos6.7 python3.5. ...
- 2018-2019-2 网络对抗技术 20165227 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165227 Exp1 PC平台逆向破解 实验内容及步骤 实验一:直接修改程序机器指令,改变程序执行流程 知识要求:Call指令,EIP寄存器,指令跳转的偏移 ...
- weblogic中部署SSH项目遇到的坑
总结将SSH项目部署到weblogic遇到的坑.项目中是SSH,另外还用到了webservice.quartz等框架.在tomcat部署是可以的,现在总结部署到weblogic遇到的坑. 在这里说一下 ...
- MYSQL和oracle 大小写问题
MySQL的大小写问题 不是一个很大的问题,但是如果不了解的话,却会使用户产生迷惑 :如下面 Sql代码insert into t values('A'); insert into t values( ...
- 使用SSH远程登陆Linux
⒈SSH介绍 SSH(Secure Shell)由IETF的网络工作小组(NetWork Working Group)所制定,SSH是建立在应用层和传输层基础上的安全协议. SSH是目前较可靠,专为远 ...
- 【工具测试】Acunetix 11-登录后扫描的功能
1.概要 在测试的过程中,会给一些只有登录口的测试站点,只有登录后才能访问更多的页面. Acunetix 11的登录后扫描功能摸索了老半天,原来这么神奇.学习了! 2.操作 登录之后 - [Add T ...
- ES系列十九、kibana基本查询、可视化、仪表盘用法
一. 定义索引模式匹配 1.前缀模糊匹配,一个模式匹配多个索引 每一个数据集导入到Elasticsearch后会有一个索引匹配模式,在上段内容莎士比亚数据集有一个索引名称为shakespeare,账户 ...
- composer安装laravel框架时未生成Vendor解决办法
三个方法并没有关联,可以单独尝试也可以一起设置. 方法一. 去php.ini中查看下面三个扩展项是否开启 extension=php_fileinfo.dll extension=php_mbstri ...