构建gradle文件(settings.gradle/.kts,build.gradle/.kts和gradle.properties)在Android Studio中用于初学者
Build Gradle是Android Studio中用于构建Android应用程序的构建工具。它可以写在Groovy script或Kotlin script(KTS)中。 KTS比Groovy更新,最终将取代Groovy。
构建Gradle的高级功能
-
读取应用程序的构建配置/脚本 s(settings.gradle/settings.gradle.kts and build.gradle/build.gradle.gradle.kts)
-
下载和caches应用程序的依赖项从您在settings.gradle/settings.gradle.kts
中指定的存储库中
-
将应用程序的源代码(Java或Kotlin)编译到Java字节码中,然后是Dalvik Bytecode。
-
将dalvik字节码和资源包装到APK(Android软件包)或Android App Bundle
中
要执行上面的所有这些功能,需要以下Gradle构建配置/脚本文件
-
settings.gradle/setings.gradle.kts(root Directory)
-
build.gradle/build.gradle.kts(root Directory)
-
gradle。属性(根目录)
-
build.gradle/build.gradle.kts(模块目录 - 例如App Directory)
下面的所有代码示例基于Kotlin脚本(KTS)。
settings.gradle/settings.gradle.kts
settings.gradle/settings.gradle.kts的主要目的是提供存储库,这些存储库指定您的应用程序所需的插件和依赖项。
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven ("https://jitpack.io")
}
}
rootProject.name = "New Empty Compose App"
include ("app")
插件管理
它配置了可以从gradlePluginPortal()
,google()
和mavenCentral()
解析/下载插件的存储库。所有这些都是设置存储库位置的函数调用。
什么是插件?插件为build.gradle/build.gradle.kts提供任务/函数以构建您的android应用
-
gradlePluginPortal()
设置了位于plugins.gradle.org的存储库。 Kotlin Android插件(org.jetbrains.kotlin.android
)是此存储库中提供的示例。 ca -
google()
设置了位于maven.google.com的存储库。 Android应用程序项目插件(com.andoird.application
)和 Android Library Project 插件(com.android.library
)是此存储库中提供的2个常见插件。 -
mavenCentral()
设置了位于repo.maven.apache.org的存储库,该存储库是一个流行的存储库。大多数应用程序可能不需要这个,但是将其留在这里是一个很好的做法。 -
maven()
设置自定义存储库。在上面的示例中,https://jitpack.io
是自定义存储库。要添加另一个自定义存储库,只需使用自定义存储库URL再次致电maven()
。
依赖解决方案管理
它配置了您的代码可以从中下载和解析库的存储库。例如,您的代码使用某些库,这些库的源代码在这些存储库中托管。
什么是依赖性?依赖项是您
import
作为源代码中的软件包的库。
-
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
告诉Gradle如果有任何特定于项目的存储库,则使构建失败。这是为了防止另一个如果他/她没有正确的本地存储库设置,可能无法构建该项目的开发人员。 -
与插件相同,
google()
设置了maven.google.com存储库,而mavenCentral()
设置了repo.maven.apache.org存储库。它们没有提供插件任务,而是为您的代码提供依赖关系(库)。androidx。*(Android JetPack库)是托管在
google()
存储库中的库的示例。您可能无法删除mavenCentral()
,因为它与google()
存储库高度耦合。
rootproject。姓名
这是您的根项目名称,可以是任何名称。
包括()
这包括您想要构建的子标记/模块。通常,app
模块很常见。如果您已经实现了本地库,则也在此处包括它们。
你可以做这个
include ("app", "buildutils")
或
include ("app")
include ("buildutils")
build.gradle / build.gradle.kts(root / project)
这定义了所有模块使用的核心插件。
plugins {
id("com.android.application") version "7.4.2" apply false
id("com.android.library") version "7.4.2" apply false
id("org.jetbrains.kotlin.android") version "1.8.10" apply false
}
如果您不知道,这里的功能是infix notation。它可以作为
重写
plugins {
id("com.android.application").version("7.4.2").apply(false)
id("com.android.library").version("7.4.2").apply(false)
id("org.jetbrains.kotlin.android").version("1.8.10").apply(false)
}
我认为这更容易理解。
-
id()
-插件唯一ID -
version()
-插件版本 -
apply()
-在此项目级别应用此插件。通常,您不会在根项目级别上应用插件。您将插件应用于模块级别。
-
com.android.application
-插件构建android应用程序(例如默认应用模块) -
com.android.library
-插件构建android库,如果您不构建Android库,则可以将其删除,但在此处保留
没有损害 -
org.jetbrains.kotlin.android
-插件以启用项目中的Kotlin支持。
gradle。属性(根 /项目)
“gradle。properties”文件用于定义gradle构建脚本的属性和全局变量。以下是一些典型的例子:
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
android.useAndroidX=true
kotlin.code.style=official
android.nonTransitiveRClass=true
-
-Xmx2048m
-将最大堆大小设置为Java虚拟机的2048m字节 -
Dfile.encoding=UTF-8
-将编码的文件设置为UTF -8 -
android.useAndroidX=true
-使用较新的Android支持库,即Androidx -
kotlin.code.style=official
-在编译和格式化Kotlin代码 时执行“官方” Kotlin代码指南
-
android.nonTransitiveRClass=true
-告诉Android构建工具为您的项目生成非传递R类。r类包含对所有资源(例如图像,布局和字符串)
的引用传递r类表示它在您的代码依赖的所有库/模块中包括对所有资源的参考。
非传递R类仅包含对项目中使用的资源的引用。因此,它大大降低了应用程序包大小。
build.gradle/build.gradle.kts(应用模块)
这是一个示例build.gradle/.kts在应用模块中,该模块由plugins {}
,android {}
和dependencies {}
块组成。
plugins {
id ("com.android.application")
id ("org.jetbrains.kotlin.android")
}
android {
namespace = "vtsen.hashnode.dev.newemptycomposeapp"
compileSdk = 33
defaultConfig {
applicationId = "vtsen.hashnode.dev.newemptycomposeapp"
minSdk = 21
targetSdk = 33
versionCode = 1
versionName = "1.0"
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.4.3"
}
packagingOptions {
resources {
excludes.add("/META-INF/{AL2.0,LGPL2.1}")
}
}
}
dependencies {
/*...*/
implementation("androidx.compose.material3:material3:1.1.0-alpha04")
/*...*/
}
所有这些块(例如
plugins {}
,android {}
,dependencies {}
等)都是使用trailing lambda和function literal with receiver实施的域特定语言(DSL)。
插件{}块
类似于root项目中的build.gradle/.kts,这在此模块中应用了插件。它不需要明确调用version()
,因为它已经在Root Project中指定了。 apply(true)
也不需要,因为默认情况下它是真的。
android {}块
这定义了特定于Android平台的属性。
-
namespace
-该项目的名称空间,所有生成的代码均基于此命名空间。 -
compileSdk
-Gradle使用API级别来编译您的应用程序(通常与targetSdk)
相同
DefaultConfig {}块
这指定了项目的默认配置。
-
applicationId
-用于在设备或Google Play商店中标识您的应用的唯一ID。 -
minSdk
-应用程序运行所需的最低API级 -
targetSdk
- API级别该应用程序的设计和测试(通常与compileSdk
相同)
可以在此处找到有关 这使您可以为应用程序定义不同的构建配置。默认情况下,已经有发布和调试构建变体。您可以通过在此 设置一个新项目时,这里有一些默认的版本构建变体构建配置。从技术上讲,您不需要它,我想它是您的参考。 “ proguard-android-optimize.txt” 是专门用于构建Android应用的默认代码优化规则。 “ proguard-rules。pro”是您可以应用的自定义proguard规则。 这指定了与编译Java代码有关的选项。 kotlinoptions {}块 这指定了与编译Kotlin代码有关的选项。 如果您在此处未指定任何编译 / kotlin选项,则将使用默认值,对于构建Gradle插件的不同版本可能会有所不同。< / p>
从技术上讲,JVM适用于桌面应用。对于Android应用程序,运行时称为Dalvik虚拟机(DVM),已被Android Runtime(ART)代替。 如果您对Android应用的Kotlin编译过程感到好奇,则可以阅读本文。 这是特定于Android构建系统的,它允许您启用某些功能。 这指定与JetPack组成汇编有关的选项 这指定了某些资源以排除在Android软件包-APK或Android Bundle文件中。 在上面的示例中,它不包括以下许可证文件: */meta-inf/al2.0 */meta-inf/lgpl2.1 目的是减少Android包装文件大小。 这声明需要您的代码的依赖关系/库。 如果您在Android项目中没有使用的依赖项,则最好将其删除。这可以帮助减少Android软件包(APK/ Android捆绑包)的大小并改善构建时间。 p>
好吧,构建Gradle文件似乎有些复杂,尤其是对于初学者而言。如果您挖得更深一些,那就不难理解了。所有构建脚本示例均取自此基本的Jetpack Compose app template,它是Android Studio中新项目生成的空酸化的清理版本。 最初出版于https://vtsen.hashnode.dev 。minSdk
, targetSdk
和 compileSdk
的更多信息。
versionCode
-代表您应用程序版本versionName
-代表应用程序的用户可见版本的字符串值。它可以是任何字符串,但通常基于testInstrumentationRunner
-指定库以运行仪器测试vectorDrawable
-set“ useupportlibrary = true” 启用对矢量的应用程序
buildTypes {}块
buildTypes {}
块中调用release {}
和debug {}
来覆盖默认值。
isMinifyEnabled
-当将其设置为true时,它可以在构建过程中启用代码缩小和混淆(即代码优化),从而降低了应用程序大小。proguardFiles
-指定在构建过程中使用用于优化代码的proguard规则文件。
编译{}块
sourceCompatiblity
-指定您的代码使用的Java版本。targetCompatiblity
-指定您的代码将在上执行的Java运行时版本。
jvmTarget
-指定您的代码将被编译的Java虚拟机(JVM)版本。简而言之,它将您的代码编译到与您指定的JVM版本兼容的字节代码。
buildfeatures {}块
compose
-设置此true启用JetPack组合,默认情况下关闭。
composeoptions {}块
kotlinCompilerExtensionVersion
-指定组合编译器版本
包装{}块
resources
-指定包装过程中应处理的资源集
依赖项{}块
implementation
-指定应包含在Android软件包(APK/ Android Bundle)中的库版本。 li>
结论