android studio魅族,从编程的角度理解gradle脚本﹘﹘Android Studio脚本构建和编程[魅族Degao]...

2024-03-26 14:40

本文主要是介绍android studio魅族,从编程的角度理解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 Listeach(List 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、物联网、汽车自己主动驾驶等领域原创技术分享请关注微信公众号:

gVdnj4YXdW

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;" />

这篇关于android studio魅族,从编程的角度理解gradle脚本﹘﹘Android Studio脚本构建和编程[魅族Degao]...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/848845

相关文章

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面