Android 建構系統會編譯應用程式資源、原始碼和套件 將其整合至 APK 或 Android App Bundle,供您測試、部署、簽署 發布內容。
Android Studio 會使用進階建構工具包 Gradle 自動執行 以及管理建構程序,同時可讓您定義 建構設定每項建構設定都能定義自己的一組程式碼 同時重複使用所有應用程式版本中共用的部分 Android Gradle 外掛程式可與建構工具包搭配運作,提供 專門用於建構及測試的流程和可調整設定 Android 應用程式。
Gradle 和 Android Gradle 外掛程式會獨立於 Android Studio 之外執行。這個 表示您可以在 Android Studio 中建構 Android 應用程式 安裝到機器,或 Android Studio 未安裝的電腦 例如持續整合伺服器
如果您不是使用 Android Studio,您可以瞭解如何建構及執行應用程式: 指令列。建構作業的輸出內容 透過指令列、遠端電腦或 Android Studio。
注意:由於 Gradle 和 Android Gradle 外掛程式會執行 此外,您需要更新建構工具 。請參閱版本資訊,瞭解如何更新 Gradle 和 Android Gradle 外掛程式
使用靈活的 Android 建構系統,讓您 建構設定,不必修改應用程式的核心來源檔案。這個 頁面將帶您瞭解 Android 建構系統的運作方式和 這項功能可協助您自訂及自動執行多個建構設定。如果發生以下情況: 如要進一步瞭解如何部署應用程式,請參閱「建立並執行應用程式」。如要開始建立自訂出價策略,請按照下列步驟操作: 建構設定 請參閱「設定建構作業 子類。
建構程序
建構程序涉及許多工具和程序,可以轉換您的專案 附加至 Android 應用程式套件 (APK) 或 Android App Bundle (AAB)。
Android Gradle 外掛程式會為您執行大部分的建構程序,但 瞭解建構程序的某些方面,以便您調整 滿足您的需求
不同專案可能會有不同的建構目標。舉例來說 第三方程式庫會產生 Android Archive (AAR) 或 Java Archive (JAR) 程式庫 不過,應用程式是最常見的專案類型,也是應用程式的建構項目。 專案會產生偵錯或發布的應用程式 APK 或 AAB,供您部署 進行測試或發布給外部使用者
本頁著重於應用程式開發。 但是許多建構步驟和概念皆常見於多數建構類型。
Android 建構詞彙表
Gradle 和 Android Gradle 外掛程式可協助您設定下列切面 包括:
- 建構類型
-
建構類型可定義 Gradle 在建構和建構時使用的特定屬性 封裝您的應用程式建構類型通常會為 開發生命週期的階段
例如:偵錯建構類型 啟用偵錯選項,並使用偵錯金鑰簽署應用程式,而 發布子版本類型可能會縮減、模糊化,並以發布版本簽署應用程式 的索引鍵。
您至少必須定義一個建構類型 建構應用程式Android Studio 會建立偵錯和發布建構類型 根據預設。如要開始為應用程式自訂封裝設定,請瞭解如何 來設定建構 類型。
- 變種版本
- 變種版本代表應用程式的不同版本,您可以 例如免費和付費版本你可以 自訂變種版本,在分享時使用不同的程式碼和資源 並重複使用所有應用程式版本中通用的部分產品 變種版本是選用項目,必須手動建立。開始製作 Shorts 請參閱這篇文章 變種版本
- 建構變數
- 建構變數是建構類型和變種版本與 是 Gradle 用於建構應用程式的設定。透過建構變數 開發人員可以在開發過程中建立變種版本的偵錯版本 以及經過簽署的變種版本發行版本。 雖然您無法直接設定建構變數,但可以設定 建構類型和變種版本正在建立其他版本 或變種版本也會產生額外的建構變數。學習 如要瞭解如何建立及管理建構變數,請參閱「設定建構變數」 總覽。
- 資訊清單項目
- 您可以指定在建構時資訊清單檔案的部分屬性值 變化版本設定這些建構值會覆寫 資訊清單檔案中如果您想要產生多個變化版本 使用不同的應用程式名稱、最低 SDK 版本,或 目標 SDK 版本當存在多個資訊清單時,資訊清單 合併工具 合併資訊清單設定。
- 依附元件
- 建構系統可管理本機檔案系統的專案依附元件 以及遠端存放區因此您不必手動 搜尋、下載及複製依附元件的二進位套件 專案目錄詳情請參閱新增建構項目 依附元件
- 簽署
- 建構系統可讓您在建構系統中指定簽署設定 而且可在建構期間自動簽署應用程式 上傳資料集之後,您可以運用 AutoML 自動完成部分資料準備工作建構系統會使用預設金鑰簽署偵錯版本,並 憑證,避免在建構過程中顯示密碼提示 讓應用程式從可以最快做出回應的位置 回應使用者要求除非您準備好,否則建構系統不會簽署發布版本 明確定義這項建構作業的簽署設定。如果您不 如果已擁有發布金鑰,可按照「簽署應用程式」一文中所述的方式產生金鑰,已簽署的發布子版本 用於透過大部分的應用程式商店發行應用程式。
- 程式碼和資源縮減
- 建構系統可讓您指定 每個建構變數都沒問題建構應用程式時,建構系統會套用 縮減資源 建構程式碼和資源,以使用 R8 等內建的縮減工具。 縮減程式碼和資源有助於縮減 APK 或 AAB 的大小。
- 支援多個 APK
- 您可以透過建構系統自動建構 每個容器中都只包含 的特定螢幕密度或應用程式二進位檔介面 (ABI)。 如需詳細資訊,請參閱 建立多個 APK。不過,發布單一 AAB 的做法的做法很像 是我們建議的方法,因為除了支援語言,您還可以根據語言進行拆分 同時降低需要 但請放心所有在 2021 年 8 月後提交的新應用程式 都必須使用 AAB。
Android 建構作業中的 Java 版本
無論原始碼是以 Java 和 Kotlin 編寫, 有幾個地方必須選擇 JDK 或 Java 語言 專屬版本請參閱「Android 版本中的 Java 版本」一文 。
建構設定檔
建立自訂建構設定時,您需要變更其中一個或 更多建構設定檔這些 純文字檔會使用網域特定語言 (DSL) 來描述 透過 Kotlin 指令碼, 這是 Kotlin 語言的變種版本您也可以使用 Groovy,這是一個 使用動態語言來設定建構。
您不需要瞭解 Kotlin 指令碼或 Groovy 就能開始設定 因為 Android Gradle 外掛程式推出了大部分的 DSL 元素 需求。如要進一步瞭解 Android Gradle 外掛程式 DSL,請參閱 DSL 參考說明文件。 Kotlin 指令碼也需要使用 基礎 Gradle Kotlin DSL。
啟動新專案時,Android Studio 會自動建立 並根據合理預設值填入這些檔案專案 檔案結構的結構如下:
└── MyApp/ # Project ├── gradle/ │ └── wrapper/ │ └── gradle-wrapper.properties ├── build.gradle(.kts) ├── settings.gradle(.kts) └── app/ # Module │ ├── build.gradle(.kts) │ ├── build/ │ ├── libs/ │ └── src/ │ └── main/ # Source set │ ├── java/ │ │ └── com.example.myapp │ ├── res/ │ │ ├── drawable/ │ │ ├── values/ │ │ └── ... │ └── AndroidManifest.xml
有些 Gradle 建構設定檔屬於 Android 應用程式的標準專案結構事前準備 請務必瞭解建構範圍和用途 各個檔案及其定義的基本 DSL 元素
Gradle 包裝函式檔案
Gradle 包裝函式 (gradlew
) 是隨附於
下載並啟動 Gradle 本身的原始碼。
這能夠建立更一致的建構執行作業。開發人員下載
應用程式原始碼並執行 gradlew
。這個指令會下載必要的 Gradle
並啟動 Gradle 來建構應用程式。
gradle/wrapper/gradle-wrapper.properties
檔案
包含 distributionUrl
屬性,用於說明
Gradle 用於執行建構作業。
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Gradle 設定檔
settings.gradle.kts
檔案 (適用於 Kotlin DSL) 或
settings.gradle
檔案 (用於 Groovy DSL) 位於根目錄
專案目錄這個設定檔定義了專案層級的存放區
並告知 Gradle 在建構
應用程式。多模組專案須指明應加入
最終的版本。
在大多數專案中,預設的檔案內容如下所示:
Kotlin
pluginManagement { /** * The pluginManagement.repositories block configures the * repositories Gradle uses to search or download the Gradle plugins and * their transitive dependencies. Gradle pre-configures support for remote * repositories such as JCenter, Maven Central, and Ivy. You can also use * local repositories or define your own remote repositories. The code below * defines the Gradle Plugin Portal, Google's Maven repository, * and the Maven Central Repository as the repositories Gradle should use to look for its * dependencies. */ repositories { gradlePluginPortal() google() mavenCentral() } } dependencyResolutionManagement { /** * The dependencyResolutionManagement.repositories * block is where you configure the repositories and dependencies used by * all modules in your project, such as libraries that you are using to * create your application. However, you should configure module-specific * dependencies in each module-level build.gradle file. For new projects, * Android Studio includes Google's Maven repository and the Maven Central * Repository by default, but it does not configure any dependencies (unless * you select a template that requires some). */ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() } } rootProject.name = "My Application" include(":app")
Groovy
pluginManagement { /** * The pluginManagement.repositories block configures the * repositories Gradle uses to search or download the Gradle plugins and * their transitive dependencies. Gradle pre-configures support for remote * repositories such as JCenter, Maven Central, and Ivy. You can also use * local repositories or define your own remote repositories. The code below * defines the Gradle Plugin Portal, Google's Maven repository, * and the Maven Central Repository as the repositories Gradle should use to look for its * dependencies. */ repositories { gradlePluginPortal() google() mavenCentral() } } dependencyResolutionManagement { /** * The dependencyResolutionManagement.repositories * block is where you configure the repositories and dependencies used by * all modules in your project, such as libraries that you are using to * create your application. However, you should configure module-specific * dependencies in each module-level build.gradle file. For new projects, * Android Studio includes Google's Maven repository and the Maven Central * Repository by default, but it does not configure any dependencies (unless * you select a template that requires some). */ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() } } rootProject.name = "My Application" include ':app'
頂層建構檔案
頂層 build.gradle.kts
檔案 (適用於 Kotlin DSL) 或
build.gradle
檔案 (用於 Groovy DSL) 位於根目錄
專案目錄通常會定義常用外掛程式版本
依專案中的模組排序
以下程式碼範例說明 建立新專案後的頂層建構指令碼:
Kotlin
plugins { /** * Use `apply false` in the top-level build.gradle file to add a Gradle * plugin as a build dependency but not apply it to the current (root) * project. Don't use `apply false` in sub-projects. For more information, * see Applying external plugins with same version to subprojects. */ id("com.android.application") version "8.6.0" apply false id("com.android.library") version "8.6.0" apply false id("org.jetbrains.kotlin.android") version "1.9.23" apply false }
Groovy
plugins { /** * Use `apply false` in the top-level build.gradle file to add a Gradle * plugin as a build dependency but not apply it to the current (root) * project. Don't use `apply false` in sub-projects. For more information, * see Applying external plugins with same version to subprojects. */ id 'com.android.application' version '8.6.0' apply false id 'com.android.library' version '8.6.0' apply false id 'org.jetbrains.kotlin.android' version '1.9.23' apply false }
模組層級建構檔案
模組層級 build.gradle.kts
(適用於 Kotlin DSL) 或
build.gradle
檔案 (用於 Groovy DSL) 位於
project/module/
目錄內。您可以透過瀏覽器
調整其所在模組的建構設定。設定中
建構設定讓您可以使用自訂封裝選項,例如
也可以覆寫
main/
應用程式資訊清單或頂層建構指令碼。
Android SDK 設定
應用程式的模組層級建構檔案包含各項設定,用於指出 編譯、選取平台行為和 並指定執行應用程式的最低版本
-
compileSdk
-
compileSdk
會判斷 Android 和 Java API 可在編譯原始碼時使用使用最新版 Android 就必須使用最新的 Android SDK 編譯。部分 Android 平台 API 可能無法使用 以及先前的 API 級別你可以 有條件地保護使用新功能或 AndroidX 相容性程式庫,可在較低階的情況下使用新功能 Android API 級別。
每個 Android SDK 都提供了一部分的 Java API,可用於應用程式。 的桌位 我可以在 Java 或 Kotlin 原始碼中使用哪些 Java API 會根據 Android SDK 版本,顯示可用的 Java API 級別。 透過下列方式,舊版 Android 皆支援新版 Java API 脫糖,因此必須 在建構中啟用的功能
如果
compileSdk
發生衝突,Android Studio 會顯示警告 使用最新版本的 Android Studio、AGP 或專案的程式庫 依附元件需求 -
minSdk
-
minSdk
會指定您的 Android 最低版本 希望您的應用程式支援哪些方面設定minSdk
會限制哪些 就能安裝您的應用程式。支援舊版 Android 時,可能需要進行更多條件檢查 ,或多次使用 AndroidX 相容性程式庫。請 以及支援較低版本的維護成本 仍在使用舊版服務的使用者百分比詳情請參閱 Android Studio 「New project」精靈中的版本圖表 瞭解目前的版本使用百分比
在 Android Studio 中編輯程式碼,或在測試期間執行檢查時 您的建構時,Lint 會警告你使用的 API 無法使用
minSdk
。請盡快到 以便符合使用新功能的條件Appcompat
,以達到回溯相容性。 -
targetSdk
-
targetSdk
有兩個用途:- 這會設定應用程式的執行階段行為。
- 用於證明你已通過測試的 Android 版本。
如果您的裝置搭載的 Android 版本高於
targetSdk
,Android 會以相容模式執行應用程式 運作方式與您在 Pod 中targetSdk
。舉例來說,當 API 23 導入了執行階段 但並非所有應用程式都準備好立即採用 如果將targetSdk
設為 22,這些應用程式就能執行 沒有使用執行階段權限的 API 23 裝置,而且可以使用相關功能 包含在最新的compileSdk
版本中。Google Play 強制執行 目標 API 級別的其他政策。targetSdk
的值必須小於或等於 與compileSdk
的相符。
注意:compileSdk
和 targetSdk
的值
可以不必相同請留意下列基本原則:
compileSdk
可讓您使用新的 APItargetSdk
會設定應用程式的執行階段行為targetSdk
必須小於或等於compileSdk
應用程式模組建構指令碼範例
這個 Android 應用程式模組建構指令碼範例概述了 基本 DSL 元素和設定:
Kotlin
/** * The first section in the build configuration applies the Android Gradle plugin * to this build and makes the android block available to specify * Android-specific build options. */ plugins { id("com.android.application") } /** * Locate (and possibly download) a JDK used to build your kotlin * source code. This also acts as a default for sourceCompatibility, * targetCompatibility and jvmTarget. Note that this does not affect which JDK * is used to run the Gradle build itself, and does not need to take into * account the JDK version required by Gradle plugins (such as the * Android Gradle Plugin) */ kotlin { jvmToolchain(11) } /** * The android block is where you configure all your Android-specific * build options. */ android { /** * The app's namespace. Used primarily to access app resources. */ namespace = "com.example.myapp" /** * compileSdk specifies the Android API level Gradle should use to * compile your app. This means your app can use the API features included in * this API level and lower. */ compileSdk = 33 /** * The defaultConfig block encapsulates default settings and entries for all * build variants and can override some attributes in main/AndroidManifest.xml * dynamically from the build system. You can configure product flavors to override * these values for different versions of your app. */ defaultConfig { // Uniquely identifies the package for publishing. applicationId = "com.example.myapp" // Defines the minimum API level required to run the app. minSdk = 21 // Specifies the API level used to test the app. targetSdk = 33 // Defines the version number of your app. versionCode = 1 // Defines a user-friendly version name for your app. versionName = "1.0" } /** * The buildTypes block is where you can configure multiple build types. * By default, the build system defines two build types: debug and release. The * debug build type is not explicitly shown in the default build configuration, * but it includes debugging tools and is signed with the debug key. The release * build type applies ProGuard settings and is not signed by default. */ buildTypes { /** * By default, Android Studio configures the release build type to enable code * shrinking, using minifyEnabled, and specifies the default ProGuard rules file. */ getByName("release") { isMinifyEnabled = true // Enables code shrinking for the release build type. proguardFiles( getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" ) } } /** * The productFlavors block is where you can configure multiple product flavors. * This lets you create different versions of your app that can * override the defaultConfig block with their own settings. Product flavors * are optional, and the build system does not create them by default. * * This example creates a free and paid product flavor. Each product flavor * then specifies its own application ID, so that they can exist on the Google * Play Store, or an Android device, simultaneously. * * If you declare product flavors, you must also declare flavor dimensions * and assign each flavor to a flavor dimension. */ flavorDimensions += "tier" productFlavors { create("free") { dimension = "tier" applicationId = "com.example.myapp.free" } create("paid") { dimension = "tier" applicationId = "com.example.myapp.paid" } } /** * To override source and target compatibility (if different from the * toolchain JDK version), add the following. All of these * default to the same value as kotlin.jvmToolchain. If you're using the * same version for these values and kotlin.jvmToolchain, you can * remove these blocks. */ //compileOptions { // sourceCompatibility = JavaVersion.VERSION_11 // targetCompatibility = JavaVersion.VERSION_11 //} //kotlinOptions { // jvmTarget = "11" //} } /** * The dependencies block in the module-level build configuration file * specifies dependencies required to build only the module itself. * To learn more, go to Add build dependencies. */ dependencies { implementation(project(":lib")) implementation("androidx.appcompat:appcompat:1.7.0") implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) }
Groovy
/** * The first line in the build configuration applies the Android Gradle plugin * to this build and makes the android block available to specify * Android-specific build options. */ plugins { id 'com.android.application' } /** * Locate (and possibly download) a JDK used to build your kotlin * source code. This also acts as a default for sourceCompatibility, * targetCompatibility and jvmTarget. Note that this does not affect which JDK * is used to run the Gradle build itself, and does not need to take into * account the JDK version required by Gradle plugins (such as the * Android Gradle Plugin) */ kotlin { jvmToolchain 11 } /** * The android block is where you configure all your Android-specific * build options. */ android { /** * The app's namespace. Used primarily to access app resources. */ namespace 'com.example.myapp' /** * compileSdk specifies the Android API level Gradle should use to * compile your app. This means your app can use the API features included in * this API level and lower. */ compileSdk 33 /** * The defaultConfig block encapsulates default settings and entries for all * build variants and can override some attributes in main/AndroidManifest.xml * dynamically from the build system. You can configure product flavors to override * these values for different versions of your app. */ defaultConfig { // Uniquely identifies the package for publishing. applicationId 'com.example.myapp' // Defines the minimum API level required to run the app. minSdk 21 // Specifies the API level used to test the app. targetSdk 33 // Defines the version number of your app. versionCode 1 // Defines a user-friendly version name for your app. versionName "1.0" } /** * The buildTypes block is where you can configure multiple build types. * By default, the build system defines two build types: debug and release. The * debug build type is not explicitly shown in the default build configuration, * but it includes debugging tools and is signed with the debug key. The release * build type applies ProGuard settings and is not signed by default. */ buildTypes { /** * By default, Android Studio configures the release build type to enable code * shrinking, using minifyEnabled, and specifies the default ProGuard rules file. */ release { minifyEnabled true // Enables code shrinking for the release build type. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } /** * The productFlavors block is where you can configure multiple product flavors. * This lets you create different versions of your app that can * override the defaultConfig block with their own settings. Product flavors * are optional, and the build system does not create them by default. * * This example creates a free and paid product flavor. Each product flavor * then specifies its own application ID, so that they can exist on the Google * Play Store, or an Android device, simultaneously. * * If you declare product flavors, you must also declare flavor dimensions * and assign each flavor to a flavor dimension. */ flavorDimensions "tier" productFlavors { free { dimension "tier" applicationId 'com.example.myapp.free' } paid { dimension "tier" applicationId 'com.example.myapp.paid' } } /** * To override source and target compatibility (if different from the * tool chain JDK version), add the following. All of these * default to the same value as kotlin.jvmToolchain. If you're using the * same version for these values and kotlin.jvmToolchain, you can * remove these blocks. */ //compileOptions { // sourceCompatibility JavaVersion.VERSION_11 // targetCompatibility JavaVersion.VERSION_11 //} //kotlinOptions { // jvmTarget = '11' //} } /** * The dependencies block in the module-level build configuration file * specifies dependencies required to build only the module itself. * To learn more, go to Add build dependencies. */ dependencies { implementation project(":lib") implementation 'androidx.appcompat:appcompat:1.7.0' implementation fileTree(dir: 'libs', include: ['*.jar']) }
Gradle 屬性檔案
Gradle 也包含兩個屬性檔案,位於根專案內 目錄,可用於指定 Gradle 建構工具包的設定 :
-
gradle.properties
- 您可以在這裡調整專案層級的 Gradle 設定,例如 Gradle Daemon 的堆積大小上限。詳情請參閱「建構環境」。
-
local.properties
-
設定建構系統的本機環境屬性,包括
包括:
ndk.dir
- 到 NDK 的路徑。這個房源已 已淘汰。系統會將任何下載的 NDK 版本安裝在 Android SDK 目錄中的ndk
目錄。sdk.dir
- Android SDK 的路徑。cmake.dir
- 到 CMake 的路徑。ndk.symlinkdir
- 在 Android Studio 3.5 以上版本中, 建立指向 NDK 的符號連結,其長度可能會比已安裝的應用程式短 NDK 路徑。
將 NDK 重新映射到較短的路徑 (僅限 Windows)
在 Windows 中,已安裝 NDK 資料夾中的工具 (例如 ld.exe
) 最終會
長路徑這些工具無法妥善支援長路徑。
如要建立較短的路徑,請在 local.properties
中設定屬性
ndk.symlinkdir
:要求 Android Gradle 外掛程式建立指向
NDK該符號連結的路徑可能會比現有 NDK 資料夾的路徑短。
例如,ndk.symlinkdir = C:\
會產生以下符號連結:
C:\ndk\19.0.5232133
將專案與 Gradle 檔案同步處理
變更專案中的建構設定檔時 Android Studio 會要求您同步處理專案檔案,以便 匯入建構設定變更,並執行部分檢查,確保 不會產生建構錯誤
如要同步處理專案檔案,請按一下「同步項目」中的
進行變更時顯示的通知列,如
圖 1,或按一下「Sync Project」
。如果 Android Studio 發現您的
即原始碼使用的 API 功能
可用的 API 級別高於 compileSdkVersion
—「Messages」視窗說明問題。
來源集
Android Studio 會按照邏輯將所有模組的原始碼和資源分組
「來源集」。當您建立新模組時,Android Studio
在模組內建立 main/
來源集。模組的
main/
來源集包含其所有
建構變數。
其他來源集目錄為選用項目,Android
設定新的建構作業時,Studio 不會自動建立
子類不過,建立類似於 main/
的來源集有助於
整理 Gradle 只有在建構特定項目時才能使用的檔案和資源
的應用程式版本
-
src/main/
- 此來源集包含所有建構變數共用的程式碼和資源。
-
src/buildType/
- 建立此來源集,納入僅用於特定用途的程式碼和資源 建構類型
-
src/productFlavor/
-
建立此來源集,納入僅用於特定用途的程式碼和資源
變種版本
注意:如果您將建構設定為合併多個項目 變種版本,您就可以為每個變種版本建立來源集目錄 不同版本維度之間的變種版本「組合」:
src/productFlavor1ProductFlavor2/
。 -
src/productFlavorBuildType/
- 建立此來源集,納入僅用於特定用途的程式碼和資源 建構變數
例如,如要產生「fullDebug」新的應用程式版本 建構系統會合併下列來源集的程式碼、設定和資源:
-
src/fullDebug/
(建構變數來源集) -
src/debug/
(建構類型來源集) -
src/full/
(變種版本來源集) -
src/main/
(主要來源集)
注意:在 Android 中建立新檔案或目錄時 在 Studio 中依序選取「File」(檔案) >「File」(檔案) 新增選單選項 並套用至特定來源集可供選擇的來源集 而 Android Studio 就會自動建立 所需的目錄 (如果目前不存在)。
如果不同的來源集包含同一個檔案的不同版本,Gradle 決定要使用的檔案時,會按照下列優先順序排列。資料來源 左側的設定會覆寫來源集的檔案和設定 右:
建構變數 > 建構類型 > 變種版本 > 主要來源集 > 程式庫依附元件
這樣一來,Gradle 就能使用您的建構變數所專屬的檔案 重複使用活動、應用程式邏輯和 安裝同一套資源。
合併多個項目時 資訊清單,Gradle 使用相同的優先順序,因此每個建構變數都能 並在最終資訊清單中定義不同的元件或權限學習 如要進一步瞭解如何建立自訂來源集,請參閱「建立來源集」。
版本目錄
如果您建構的多個模組含有通用依附元件,或者 擁有多項獨立專案,但彼此之間具有共同的依附元件, 您使用 版本目錄或材料清單 (BOM) 指定通用版本
其他建構系統
使用 Bazel 建構 Android 應用程式 但不正式受到支援Android Studio 尚未正式 支援 Bazel 專案
如要進一步瞭解使用 Bazel 進行建構的目前限制,請參閱 已知問題。