建構設定

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
}