Day 12 提到如何宣告儲存庫(repositories)。
而之所以要宣告儲存庫,是因為我們所使用的依賴項,在構建過程中會從宣告好的儲存庫裡去下載引用。
[圖1:配置/設定(Configurations)基於指定目的來使用已宣告的依賴項(dependencie)]
我們先來個簡略的理解。Gradle 透過設定,在構建過程中進行編譯原始碼、執行測試。
在做這 2 件事時,Gradle 透過網路上的二進位儲存庫(Binary Repository)來解析依賴項,以便完成這 2 件事。
今天先側重在 圖1 的右半邊。
再看一遍 Day 9 整理好的 settings.gradle,
可以看到儲存庫(repositories)還是有重複的區塊。
我們來看看為什麼要這樣宣告儲存庫。
settings.gradle 檔案
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
maven { url "https://jitpack.io/" }
maven { url "https://jcenter.bintray.com" }
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
// APNG file for animation
maven { url "https://jitpack.io/" }
// 'io.github.youth5201314:banner:2.2.2' 依賴項 使用
maven { url "https://s01.oss.sonatype.org/content/groups/public" }
// 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1' 依賴項 使用
maven { url "https://jcenter.bintray.com" }
}
}
rootProject.name = "com.my.work"
include ':app'
build.gradle(Project:專案名稱) 檔案
buildscript {
ext.kotlin_version = "1.9.0"
dependencies {
classpath 'com.google.gms:google-services:4.3.15'
// Add the Crashlytics Gradle plugin.
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9'
// 修復錯誤: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE
classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:0.14.0'
}
}
plugins {
id 'com.android.application' version '7.0.4' apply false
id 'com.android.library' version '7.0.4' apply false
id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}
在 build.gradle(Project:專案名稱) 的 plugins{}
內,
id 'com.android.application'
id 'com.android.library'
id 'org.jetbrains.kotlin.android'
這 3 個東西便是我們的 Android Gradle 外掛程式/插件(plugins)。
所以,為了指定這些 Android Gradle 外掛程式/插件(plugins)的儲存庫,
我們才會在 settings.gradle 檔案裡另闢蹊徑,
使用 pluginManagement {}
來為這些插件宣告使用的儲存庫來源。
資料來源
Gradle - Declaring dependencies
Google for Devolopers - Android Gradle 外掛程式版本資訊