模块化是应用程序开发中的一种技术,它允许我们将功能分离到独立的模块中。模块化应用程序为每个模块都有许多build.gradle文件。因此,我们需要管理其中的依赖项。目标是使依赖声明更加整洁和富有表现力。此外,简化库的维护。
我们将依赖于一个名为buildSrc的特殊模块。按照以下步骤操作:
1. 使用Kotlin DSL作为构建脚本,创建一个新的Android Studio项目。
2. 在项目的主文件夹中创建名为buildSrc的新文件夹。此文件夹将成为适应所有依赖项的模块。
3. 在buildSrc创建多个文件夹和文件,所以结构如下:
buildSrc
├── src
│ └── main
│ ─└── java
│ ──└── Dependencies.kt
├── build.gradle.kts
4.在build.gradle.kts文件中添加Kotlin DSL插件:
plugins {
`kotlin-dsl`
}
repositories {
jcenter()
}
5.通过执行Gradle同步来激活插件。
6.接下来在Dependencies.kt文件中,我们将所有依赖项及其版本声明为多个对象。我们还可以按类型对对象进行分组。这样代码看起来更整洁。例如:
private const val kotlinVersion = "1.3.31"
private const val androidGradleVersion = "3.4.0"
//support libs
private const val appcompatVersion = "1.0.0"
private const val constraintLayoutVersion = "1.1.3"
//test libs
private const val junitVersion = "4.12"
private const val runnerVersion = "1.1.0"
private const val espressoVersion = "3.1.0"
object Dependencies{
object Android {
val minSdkVersion = 21
val targetSdkVersion = 28
val compileSdkVersion = 28
val applicationId = "com.dicoding.app"
val versionCode = 1
val versionName = "0.1"
}
object Kotlin{
val kotlin_std = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"
}
object BuildPlugins {
const val androidGradle = "com.android.tools.build:gradle:$androidGradleVersion"
const val kotlinGradlePlugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
}
object SupportLibs{
val appcompat = "androidx.appcompat:appcompat:$appcompatVersion"
val constraint_layout = "androidx.constraintlayout:constraintlayout:$constraintLayoutVersion"
}
object TestLibs{
val junit = "junit:junit:$junitVersion"
val espresso = "androidx.test.espresso:espresso-core:$espressoVersion"
val runner = "androidx.test:runner:$runnerVersion"
}
}
7.现在我们就可以在应用build.gradle中使用所需依赖项,例如:
implementation(Dependencies.Kotlin.kotlin_std)
implementation(Dependencies.SupportLibs.appcompat)
implementation(Dependencies.SupportLibs.constraint_layout)