前言
最近遇到了问题,大概是 APPT2 ERROR
错误,这个错误很常见,说的是 .9图片
有问题,但是网上的回答都非常的零散和不够系统。编译的时候从 LOG终端
中也看不了太多信息。网上的建议是加编译参数 --stacktrace --debug
,所以就想着把 Gradle 构建系统详细了解下。
以下说的大多是学习总结,一些概念可能描述的不准确,更多信息请参考文中和文末的资料链接。
问题
- Android Studio, Gradle, Groovy 的关系
- Android Studio 生成的项目中
build.gradle
,settings.gradle
,gradle.properties
,gradle-wrapper.properties
这些文件的作用 - 如何构建不同渠道的多个包
- 如何构建服务器地址不同的包,甚至逻辑不同的版本,而不是新开分支
回答
Android Studio, Gradle, Groovy 的关系
-
Groovy
是基于JVM的一门语言,类似于其他基于JVM的语言一样,如JAVA
,KOTLIN
等,最终生成JAVA字节码运行在JVM虚拟机上。 我们从 Groovy官网 中下载安装,并了解语言特性
。println ("Groovy Demo") def num1 = 6 num2 = 3 ppp "你好","Groovy" println "$num1 的平方是 ${sqrt(num1)}" println "$num1 + $num2 = ${ add(num1,num2)}" println "平方求和 ${sqrtSum(num1, num2, {var1, var2->var1 + var2})}" def ppp(m1, m2) { println "$m1 $m2" } def sqrtSum(var1, var2, action) { return sqrt(action(var2, var2) ) } def add(x, y) { x + y } def sqrt(x) { x * x } def mul(var1, var2) { return var1 - var2 } def div = { int var1, int var2-> var1 / var2 }
Groovy
了解个大概,有个概念差不多了。具体的可以参考官网。 -
Android Studio 编译时就是把整个构造任务委托给
Gradle
来处理,可以构建Android项目还有Ant
,Buck
等。Gradle
可以说是脚本,或者是语言,又或者是一个平台。Groovy
基于JVM,Gradle
基于Groovy
。Gradle
可以实现自动化打包,自动化测试,项目依赖管理等功能。Gradle
基于约定优先配置
原则,能够非常智能的知道该如果加载库,编译源码,加载资源,以及生成目标产物的最终位置。而配置的各种的插件,就是定义了一系列的规则。比如,java插件,android插件。apply plugin: 'com.android.application'
Gradle
编译的时候是执行一系列的task,可以使用下列命令查看所有的taskgradle task --all
常用的有
assemble
,assembleDebug
,assembleRelease
,build
,clean
。
下面的代码直观感受下,如何编写build.gradle
, 以及如何执行的。我们先新建文件夹GradleDemo
,然后新建文件build.gradle
, 基本结构就好了。在build.gradle
写上下面的代码:println "Gradle demo" task sayHello { println "hello from task 'sayHello'" }
如果我们执行
gradle task --all
将会看到sayHello
这个task
, 我们执行下gradle sayHello
将会看到如下输出
Gradle demo
hello from task ‘sayHello’
:sayHello UP-TO-DATE