本文正在参与「金石计划」
Gradle介绍
Gradle是一种基于JVM的构建东西,广泛应用于Java和Android项目中。相比于传统的构建东西,如Ant和Maven,Gradle具有愈加灵敏的构建脚本和更高效的构建过程,使得开发人员可以愈加轻松地管理杂乱的项目。
在Android中运用Gradle编译项目
在Android开发中,咱们通常运用gradle进行构建,需要重视的文件有以下几个。
- build.gradle:Gradle的构建脚本,界说了项目的使命、依靠联系和其他构建相关的装备。这个称号的文件在咱们项目中有2个,一个是项目等级的,另一个则是模块等级(通常是app模块)的。项目等级的build.gradle类似于这样。 而app模块的build.gradle类似于这样。 由于我用的是kts文件,所以你有可能会有点不习惯。运用kts文件的原因主要是由于有代码提示。假如你想作为一个gradle脚本的深度玩家或者是项目的leader,必定要玩好gradle脚本,且主张转成kts。后边我会解说根本的kts转换模版。
- settings.gradle:Gradle的装备文件,界说了项目的称号、子项目和其他装备。settings.gradle大概长这样。
- gradle.properties:Gradle的特点文件,界说了一些全局的特点,如运用某些特性、构建环境等。properties便是咱们常用的特点文件,界说了一些键值对,这些特点可以直接被gradle读取。
gradle文件向kts文件改造
app模块的build.gradle。
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
}
android {
namespace = "com.example.myapplication"
compileSdk = 33
defaultConfig {
applicationId = "com.example.myapplication"
minSdk = 21
targetSdk = 33
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
getByName("release") {
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
compileOptions {
sourceCompatibility(JavaVersion.VERSION_1_8)
targetCompatibility(JavaVersion.VERSION_1_8)
}
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
implementation("androidx.core:core-ktx:1.7.0")
implementation("androidx.appcompat:appcompat:1.6.0")
implementation("com.google.android.material:material:1.8.0")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
}
项目等级的build.gradle。
plugins {
id("com.android.application") version("7.3.1") apply(false)
id("com.android.library") version("7.3.1") apply(false)
id("org.jetbrains.kotlin.android") version("1.7.20") apply(false)
}
settings.gradle。
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "My Application"
include(":app")
gradle常用的指令
由于gradle是一个脚本程序,咱们通常也在指令行中运用到它。比方常用的指令包含:
- gradle tasks:检查项目中所有可用的使命。
- gradle clean:清空项目的构建输出目录。
- gradle build:构建项目,生成可履行的Jar包或APK包。
- gradle assemble:构建项目,生成项目的发布版本。
- gradle run:运转项目的主程序。
- gradle test:运转项目的测试程序。
- gradle dependencies:检查项目的依靠联系。 咱们用得最多的非assemble打包指令莫属了。如gradle assembleDebug、gradle assembleRelease、gradleXxxRelease。
gradle的生命周期
gradle的运转生命周期包含三个阶段,Initialization、Configuration、Execution。翻译成中文便是初始化阶段、装备阶段和履行阶段。初始化阶段检测settings.gradle文件,装备阶段整理每个项目和子项目的使命列表。 点这个长得像大象的按钮就会触发前两个阶段。然后咱们履行指令如gradle assembleDebug,就会履行有必定依靠联系的使命了。所以咱们追加到打包流程中的task是在装备阶段现已安排好履行的次序。
怎样自界说task
转成了kts,咱们写代码就方便了,有代码提示,完美,先自界说一个简略的task试试!
tasks.register("helloTask") {
dependsOn(":app:assembleDebug")
println("hello task")
doLast {
println("last hello task")
}
doFirst {
println("first hello task")
}
}
注册一个名叫helloTask的使命,这个使命依靠打debug包的使命,所以这个使命履行完,包也打完了。让一个使命依靠另一个使命运用dependsOn,在这个使命之前或之后还可以履行一些使命,咱们运用doLast和doFirst。
将task打包成插件
运用gradle脚本,咱们还可以在打包时做很多其他的事情。咱们开发好的使命,假如想复用,那就要界说一个插件了。
class HelloPlugin : Plugin<Project> {
override fun apply(project: Project) {
project.task("hello task") {
doLast {
println("Hello JYM")
}
}
}
}
apply<HelloPlugin>()
这样咱们就理解了那些apply的插件怎样来的。
总结
说到底咱们仍是要把kotlin语言学透啊,俗话说得好,学好kotlin,走遍安卓项目都不怕!咱们把gradle学好,不仅可以理解整个打包的流程,还能优化打包流程。所以,开端玩gradle吧!Go ahead!