赞
踩
之前在多版本多渠道打包,还有混淆相关的文章中对gradle相关的内容有一部分的了解,但是没有系统综合的总结过相关的知识内容,这里就一些碰到的问题做一下总结!
Gradle是一个开源的自动化构建工具,被应用在AS中去构建我们的Android项目,代替了之前Eclipse中的ant。首先我们要明确一点,Gradle不是一种语言,它使用的是Groovy语言,关于Groovy,这里不多说,想要了解的可以查阅一些资料。
好像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官网这个页面查看:版本对应关系
这里以最新的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 会决定哪些项目模块要参与构建,并且为每个项目模块创建一个与之对应的 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包
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。