从编程的角度理解gradle脚本﹘﹘Android Studio脚本构建和编程[魅族Degao]
本篇文章由嵌入式企鹅圈原创团队、魅族资深project师degao撰写。
随着Android 开发环境从Eclipse转向Android Studio,我们每一个人都開始或多或少要接触gradle脚本。大多数人将gradle看做构建工具。出现故障不知怎样着手分析,仅仅能寄希望百度能找到解决方式,事实上大可不必。
假设我们把gradle看做编程框架,并理清gradle脚本与gradle对象的关系,通过查阅文档,不但能清晰理解gradle脚本,并且出现故障再也不用百度,通过查阅文档就能轻松解决这个问题。
本文就通过一个最普通的gradleproject。告诉大家怎样通过查阅api文档来看懂Android里面的gradle 脚本。
versionName"1.0"
}
buildTypes {
release {
minifyEnabled true
proguardFilesgetDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
}
六、在gradle中使用java语言编程的样例
直接上代码,想学习的就劳心理解啦,编辑器对代码不太友好啊。
1. build.gradle
buildscript {
repositories{
maven {
url 'http://artifactory.rnd.meizu.com/artifactory/all'
}
}
dependencies {
classpath 'org.aspectj:aspectjtools:1.8.6'
}
}
importorg.aspectj.bridge.IMessage
import org.aspectj.bridge.MessageHandler
importorg.aspectj.tools.ajc.Main
dependencies{
compile'org.aspectj:aspectjrt:1.8.6'
}
android.applicationVariants.all{ variant ->
JavaCompile javaCompile = variant.javaCompile
//println javaCompile.properties
javaCompile.doLast {
String[] args = [
"-showWeaveInfo",
"-1.5",
"-inpath", javaCompile.destinationDir.toString(),
"-aspectpath",javaCompile.classpath.asPath,
"-d", javaCompile.destinationDir.toString(),
"-classpath",javaCompile.classpath.asPath,
"-bootclasspath",android.bootClasspath.join(File.pathSeparator)
]
MessageHandler handler = newMessageHandler(true);
new Main().run(args, handler)
def log = project.logger
for (IMessage message : handler.getMessages(null,true)) {
switch (message.getKind()) {
case IMessage.ABORT:
case IMessage.ERROR:
case IMessage.FAIL:
log.error message.message,message.thrown
break;
case IMessage.WARNING:
case IMessage.INFO:
log.info message.message,message.thrown
break;
case IMessage.DEBUG:
log.debug message.message,message.thrown
break;
}
}
println "aspect args : " +args.toString()
}
}
2. groovy
以下这段代码展示了groovy中变量定义,函数定义,List,Map,Range,闭包。
1)变量定义
defvariable1 = 1 //能够不使用分号结尾
2)函数定义。
StringtestFunction(arg1,arg2){//无需指定參数类型
...
}
3)List变量由[]定义,比方
defaList = [5,'string',true] //List由[]定义,其元素能够是不论什么对象
4)List存取
aList[100]= 100 //设置第101个元素的值为10
assertaList[100] == 100
5)Map变量由[:]定义,比方
defaMap = ['key1':'value1','key2':true]
Map由[:]定义。注意当中的冒号。冒号左边是key,右边是Value。key必须是字符串,value能够是不论什么对象。另外,key能够用''或""包起来,也能够不用引號包起来。比方:
defaNewMap = [key1:"value",key2:true]//当中的key1和key2默认被处理成字符串"key1"和"key2"
只是Key要是不使用引號包起来的话,也会带来一定混淆。比方
defkey1="wowo"
defaConfusedMap=[key1:"who am i?
"]
//aConfuseMap中的key1究竟是"key1"还是变量key1的值“wowo”?显然,答案是字符串"key1"。假设要是"wowo"的话,则aConfusedMap的定义必须设置成:
defaConfusedMap=[(key1):"who am i?
"]
6)Range类,Range类型的变量 由begin值+两个点+end值表示
def aRange =1..5
//假设不想包括最后一个元素,则
defaRangeWithoutEnd = 1..<5
//包括1,2,3,4这4个元素
7)闭包
defxxx = {paramters -> code} //或者
defxxx = {无參数,纯code}
比方:
defgreeting = { "Hello, $it!" }
assertgreeting('Patrick') == 'Hello, Patrick!'
当函数的最后一个參数是闭包的话。能够省略圆括号。
public static<T> List<T>each(List<T> self, Closure closure)
上面这个函数表示针对List的每一个元素都会调用closure做一些处理。
这里的closure。就有点回调函数的感觉。可是,在使用这个each函数的时候。我们传递一个怎样的Closure进去呢?比方:
def iamList =[1,2,3,4,5] //定义一个List
iamList.each{//调用它的each,这段代码的格式看不懂了吧?each是个函数,圆括号去哪了?
println it
}
上面代码有以下知识点:
each函数调用的圆括号不见了!
原来。Groovy中,当函数的最后一个參数是闭包的话,能够省略圆括号。比方
deftestClosure(int a1,String b1, Closure closure){
//dosomething
closure() //调用闭包
}
那么调用的时候,就能够免括号!
testClosure4, "test", {
println"i am in closure"
}
開始你的Gradle构建和编程之旅吧~~
很多其它的嵌入式linux和android、物联网、汽车自己主动驾驶等领域原创技术分享请关注微信公众号:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" style="border: none; max-width: 100%; font-family: 'Microsoft YaHei'; line-height: 25.984375px; text-align: center;" />
从编程的角度理解gradle脚本﹘﹘Android Studio脚本构建和编程[魅族Degao]的更多相关文章
- 深入理解gradle编译-Android基础篇
深入理解gradle编译-Android基础篇 导读 Gradle基于Groovy的特定领域语言(DSL)编写的一种自动化建构工具,Groovy作为一种高级语言由Java代码实现,本文将对Gradle ...
- 机器学习:从编程的角度理解BP神经网络
1.简介(只是简单介绍下理论内容帮助理解下面的代码,如果自己写代码实现此理论不够) 1) BP神经网络是一种多层网络算法,其核心是反向传播误差,即: 使用梯度下降法(或其他算法),通过反向传播来不断调 ...
- Android Studio的构建系统:Gradle
原文作者:youxiachai <用Gradle 构建你的android程序> 前言 android gradle 的插件终于把混淆代码的task集成进去了,加上最近,android st ...
- gradle与android studio 关系及gradle配置
前言 我们一般开发android 使用android studio ,android studio 安装的时候,会帮我们做两件事,配置好自己的jdk. 实际上,使用的其实不是我们在path中配置的jd ...
- gradle/gradle plugin/Android studio关系
gradle - 构建工具,存储于Users/stono/.gradle/wrapper/dists Adroid Studio- IDE Gradle plugin - 在AS中使用Gradle的插 ...
- Android Studio项目构建常见问题解决
1. 创建或导入项目后编译时一直在等待 问题: 原因:AS连网去下载gradle了,但是网络不好或不通 解决:禁用网络,AS就会立即自动终止下载进入到主界面了.此时再去指定离线的gradle版本进行编 ...
- android studio学习----构建编译
项目创建成功后会自动下载Gradle,这个过程特别慢,建议翻墙.下载的Gradle在Windows平台会默认在 C:\Documents and Settings\<用户名>.gradle ...
- android studio学习----构建(gradle )依赖时使用动态依赖的问题
今天在看Dan Lew大神的博客发现最新的文章就是 “Don't use dynamic versions for your dependencies” Everyone, please, to st ...
- gradle打包android (实现外部导入签名文件、多渠道打包、导入ant脚本)
近期一直在做android自己主动打包,之前已经完毕了用纯命令行的形式打包.原生态ant脚本打包.和基于android的SDK的打包.而且实现了多渠道打包,后来同事推荐了gradle,网上的资料说gr ...
随机推荐
- javascript--给你的JS代码添加单元测试
通过测试框架为JavaScript应用添加测试,从而保证代码的高质量.这里的笔记例子应用在jaywcjlove/validator.js中. 安装 用到三个工具chai(断言工具),mocha(测试框 ...
- idea导入ssm项目启动tomcat报错404
用idea写ssm项目,基于之前一直在用spring boot 对于idea如何运行ssm花费了一番功夫 启动Tom act一直在报404 我搜了网上各种解决办法都不行,花费一天多的时间解决不了 就 ...
- mybatis一对多关系的关联查询
问题描述:实现两张表的关联查询 学生表: 班级表: 要实现学生管理信息中有所在班级的名称,即如下图所示 1.对应学生表的pojo类写全班级表中的字段(适用于要连接的表字段较少的情况) sql语句直接在 ...
- [DP专题]悬线法
参考:https://blog.csdn.net/twtsa/article/details/8120269 先给出题目来源:(洛谷) 1.p1387 最大正方形 2.P1169 棋盘制作 3.p27 ...
- Blender之UILayout
目标 [x] 总结Blender面板布局 总结 Blender面板中界面组件是通过UILayout进行组织的. 其主要属性如下: row() 定义横向子布局. column() 定义竖向子布局. sp ...
- Android截图截取弹框AlertDialog
1:效果如图 2:权限 <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="21" ...
- Equals相關的一些要點
什麽時候需要覆蓋Equals? 自定義的值類型需要覆蓋,因爲框架默認的實現是基於反射的,效率不高. 自定義的引用類型要根據業務需要來決定是否提供覆蓋. 什麽時候需要覆蓋operator==()? ...
- 关于OpenCV的Mat画图问题
由于OpenCV的java版本画图有太多错误,只能自己编写画图的代码,在一个函数中,编写出画圆和深度距离的代码, 代码如下: public int CircleMyMat(Mat Show, Poin ...
- 读书笔记「Python编程:从入门到实践」_6.字典
6.1 一个简单的字典 alien_0 = {'color': 'green', 'points': 5} print(alien_0['color']) print(alien_0['points' ...
- (转)Arcgis for js加载天地图
http://blog.csdn.net/gisshixisheng/article/details/44494715 综述:本节讲述的是用Arcgis for js加载天地图的切片资源. 天地图的切 ...