Gradle

141 阅读3分钟

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上也可以,不过要去生成解决方案文件

  • 洞察力

构建失败时会提供对应的日志信息,帮助你很快的解决问题

文件结构

image.png 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 "版本是versionName,版本号是{versionName},版本号是{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

blog.linshen.me/posts/trasf…