一览新的 Android Gradle 构建工具:新的 DSL 结构 和 Gradle 2.5
译者地址:【翻】一览新的 Android Gradle 构建工具:新的 DSL 结构 和 Gradle 2.5
原文:First Look at New Android Gradle Build Tools: The new DSL structure and Gradle 2.5
双语对比地址: 【翻-双语】一览新的 Android Gradle 构建工具:新的 DSL 结构 和 Gradle 2.5
Android Studio 1.3 的平台已经接近于稳定的公布版,新的功能不断推出,包含对NDK 的完美支持。它看起来有一些重大的改变也正在等待合适的孵化时机,如:新的 Gradle 构建工具以及新设计的 DSL (gradle 脚本代码结构)
在我把玩了一个小时之后。我发现它是很有趣的,所以。我决定去写下这篇博客来向你们这些家伙介绍这个构建工具即将带来的改变。好让你们做好准备。
Android Gradle 构建工具(Android Gradle Build Tools)是什么?
万一你还不知道它呢!
Android Gradle 构建工具是一个执行时用于处理 module 下的 build.gradle
文件的,在这个文件传递到 Gradle 去做进一步操作之前进行的。
Gradle Build Tools 在项目中的 build.gradle
声明就像以下这样:
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
}
每一个版本号的 Gradle Build Tools 能够与以下列出的受支持的 Gradle 版本号协同工作。
Android Gradle Plugin | Gradle |
---|---|
1.0.0 - 1.1.3 | 2.2.1 - 2.3 |
1.2+ | 2.2.1+ |
在 Android Gradle Build Tools 中定义了语法规则,和我们使用的语法规则在 build.gradle
文件中来写 Gradle 脚本(And the syntax we use these days to write Gradle Script in build.gradle file is defined in Android Gradle Build Tools.). 我们称它为 DSL
(Domain-Specific Language).
新的 Android Gradle 构建工具
从 Gradle Build Tools 1.0 问世以来。 DSL 还没有被动过。 Android Studio 团队决定对新的 Gradle Build Tools 做出重大的改变。它仍然在试验阶段,通过改变其基础的 Gradle 的新组件模型机制使其显著的降低在配置上花费的时间。
然而开发团队正在努力尝试去移除这些通用的变化,以尽量降低从传统的插件在未来的迁移过程。(However development teams are working hard trying to remove these current changes to minimize the migration process from the traditional plugin in the future.)
无论怎么样,坦白的说。新的 DSL 看起来相当不错。我必须说我对这些改变很信服,由于这个新的 DSL 结构以及命名比方今的这个更加有意义。
尝试新的 Gradle Build Tools 仅仅须要简单的在项目的 build.gradle
文件中更改 build tools 的版本号:
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.1.0'
}
请注意, 新版本号的 build tools 要与刚刚公布的 Gradle 2.5 一起使用才行,所以你须要首先安装 Gradle2.5,在你的项目的 gradle/gradle-wrapper.properties
文件下改动 distributionUrl
这一行:
distributionUrl=https\://services.gradle.org/distributions/gradle-2.5-bin.zip
进入设置页面( Windows 系统在 File -> Settings 或 Mac OS X 在 Android Studio -> Preferences 下),而且。确保你选择使用的是默认配置的 gradle wrapper.
然后改动 module 的 build.gradle
文件从这样:
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "23.0.0 rc3"
defaultConfig {
applicationId "com.inthecheesefactory.hellojni25"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
}
改成这样:
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 22
buildToolsVersion = "23.0.0 rc3"
defaultConfig.with {
applicationId = "com.inthecheesefactory.hellojni25"
minSdkVersion.apiLevel = 15
targetSdkVersion.apiLevel = 22
versionCode = 1
versionName = "1.0"
}
}
android.buildTypes {
release {
isMinifyEnabled = false
proguardFiles += file('proguard-rules.pro')
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
}
你能够注意到结构有很大的不同。
com.android.application
如今改为 com.android.model.application
. 大多数属性要求有 =
操作符。以及 +=
操作符被用于加入元素(或许是多个)到集合中。曾经一些属性的名字定义的不是很的清晰的。如今也有所调整。举个样例:minSdkVersion
如今变成了 minSdkVersion.apiLevel
好了,让我们用 gradle 文件同步项目去应用这些改变。
然后仅仅须要执行它。在使用更有意义的语法规则后,一切按预期的那样工作。使用新奇出炉的 Gradle 2.5 构建。
试试 NDK 的支持
Android Studio 1.3 嘚瑟的宣布了全然支持 NDK。
所以,让我们用一个很easy的 native 代码样例来做尝试。首先,你须要在项目的 local.properties
文件中定义一个 NDK 的文件夹。请注意你能够在 Android NDK Downloads Page 中显示的 NDK r10e 和在 SDK Manager 中显示的 NDK Bundle 都是能够使用的。
ndk.dir=PATH_TO_NDK_ROOT
创建 HelloJni.java
放在你的 Java 包下。
public class HelloJni {
public native String stringFromJNI();
}
在 src/main 文件夹里面创建一个 jni 文件夹。而且创建一个 hello-jni.c
文件中面写例如以下的内容:
hello-jni.c
#include <string.h>
#include <jni.h>
jstring
Java_com_inthecheesefactory_hellojni25_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
#if defined(__arm__)
#if defined(__ARM_ARCH_7A__)
#if defined(__ARM_NEON__)
#if defined(__ARM_PCS_VFP)
#define ABI "armeabi-v7a/NEON (hard-float)"
#else
#define ABI "armeabi-v7a/NEON"
#endif
#else
#if defined(__ARM_PCS_VFP)
#define ABI "armeabi-v7a (hard-float)"
#else
#define ABI "armeabi-v7a"
#endif
#endif
#else
#define ABI "armeabi"
#endif
#elif defined(__i386__)
#define ABI "x86"
#elif defined(__x86_64__)
#define ABI "x86_64"
#elif defined(__mips64) /* mips64el-* toolchain defines __mips__ too */
#define ABI "mips64"
#elif defined(__mips__)
#define ABI "mips"
#elif defined(__aarch64__)
#define ABI "arm64-v8a"
#else
#define ABI "unknown"
#endif
return (*env)->NewStringUTF(env, "Hello from JNI !! Compiled with ABI " ABI ".");
}
请不要忘记将 com_inthecheesefactory_hellojni25
改变成相应的 HelloJni.java 的包名,否则它是不工作的。
对于那些熟悉 NDK 的人,你可能注意到了 Makefiles 已经不再须要了。
这是终于的文件文件夹:
如今,让我们在 MainActivity.java
中測试这段 JNI 代码,把以下这段代码放到 MainActivity 类的最后一行:
public class MainActivity extends AppCompatActivity {
...
static {
System.loadLibrary("hello-jni");
}
}
改动 onCreate
就像这样:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(MainActivity.this,
new HelloJni().stringFromJNI(),
Toast.LENGTH_LONG)
.show();
}
duang~完毕!如今。你能够通过 Java 代码来使用 native 代码了。执行试试吧
随着在 Android Studio 上令人惊叹的全然支持 NDK,Java 代码现和 Native 代码如今能够配合更加天衣无缝。
假设你在 Java 中调试代码,它将会跳转到 native 代码的正确位置。
(译者:这点还真是令人惊叹喔!
)
无论怎么说。它仍然处于实验阶段,某些功能仍在开发中。对于严肃的用户来说,最好等到它终于公布吧。
结论
我必须说新的 Gradle Build Tools 是很有趣的。
主要改变的 DSL 看起来很有前途,而且对于如今的来说具有更深远的意义。优秀的代码应该能告诉我们它能做什么(译者:能从字面意思理解这段代码的意思)。对吧?
然后它仍然还处于实验阶段。这个 DSL 还不是终于的版本号,我们最好仅仅是学习和了解他的存在,而不是如今立马就切换到这个新的版本号。
无论怎么说。我相信距离它公布可供实际使用的稳定版本号不会很久了。
做好准备吧!
能够在这里了解很多其它的信息 >>Experimental Plugin User Guide
=)
Author: nuuneoi (Android GDE, CTO & CEO at The Cheese Factory)
A full-stack developer with more than 6 years experience on Android Application Development and more than 12 years in Mobile Application Development industry. Also has skill in Infrastucture, Service Side, Design, UI&UX, Hardware, Optimization, Cooking, Photographing, Blogging, Training, Public Speaking and do love to share things to people in the world!
一览新的 Android Gradle 构建工具:新的 DSL 结构 和 Gradle 2.5的更多相关文章
- Android NDK开发 Android Studio使用新的Gradle构建工具配置NDK环境(一)
本文主要讲述了如何如何在Android Studio使用新的Gradle构建工具配置NDK环境,现在把相关的步骤整理出来分享给Android程序员兄弟们,希望给他们在配置NDK环境时带来帮助. 从An ...
- Android Gradle 构建工具(Android Gradle Build Tools)是什么?
转载地址:http://mrfu.me/android/2015/07/17/New_Android_Gradle_Build_Tools/ 译者地址:[翻]一览新的 Android Gradle 构 ...
- AS Gradle构建工具与Android plugin插件【大全】
Android plugin version 与 gradle version 的关系 Gradle是一种构建工具,它通过编写一个名为build.gradle的脚本文件对项目进行设置,再根据这个脚本对 ...
- Java 中三大构建工具:Ant、Maven和Gradle
Java世界中主要有三大构建工具:Ant.Maven和Gradle 目前:Ant已经销声匿迹.Maven也没落了,而Gradle的发展则如日中天. Maven的主要功能主要分为5点,分别是依赖管理系统 ...
- 大神所写的深度好文---Gradle 构建工具
什么是构建工具? 我们大家都知道 Gradle 是一种构建工具,那么什么是构建工具呢? 网上一大堆的文字解释我觉得很难理解,这里我以咱们 Android 开发来举个例子吧. 我们以前开发都是用 Ecl ...
- [Gradle] Gradle 构建工具的未来
转载地址:http://www.infoq.com/cn/news/2011/04/xxb-maven-6-gradle Maven面临的挑战 软件行业新旧交替的速度之快往往令人咂舌,不用多少时间,你 ...
- gradle构建工具
在使用android studio开发android程序时,as就是基于gradle进行构建的,我们只需要通过run就可以编译.打包.安装,非常方便,但是究竟gradle是什么呢? 一.java构建 ...
- gradle 构建工具,与Ant Maven关系
1 基本概念 gradle是一个基于Apache ant 和apache maven概念的项目自动化建构工具.它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的xml.当前其支持 ...
- Gradle 构建工具
参考文章: 作者:ghui 链接:https://www.zhihu.com/question/30432152/answer/48239946 来源:知乎 著作权归作者所有.商业转载请联系作者获得授 ...
随机推荐
- Canal的安装与使用
一.Canal介绍 Canal的原理就是它自己伪装成slave, 向mysql发送dump协议,MySQL master接收到dump请求之后推送binlog文件给slave, 也就是canal. 二 ...
- day14 迭代器,生成器,函数的递归调用
1.什么是迭代器 迭代是一个重复的过程,但是每次重复都是基于上一次重复的结果而继续 迭代取值的工具 2.为什么要用迭代器 迭代器的优点 ①不依赖于索引取值 ②更节省内存 缺点: 1.不如按 ...
- LeetCode(106) Construct Binary Tree from Inorder and Postorder Traversal
题目 Given inorder and postorder traversal of a tree, construct the binary tree. Note: You may assume ...
- struts向网页输出图片验证码
前言:今天做个功能需要展示图片到页面,并不是下载,在网上搜了老半天,大部分都是下载,有的话也是只能在IE下进行输出,其它浏览器就都是下载了. Action代码: public String proce ...
- bean容器能力
bean容器能力 对bean容器的最简单的述求 能生产bean 能注入组装bean: 字段,构造函数 spring bean容器(3.0版本)的能力列表 能生产bean 能注入组装bean:字段,构造 ...
- 九度oj 题目1262:Sequence Construction puzzles(I)_构造全递增序列
题目描述: 给定一个整数序列,请问如何去掉最少的元素使得原序列变成一个全递增的序列. 输入: 输入的第一行包括一个整数N(1<=N<=10000). 接下来的一行是N个满足题目描述条件的整 ...
- eclipse逆向生成实体类
(转自:http://blog.csdn.net/wangpeng047/article/details/6877720) 做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理 ...
- SPOJ CIRU The area of the union of circles ——Simpson积分
[题目分析] 圆的面积并. 直接Simpson积分,(但是有计算几何的解法,留着flag). simpson积分,如果圆出现了不连续的情况,是很容易出事情的.(脑补一下) 但是没有什么办法,本来就是一 ...
- BZOJ 3209: 花神的数论题【数位dp】
Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了. ...
- bzoj 5055: 膜法师 树状数组+离散
先枚举每一个数,看它前面有几个比它小,算一下和为sum1,后面有几个比它大,算一下和为sum2,对答案的贡献为A[i]*sum1*sum2. 离散化后,树状数组就可以了. 就是倒着一边,顺着一边,统计 ...