Android 开发
build.gradle.kts
配置解读
首先清楚一点,Gradle 是一个构建工具,面向开发者的脚本语言是 Groovy 和 Kotlin,Groovy 脚本对应 build.gradle,Kotlin 脚本对应 build.gradle.kts
在 Gradle 中,大量配置都是通过脚本语言来进行编写的,所以不管是 Groovy 还是 Kotlin,最后表现都是 DSL(Domain Specific Language) 领域特定语言
plugins 配置
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
}
这个配置是在 Gradle
构建脚本中,声明了两个插件,插件名是 com.android.application
(用于支持和构建 Android
应用程序所需的基本配置和任务)和 org.jetbrains.kotlin.android
(用于支持Android
项目中使用 Kotlin
语言)
[!注意]
plugin
有 id 三个参数配置项:
id
: 调用的是PluginDependenciesSpec
中的id(String id)
函数,返回PluginDependencySpec
对象,PluginDependencySpec
对象可以理解为是PluginDependenciesSpec
的一层封装,version
和apply
被封装在此对象中
version
:插件的版本号,第三方插件需要提供版本号
apply
: 是否将插件应用于当前项目以及其子项目,默认是true
,这个是用来解决控制依赖传递的
android 配置
android {
namespace = "com.example.trytounderstand"
compileSdk = 34
buildFeatures {
viewBinding = true
}
defaultConfig {
applicationId = "com.example.trytounderstand"
minSdk = 24
targetSdk = 34
versionCode = 1
versionName = releaseTime()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables{
useSupportLibrary = true
}
}
buildTypes {
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"
}
buildFeatures {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = "1.5.1"
}
packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
}
}
android
是用于配置 Android
应用程序的属性和设置。比如说(应用程序包名,编译的SDK版本,默认配置信息,构建类型,Kotlin版本等)
namespace = "com.example.trytounderstand"
这个属性指定了android
应用程序的命名空间,这个通常是应用程序的包名,用于唯一标识应用程序。complieSdk = 34
指定用于编译应用程序的 Android SDK 版本。在这里,应用程序将使用 API 版本 34 进行编译。buildFeatures { viewBinding = true }:
启用了视图绑定功能。视图绑定允许通过生成的绑定类直接引用布局文件中的视图,而无需使用findViewById
方法。defaultConfig{...}
这是默认的应用程序配置模块- applicationId = “com.example.trytounderstand”: 应用程序的包名,唯一标识该应用程序。
- minSdk = 24: 应用程序的最低支持的 Android 版本,即运行该应用程序所需的最低 API 级别。
- targetSdk = 34: 应用程序被设计和测试的目标 Android 版本。
- versionCode = 1: 用于标识应用程序版本的整数值,每次发布新版本时必须递增。
- versionName = releaseTime(): 应用程序的版本名称,通常是可读的字符串。在这里,它调用了一个函数
releaseTime()
来获取版本名称。
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
:- 指定用于运行测试的测试仪器运行器。在这里,它是
AndroidJUnitRunner
,用于运行基于JUnit
的测试。
- 指定用于运行测试的测试仪器运行器。在这里,它是
vectorDrawables { useSupportLibrary = true }
:- 配置矢量图标的支持。在这里,它启用了对矢量图标的支持,并使用了支持库(support library)。
buildTypes
:- 这个部分用于配置不同的构建类型,例如 “release” 或 “debug”。在这里,只定义了 “release” 构建类型。
isMinifyEnabled = false
: 禁用代码混淆,这是一种安全性手段,但在调试和分析时可能会带来困难。proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
: 指定ProGuard
配置文件,用于代码压缩和混淆。这里使用了一个默认的 Android 优化配置文件和一个自定义的规则文件。代码混淆就是吧代码中的类和方法以及字段等符号重新命名为没有意义的名字,使得反编译之后的代码难以阅读,属于天机工程了属于是。
compileOptions:
- 用于配置 Java 编译选项。
sourceCompatibility = JavaVersion.VERSION_1_8
: 指定源代码的 Java 版本兼容性,这里设置为 Java 8。targetCompatibility = JavaVersion.VERSION_1_8
: 指定生成的字节码的目标 Java 版本兼容性,也设置为 Java 8。
kotlinOptions
:- 用于配置
Kotlin
编译选项。 jvmTarget = "1.8"
: 指定生成的Kotlin
字节码的目标 JVM 版本,这里设置为 JVM 8。
- 用于配置
buildFeatures:
- 包含一些构建特性的配置。
compose = true
: 启用Jetpack Compose
,这是一种用于构建 Android 用户界面的声明性 UI 工具包。
composeOptions
:- 包含有关 Jetpack Compose 的特定配置。
- kotlinCompilerExtensionVersion = “1.5.1”: 指定使用的 Kotlin 编译器扩展版本。
packaging
:- 用于配置构建输出的打包选项。
- resources { excludes += “/META-INF/{AL2.0,LGPL2.1}” }: 排除特定的资源文件,这里排除了指定路径下的一些文件,通常用于处理第三方库的冲突或不必要的资源。