iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0

Day 12 提到如何宣告儲存庫(repositories)。

而之所以要宣告儲存庫,是因為我們所使用的依賴項,在構建過程中會從宣告好的儲存庫裡去下載引用。
https://ithelp.ithome.com.tw/upload/images/20230927/20151956cMHsjL1saP.png
[圖1:配置/設定(Configurations)基於指定目的來使用已宣告的依賴項(dependencie)]

我們先來個簡略的理解。Gradle 透過設定,在構建過程中進行編譯原始碼、執行測試
在做這 2 件事時,Gradle 透過網路上的二進位儲存庫(Binary Repository)來解析依賴項,以便完成這 2 件事。

今天先側重在 圖1 的右半邊。

再看一遍 Day 9 整理好的 settings.gradle,
可以看到儲存庫(repositories)還是有重複的區塊。
我們來看看為什麼要這樣宣告儲存庫。

settings.gradle

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:專案名稱)

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 外掛程式版本資訊


上一篇
[Day 12] 宣告 repositories
下一篇
[Day 14] repositories 與 dependencies 之間的關係 - 續
系列文
[Android] 怎麼蓋地基?論 build.gradle 與它的快樂夥伴們30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言