AS1.3 及其以上预览版新插件-实验版(NDK)
来源:互联网 发布:淘宝假授权书处罚 编辑:程序博客网 时间:2024/05/20 20:20
序
在新版的AS预览版中我发现对于NDK的支持有所变化。
在新的插件版本中加强了对NDK的支持以及性能的优化。
于是查询了一下文档,特此写了该文章,为尝鲜的朋友准备,喜欢尝鲜的朋友可以试试,个人感觉味道不错。
在之前版本的时候我写过如何在AS中编译NDK:
[Android] 环境配置之Android Studio开发NDK
本篇文章是一篇半翻译文章,来源于AS的说明文档,在文章底部会附上原文链接。
本篇文章中的东西来源于预览版,本文章中的方法已测试有效;但不建议用于生产开发。
介绍
这是一个新的试验性插件,该组建基于新的Gradle组建模型;在配置上能显著减少时间。在新的插件中包括了使用JNI开发NDK的一键式操作。在本指南中提供了详细的使用方式,同时强调了新的插件与原始插件之间的区别。
警告:该插件是试验性插件。有关该插件的Gradle API也并不是最终版本。这意味着他只是特定版本的API,也可能只能在特定版本中使用。
此外。DSL可能发生大量改变,在最终版本中有可能采用新的API代替。
该实验插件是改善了NDK集成与性能相关的早期预览版本(这两个问题来自于用户反馈)。
需求
- Gradle 2.5 (仅仅)
- Android NDK R10e 版本(如果你需要使用NDK)
- SDK 构建工具最低版本 19.0.0 ,一些功能可能需要更新的版本
- AS 1.3 预览版及其更高版本
迁移
从之前版本迁移到最新预览版。在下面显示了新的预览版的项目结构,更改的地方使用红色表示。
./gradle/wrapper/gradle-wrapper.properties
新的插件仅仅只支持 gradle-2.5.
#Wed Apr 10 15:27:10 PDT 2013
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-2.5-all.zip
./build.gradle
其中Classpath 应该配置为 com.android.tools.build:gradle-experimental
以前是 com.android.tools.build:gradle
当前可使用版本为: 0.2.0.
// 提示: 顶层配置,你也可以在你的子项目或者子Model中添加对应配置buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle-experimental:0.2.0' // 提示: 别把项目所需依赖写在这里,他们属于Model中的 build.gradle 文件 }}allprojects { repositories { jcenter() }}
./app/build.gradle
在该插件中有着许多有关DSL变化。其中很多变化似乎有些奇葩,并不必要;因为在我看来插件变化应该尽量简单以减少插件迁移的代价。
DSL 变更:
- Apply 默认插件名现在是
com.android.model.application
在之前的版本中是:com.android.application
. 如果我们的Model是另外的库或者aar 那么现在应该为:com.android.model.library
- 根配置应该加上 model { } 模块
- 大多属性应该加上
'='
操作符 - 如果是为集合添加对应的元素应该使用
'+='
操作符
使得 DSL 更局限性的变更:
- buildTypes, productFlavors 和 signingConfigs 配置必须写在 android { } 模块以外
- 能在 android { } 模块中嵌套使用的配置需要加上
with
关键字. - 属性也将只能使用所支持的直接属性,而没法使用其他类型而后进行转换(如果该属性是int类型,将只能输入int值,而不能是string字符然后强制转换)。例如:
- 文件类型属性将直接接受文件类型,而不接受String类型。
- 不能直接使用 minSdkVersion 接受一个 int 或者 string 类型,而需要写为:
minSdkVersion.apiLevel = 15
.
- 创建一个buildType 或者 productFlavor 等标记需要调用
create
方法. 修改一个现有的,如buildType中的release或者debug标记可以直接使用名称就可以了. - 现在修改DSL 的变量或者任务是非常非常局限的.
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.2.0'}
NDK 相关
在该实验插件中使用NDK创建Android本地程序。 你需要:
使用下载工具下载 NDK 包并配置好环境.
在项目local.properties
文件中设置 ndk.dir
变量并指定你的 NDK 路径,也可以在环境变量中设置 ANDROID_NDK_HOME 为你计算机上的 NDK 路径.
在你的 model 中的 build.gradle
文件中添加 android.ndk
板块.
已知局限
- 不支持NDK-only模块;仅仅支持混合的app或者lib库的项目编译。
- 编译项目时并不会重复编译已编译完成的JNI代码(AAR库中的所有so文件仅仅只是简单打包到APK中,不会进行重复编译)。
- 不支持创建可依赖静态库。
- 不支持使用诸如
cpu_features
的NDK库。 - 不支持集成外部构建系统。
Model 中的 build.gradle
中的 NDK 配置诸如这样:
提示:项目中的 moduleName
属性是必须的,它定义了 NDK 所生成的文件名。
默认情况下,JNI 文件应该放到项目的目录为:src/main/jni
,在其中你可以放C/C++代码;当然你也可以重新定义该默认目录。
model { android { compileSdkVersion = 22 buildToolsVersion = "22.0.1" } android.ndk { moduleName = "native" } android.sources { main { jni { source { srcDir 'src' } } } }}
其他的编译属性你可以设置到android.ndk { }
模块中,诸如:
model { android { compileSdkVersion = 22 buildToolsVersion = "22.0.1" } android.ndk { // 所有可以在 android.ndk 中定义的配置. moduleName = "native" toolchain = "clang" toolchainVersion = "3.5" // 提示:CFlags 是一个C的资源, 其命名与常规的属性并不一样. 这是一个技术限制,但在以后会解决。 CFlags += "-DCUSTOM_DEFINE" cppFlags += "-DCUSTOM_DEFINE" ldFlags += "-L/custom/lib/path" ldLibs += "log" stl = "stlport_static" } android.buildTypes { release { ndk.with { debuggable = true } } } android.productFlavors { create("arm") { ndk.with { // 你可以在 productFlavors 和 buildTypes 节点中配置 NDK 相关的属性 abiFilters += "armeabi-v7a" } } create("fat") { // 如果未指定 ndk.abiFilters 属性,那么将会生成所有的CPU版本ABI. } } // 你可以修改所有的 NDK 属性 components.android { binaries.afterEach { binary -> binary.mergedNdkConfig.cppFlags.add( "-DVARIANT=\"" + binary.name + "\"") } }}
原文链接
需要梯子:
http://tools.android.com/tech-docs/new-build-system/gradle-experimental
案例
这里有一些Google官方的案例,地址:
https://github.com/googlesamples/android-ndk.
我的博客中的案例会放到:
https://github.com/qiujuer/BeFoot
========================================================
作者:qiujuer
博客:blog.csdn.net/qiujuer
网站:www.qiujuer.net
开源库:github.com/qiujuer/Genius-Android
开源库:github.com/qiujuer/Blink
转载请注明出处:http://blog.csdn.net/qiujuer/article/details/47961763
—— 学之开源,用于开源;初学者的心态,与君共勉!
========================================================
- AS1.3 及其以上预览版新插件-实验版(NDK)
- 使用R7及以上版NDK搭建Android开发环境
- IntelliJ IDEA14 预览版的新特性
- Android O 开发者预览版新特性
- 新的数据库连接池Tomcat jdbc pool配置(tomcat7及其以上版本才有)
- iOS系统SDK实现毛玻璃效果(swift版 iOS8.0及其以上)
- Java 7的并发新特性!发布预览版代码
- Ubuntu 8.04 Hardy Heron新风格样版预览
- Visual Studio 2013预览版中的 C++11 新特性
- Visual Studio 2013预览版中的 C++11 新特性
- 盘点VS2015 预览版的5个新特性
- Android2.3 NDK 新特性
- Android NDK 预览
- PB12预览版(CTP)
- spark 2.0.1(技术预览版)的编译与测试(附一些新特性的介绍)
- 大数据早报:三星设立新人工智能研究中心 微软发布预览版SQL Server跨平台开发工具(11.24)
- php5.6及其以上版本有了新特性,函数可以传入不定数目的参数
- 图片上传本地预览插件v1.3
- 面试题之:String,StringBuffer与StringBuilder的区别?
- 关于 self 和 super 在oc 中 的疑惑 与 分析
- MySQL简易建立餐厅数据库
- [BZOJ1046][HAOI2007]上升序列
- Linux环境下【mysql】修改mysql5.5默认编码
- AS1.3 及其以上预览版新插件-实验版(NDK)
- 猜拳游戏--最高效版本
- 简单演示Exploit SEH原理(未开启SafeSEH模块)
- perl获取AppAnnie数据
- 欢迎使用CSDN-markdown编辑器
- Swift 语言基础算法
- 一次重定向引起的异步IO
- 推荐两个比较全的android在线源代码
- 启动maven项目报错:java.lang.ClassNotFoundException: ContextLoaderListener解决方法