Gradle常用总结

前言

之前在多版本多渠道打包,还有混淆相关的文章中对gradle相关的内容有一部分的了解,但是没有系统综合的总结过相关的知识内容,这里就一些碰到的问题做一下总结!

什么是Gradle?

Gradle是一个开源的自动化构建工具,被应用在AS中去构建我们的Android项目,代替了之前Eclipse中的ant。首先我们要明确一点,Gradle不是一种语言,它使用的是Groovy语言,关于Groovy,这里不多说,想要了解的可以查阅一些资料。

Gradle version和Gradle plugin version的区别

好像15年之前,Android Studio都没怎么普及,我第一次接触AS之后,也是被其中的编译配置搞懵逼了,那时候墙的厉害,各种编译不过,有的时候前一次编译过了,后一次就又不过!
Gradle version:对应的是Gradle官方发行的release版本,跟Android Studio半毛钱关系没有。
具体在gradle-wrapper.properties文件中:

...
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip

Gradle plugin version:这个说的插件是指AS中的Gradle插件,是AS以Gradle发行版本为基础,结合Android SDK Build Tools专用于构建 Android 应用的插件。
具体在项目的build.gradle中:

buildscript {
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:4.0.0'
    }
}

一般来说,每次AS的大版本更新,都会有一次Gradle插件的更新,而且两者的版本号基本上一样,当然也会有AS更新,但是插件不更新的情况。也就是说Gradle插件是独立于AS单独维护更新的。

再说回gradle和gradle plugin,两者的区别上边已经说清楚了,关于两者的版本对应关系可以到AS官网这个页面查看:版本对应关系

AS中的Gradle配置

这里以最新的AS4.0为例,其中gradel配置页面较之前版本UI有所改变,但是内容不变:
在这里插入图片描述
默认情况下,使用的是gradle-wrapper.properties这个文件中的配置:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.11-all.zip

它会先在GRADLE_USER_HOME这里边去找有没有对应的版本(这里是6.1.1),如果没有则去distributionUrl这个地址去下载,下载完成则会放在distributionPath对应的文件夹下。
说个题外话,上边提到早期墙的厉害,导致这个url下载不了,就出现项目死活编译不了的问题。

我们也注意到下边还有一个Specified location,就我们手动指定Gradle目录位置,其实我们在下载更新一个版本的AS后,这个安装目录中就带有该Gradle插件所依赖的最新版的gradle,我们直接将该gradle地址,写在后边即可!编译的时候,就会直接使用本地的gradle,而不会再去GRADLE_USER_HOME查找下载了!

Gradle构建流程

通常来说,Gradle一次完整的构建过程通常分成如下 三个部分:
初始化阶段:首先,在初始化阶段 Gradle 会决定哪些项目模块要参与构建,并且为每个项目模块创建一个与之对应的 Project 实例。
配置阶段:然后,配置工程中每个项目的模块,并执行包含其中的配置脚本。
任务执行:最后,执行每个参与构建过程的 Gradle task。

详细可以参考:深度探索 Gradle 自动化构建技术(三、Gradle 核心解密)
文章写的非常好!建议阅读!

常用命令和配置

多版本多渠道打包
这个就不在赘述了,之前有篇文章总结过,需可以查看:
Android Gradle 多版本多APK打包,修改生成APK名称

另外在设置不同的编译类型变量时,比如设置不同的baseUrl地址,也可以这样写:

buildTypes {
    ...
	preRelease {
	    initWith(release)
	    buildConfigField "String", "BASE_URL", "\"https://xxxxxxxx/\""
	}
}

我们在使用的时候,直接使用BuildConfig.BASE_URL即可!
使用 exclude 来排除三方库中某些不需要或者是重复的依赖
比如之前常见的v4包冲突

implementation ('com.xx.xx:XXX:1.0.0') {
    exclude group: 'com.android.support' 
}

命令

./gradlew projects #从root从上往下列出所有的project
./gradlew tasks #列出项目中所有的任务
./gradlew dependencies #列出项目中所有的依赖

./gradlew clean #clean,相当于清空build文件夹
./gradlew build #编译打包
./gradlew installDebug #编译并安装debug包

./gradlew assembleDebug #编译并打所有渠道的debug包
./gradlew assemble #编译并打所有渠道的debug,release包
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值