What is Gradle?
翻译自:Gradle官方文档-What is gradle?
概述
Gradle是一个被设计得很灵活的用来构建任意类型软件的开源构建工具
- 良好的表现
Gradle实现了很多优化,比如避免不必要的工作,只运行改变了的输入输出,以及缓存重用机制
- 以JVM为基础
Gradle运行在JVM上,所以很容易跨平台,或者使用标准Java API来自定义Task或者Plugin
- 约定
Gradle也具有Maven的优点,能够通过约定很容易构建项目。也能重写,自定义,添加自己的Task
- 扩展性
你可以很容易扩展Gradle来实现自己的任务。就比如Android的Flavors
- IDE的支持
主流的IDE都支持,比如Android Studio, IntelliJ IDEA, Eclipse和NetBeans,在Visual Studio上也可以,不过要去生成解决方案文件
- 洞察力
构建失败时会提供对应的日志信息,帮助你很快的解决问题
文件结构
gradle-wrapper.jar 是根据具体业务实现的 jar 包
gradle-wrapper.properties,用来下载上述包,其中各配置的含义:
//Gradle存储的主目录,GRADLE_USER_HOME 一般指.gradle下目录 distributionBase=GRADLE_USER_HOME distributionPath //相对于distributionBase解压后压缩包的路径 zipStoreBase //相对于distributionBase存放Gradle压缩包的 zipStorePath //相对于distributionPath存放Gradle压缩包的 distributionUrl //Gradle的下载地址,一般是官网地址
其中
gradlew和
gradlew.bat分别是 Linux 和 Window 下的可执行脚本,也依赖于gradle-wrapper.jar包执行相关操作
setting.gradle主要用来配置当前工程模块,只有在 settings.gradle 文件中配置的子 Module 才会被构建
Gradle插件
分为二进制插件和脚本插件
二进制插件
引入方式:
apply plugin:'java-library' // 或者 plugins { id 'java-library' }
地址:在本地
.gradle
举例:例如
'com.android.application' 是一个
com.android.application.properties 文件,实现了
Plugin 接口其中的这些android,comileSdk等等,都是
'com.android.application'中规定好的
android { compileSdk 33 defaultConfig { applicationId "com.example.myapplication" minSdk 21 targetSdk 33 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } }
脚本插件
脚本文件可以是本地的也可以是网络上的脚本文件,脚本插件要使用到关键字 from
本地插件引入方式:
//version.gradle文件 ext{ versionName = "1.0" versionCode = 1 }
//build.gradle文件 apply from: 'version.gradle' task taskVersion{ doLast{ println "版本是{versionCode}" } }
网络插件引入方式:
buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.1' } }
Gradle基础配置
buildTypes { release { //... } debug{ // 配置签名 signingConfig signingConfigs.debug // 配置在当前构建类型下applicationId的后缀,构建生成Apk的包名会在applicationId的基础上添加后缀 applicationIdSuffix '.debug' // 配置是否生成一个可供调试的Apk denbuggable true // 配置是否生成一个可供调试jni(c/c++)代码的Apk jniDebuggable true // 是否启用proguard混淆 minifyEnabled true // 配置当程序中方法数超过65535个时,是否启用自动拆分多个dex的功能, multiDexEnabled true // 配置proguard混淆使用的配置文件,可配置对个混淆文件 proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro' // 配置是否自动清理未使用的资源,默认为false shrinkResources true // 开启zipalign优化,整理优化 apk 文件,降低内存,提高速度 zipAlignEnabled true // 增加自定义buildConfig字段 buildConfigField 'String' ,'URL','"www.baidu.com"' } }
多渠道打包
Flavors将各个渠道一一打包(官方)
productFlavors {//渠道包 app_vx { applicationId xxx versionCode xxx versionName xxx flavorDimensions "main" manifestPlaceholders = [channel: "app_vx", app_name:'vx渠道版', app_icon: "@mipmap/logo"]} app_qq { manifestPlaceholders = [channel: "app_qq", app_name:'qq渠道版', app_icon: "@mipmap/logo"]} }
迁移到Kotlin