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支持的更多相关文章

  1. 《Gradle权威指南》--Gradle插件

    No1: 应用插件 apply plugin:'java' apply plugin:org.gradle.api.plugins.JavaPlugin apply plugin:JavaPlugin ...

  2. 《gradle权威指南》--Gradle入门

    No1: Window下搭建Gradle:添加GRADLE_HOME环境变量,然后把GRADLE_HOME\bin添加到PATH系统变量里保存即可.完成后打开CMD,运行gradle -v来验证 No ...

  3. 《Gradle权威指南》--Gradle构建脚本基础

    No1: 设置文件默认名是setting.gradle,放在根目录下,大多数作用都是为了配置子工程 No2: 一个Project包含很多个Task.Task就是一个操作,一个原子性的操作.其实它是Pr ...

  4. 《Gradle权威指南》--Gradle任务

    No1: 多种方式创建任务 def Task ex41CreateTask1 = task(ex41CreateTask1) ex41CreateTask1.doLast{ println " ...

  5. 读书笔记--Android Gradle权威指南(上)

    本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 最近看了一本书<Android Gradle 权威指南>,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所 ...

  6. 读书笔记--Android Gradle权威指南(下)

    前言 最近看了一本书<Android Gradle 权威指南>,收获挺多,就想着来记录一些读书笔记,方便后续查阅. 本篇内容是基于上一篇:读书笔记--Android Gradle权威指南( ...

  7. Android Gradle 构建工具(Android Gradle Build Tools)是什么?

    转载地址:http://mrfu.me/android/2015/07/17/New_Android_Gradle_Build_Tools/ 译者地址:[翻]一览新的 Android Gradle 构 ...

  8. Gradle系列之Android Gradle插件

    原文发于微信公众号 jzman-blog,欢迎关注交流. 通过前面几篇文章学习了 Gradle 基础知识以及 Gradle 插件相关的知识,关于 Gradle 及其插件相关知识请先阅读下面几篇文章: ...

  9. Gradle系列之Android Gradle基础配置

    原文发于微信公众号 jzman-blog,欢迎关注交流. 通过前面几篇文章学习了 Gradle 基础知识以及 Gradle 插件相关的知识,关于 Gradle 及其插件相关知识请先阅读下面几篇文章: ...

随机推荐

  1. JavaScript之事件绑定多个序列执行方法

    //一种事件绑定多个方法:以加载事件为例 function addEventLoad(func,isLog) { var oldOnLoad = window.onload; if (typeof w ...

  2. 关于《汇编语言(王爽)》程序6.3使用16个dw 0的问题

    在学习王爽老师<汇编语言>的第6.2节时,在程序6.3代码中,给出了如下的代码: assume cs:code code segment dw 0123h, 0456h, 0789h, 0 ...

  3. Epoll模型

    Epoll模型 相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率.因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多.并且,在l ...

  4. PNG,JPEG,BMP,JIF图片格式详解及其对比

    原文地址:http://blog.csdn.net/u012611878/article/details/52215985 图片格式详解 不知道大家有没有注意过网页里,手机里,平板里的图片,事实上,图 ...

  5. nodejs前端开发环境安装

    1.       nodejs安装 要求:node版本6.2.0及以上,npm版本3.8.9及以上 Nodejs安装包地址: 2.    在rTools上下载并安装git 3.    在rTools上 ...

  6. 018_mac写权限的问题

    一. 有时候运行一些软件的时候,操作系统下的文件没有写权限.我在使用"HostAdmin App"时碰到了这个问题,google的链接供参考:https://code.google ...

  7. Ex 6_3 修建酒店所获得的利润..._第五次作业

    假设profit[i]为在前i个位置修建酒店所获得的最大利润,当i=0时,profit[0]=0.当i>0时,若j为上一个满足m[i]-m[j]k的位置.若profit[i-1]>prof ...

  8. Fiddler模拟post四种请求数据

    前言: Fiddler是一个简单的http协议调试代理工具,它界面友好,易于操作,是模拟http请求的利器之一. 在接口测试中,接口通常是get请求或者post请求.get请求的测试一般较为简单,只需 ...

  9. NodeJs>------->>第二章:Node.js中交互式运行环境--------REL

    第二章:Node.js中交互式运行环境--------REL 一:REPL运行环境概述 C:\Users\junliu>node > foo = 'bar' ; 'bar' > 二: ...

  10. input text 去掉标签下拉提示

    autocomplete 属性 autocomplete 属性规定输入字段是否应该启用自动完成功能. 自动完成允许浏览器预测对字段的输入.当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在 ...