Android Studio中的Gradle是干什么的

作者:ghui
链接:https://www.zhihu.com/question/30432152/answer/48239946
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Gradle是一个基于Apache AntApache Maven概念的项目自动化建构工具。它使用一种基于Groovy特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于JavaGroovyScala,计划未来将支持更多的语言。

上面是维基上对Gradle的解释,相信一个没有接触过构建的人是不大能看明白的,当初我也是.下面是我对Gradle通俗的理解:

软件开发讲究代码复用,通过复用可以使工程更易维护,代码量更少..... 开发者可以通过继承,组合,函数模块等实现不同程度上的代码复用.但不知你有没有想过,软件开发也是一种工程作业,绝不仅仅是写代码,还涉及到工程的各种管理(依赖,打包,部署,发布,各种渠道的差异管理.....),你每天都在build,clean,签名,打包,发布,有没有想过这种过程,也可以像代码一样被描述出来, 也可以被复用.

举个例子

我是做Android开发的,你可知道国内有n个Android市场,n个手机品牌,n个手机尺寸......,一般公司都会针对不同的市场单独发包用来统计不同渠道的下载量等情况,可能需要针对不同(品牌,尺寸等各种硬件信息)的手机做一些特殊的处理,这个时候你可以针对不同的情况单独建一个工程,或者更好一点你可以通过一些变量来控制,像这样:

if(isMoto){do something}
else if(isHuawei){do something}
...

差异管理

但这两种解决方法都有自己的缺点,特别是前一种有极大的代码重复.后一种稍微好一点,但这种方式的差异是运行时的,不是静态的,对于moto手机上的处理逻辑对华为手机来说一点作用也没有,但这一段针对moto手机的处理逻辑也被装到了华为手机上了,通过gradle的productFlavor与buildtype可以实现静态级的差异控制可以参考如何通过Gradle实现一套代码开发不同特性的APK · ByGhui

说到前面的多渠道问题,不同的渠道一般会对应不同的渠道号,你当然可以通过修改一次打一个包这种纯手工的方式来生成你的多渠道包,但据听说国内某团购网站的Android App有100多个渠道.这里出现了什么?重复,反复的去打包而且这些包之前的差异很小(只是渠道号不同),和写代码一样我们应该复用,通过Gradle可以实现一个命令打出所有的渠道包,一个命令打出指定的渠道包.再复杂一点,你可能需要不同的渠道对应不同的签名文件,不同的icon,不同的服务器地址...这些都可以通过Gradle来方便的实现.

依赖管理:

做软件开发你可能需要依赖各种不同的jar,library.你当然可以通过将.jar/library工程下载到本地再copy到你的工程中,但不知你是否听说过国外有个叫中央仓库的东西,在这个仓库里你可以找到所有你能想到以及你从来没听说过的jar,aar...The Central Repository Search Engine 这里可以找到所有你需要的依赖,而你需要的只是指定一个坐标,如下:

<img src="https://pic4.zhimg.com/8883d4b758b288a74eb4c104db854c5f_b.jpg" data-rawwidth="330" data-rawheight="24" class="content_image" width="330">剩下的依赖的寻找,下载,添加到classpath等你都不需要去关心,通过这种方式来维护依赖的好处有以下几点:

剩下的依赖的寻找,下载,添加到classpath等你都不需要去关心,通过这种方式来维护依赖的好处有以下几点:

  1. 依赖不会进入到你的版本控制仓库中(默认会缓存到~/.gradle/下)
  2. 方便卸载装载依赖(只是一条坐标依赖,不需要删除即可)
  3. 方便的版本管理,如上图中的2.3.3既是picasso的版本号,若改为+就表示从中央仓库中下载最新的版本
  4. 不同工程的相同依赖不会存在重复副本(只在~/.gradle下存在一份)

项目部署

这方面我没怎么接触过,但据我所知通过一些插件,可以实现自动将你的输出(.jar,.apk,.war...)上传到指定仓库,自动部署...

罗哩罗嗦说了这么多,不知大家有没有理解

总结一下:

  1. Gradle是一种构建工具,它可以帮你管理项目中的差异,依赖,编译,打包,部署......,你可以定义满足自己需要的构建逻辑,写入到build.gradle中供日后复用.
  2. Gradle不是一种编程语言,它不能帮你实现软件中的任何实际功能

通俗的解释肯定是不严谨的解释,不妥之处欢迎讨论.

时间: 2024-10-01 03:02:44

Android Studio中的Gradle是干什么的的相关文章

Android Studio中解决Gradle DSL method not found: &#39;android()&#39;

最近导入as的项目出了这样的问题 这个问题困扰了我很长时间,好吧,搜了半天全都是runProguard的,最后在stackoverflow上搜到解决办法了: http://stackoverflow.com/questions/27735646/android-studio-gradle-dsl-method-not-found-android-error17-0 解决方法: 删掉最外层的build.gradle中的 android { compileSdkVersion 19 buildToo

android studio中使用gradle多渠道打包

尝试了用android studio中使用gradle打多渠道的程序包,果然如传说中那样神奇.本文中部分是参考Google上的内容,权当学习记录在这里吧 1.配置好AndroidManifest.xml中的渠道信息,这里以友盟统计为例吧 在<application>  ...  </application>节点中增加: <meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_C

理解与配置android studio中的gradle

使用gradle构建android应用时,你总是需要这样一个文件:build.gradle.你应该已经看过这个文件了,如果没有看过的话,你现在就可以看一下,它没有多少内容.它的简洁性得益于它提供了很多对设置和属性的默认值.gradle是基于groovy语言的,但就使用它构建普通的工程的话,是可以不去学groovy的,如果想深入的做一下自定义的构建插件,可以考虑学一下groovy,因为它是基于java的,所以你有java基础的话,学习不会很难. 这篇博客旨让任何一个人能看懂android stud

在Android Studio中调试Gradle插件

个人博客 http://www.milovetingting.cn 在Android Studio中调试Gradle插件 前言 在开发Gradle插件时,经常会需要通过调试来排查问题,如果只使用日志输出来定位的话,效率不高,可以通过单步调试来定位问题.关于调试插件的资料,网上比较多,最终经过实践,参照这一篇文章 https://juejin.im/post/5dc8d947e51d455523170b7f 的方法,实现了插件的调试.在此也记录一下具体步骤.至于Gradle插件的开发,可以参照其它

Android Studio中使用Gradle打包

首先要注意一点,Android Studio中把proguard.txt已经命名为proguard-rules.pro,由此可见,采用Gradle打包,混淆规则文件的名称是不重要的,可以自己随便命名.混淆规则跟原来一样,没有变化.不懂可以搜一下别人怎么写的. 加入签名文件,在Build->Generate Signed APK- 就会看到下面的弹出框 如果没有签名文件就创建新的签名文件,如果已经有签名文件,那么选择签名文件的位置,并填写好密码就可以点Next了.创建签名文件的方式跟老版本(Ecl

Android Studio 中build.gradle文件的详细解析

困惑的build.gradle 在由Eclipse转到Android Studio之后,第一个让我感到困惑的是build.gradle这个文件了,实在话,当时我并不知道这么写是几个意思. apply plugin: 'com.android.application' android { compileSdkVersion 21 buildToolsVersion "21.1.2" defaultConfig { applicationId "com.example.test&

在 Android studio 中 配置Gradle 做到 “根据命令行提示符生成指定versionCode, versionName,指定apk的打包输出路径”

需求: 1. 使用 Android studio ,使用 gradle 进行构建 2. 在实际开发中,我们需要使用jenkins进行打包.就需要配置我们的 gradle 脚本以支持参数化的方式. 3. 想获得一个可配置打包脚本的方法,允许 配置人员根据需要修改 服务器地址,versionCode, versionName 等 4. 隔离的源代码的配置,使用者在 jenkins里进行配置. 概述: 先展示我配置好的 参数,可以在命令提示行下执行,如下: gradle assembleBeta -P

在 Android studio 中 配置Gradle 进行 “动态编译期间,指定 远程服务器地址 ,生成多个安装包”

需求: 在产品开发中,经常需要发布各个版本,每个版本的服务器地址有不同的服务器地址.比如 开发服务器使用 192.168.1.232服务器, 测试服务器使用 192.168.1.245服务器, 正式上线后服务器地址是http://xxxx.com. 在配合git开发中还要分支管理,常用的有: dev test master 我们起初的开发过程是: 在项目开始时,开发人员写代码,签入代码到dev分支.开发人员使用 开发服务器的服务器地址 在启动测试时,开发组负责人合并代码到 test 测试分支.测

Android(java)学习笔记126:Android Studio中build.gradle简介

1.首先我们直接上代码介绍: // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { //这里可以看到是指明的jcenter(), 之前版本则是mavenCentral() // jcenter可以理解成是一个新的中央远程仓库,兼容maven中心仓库,而且性能更优. jcenter() } dep