遷移免安裝應用程式來支援 Android App Bundle

如果您仍在使用已淘汰 Feature Android Gradle 外掛程式 (com.android.feature) 須使用 Android 免安裝應用程式模組 改為使用基本應用程式外掛程式 (com.android.application) 動態功能外掛程式 (com.android.dynamic-feature)。

在 Android Gradle 外掛程式 3.3.0 以上版本中,基本應用程式外掛程式提供支援 快速體驗也就是說,如果基本應用程式模組符合 才能享有免安裝體驗。 接著您就可以加入其他功能,讓使用者隨選下載,例如 運用動態功能外掛程式提供免安裝體驗這麼一來 讓使用者可以透過單一平台 同時讓您從 Google 合作夥伴 Android App Bundle

下表更具體說明遷移目標外掛程式:

模組說明 舊版外掛程式 目前的外掛程式
包含基本程式碼、資源和功能的模組 安裝您的應用程式 com.android.feature (和baseFeature = true) com.android.application

注意:這個模組包含所有資訊清單 建構及封裝應用程式為 Android 所需的簽署資訊 應用程式套件或 APK。

其他模組功能,可讓使用者隨選下載 com.android.feature com.android.dynamic-feature (和 「dist:instant="true"」和 dist:onDemand="false" )
功能的程式碼和資源 (僅適用於已安裝的版本) com.android.application com.android.dynamic-feature (和 dist:instant="false"dist:onDemand="false" 部分)。

本頁面說明如何遷移現有的免安裝應用程式專案,以便建立 免安裝即用 Android App Bundle。它也會說明如何 發布免安裝即用 Android App Bundle。

如果您要為應用程式建立新的免安裝體驗,請改為參閱 建立免安裝即用功能模組

瞭解異動內容

當您遷移專案,改為使用動態功能外掛程式時, Android App Bundle 可讓您透過全新方式建構及發布應用程式 可大幅簡化將最佳化 APK 發行到應用程式 使用者。

應用程式套件會將應用程式的所有編譯程式碼封裝起來,藉此簡化發行程序 但會延後產生及簽署 APK 的作業,以及改進 Google Play 的簽署程序。 隨後,Google Play 新的應用程式提供模型就會採用 這個應用程式套件,為每位使用者的裝置產生並提供最佳化 APK 因此只會下載執行程式碼時所需的程式碼和資源 您不必再建構、簽署及管理多個 APK 提供支援 因為使用者不但檔案較小,還會下載量更少的內容。

使用現已淘汰的功能外掛程式時,必須建構免安裝應用程式 建立基本功能模組,其中包含共用程式碼和資源 。程式碼的其餘部分 同時包含在多個非基本功能模組中,其中包含進入點 享受極致的免安裝體驗根據應用程式的安裝版本, 專案可能包含獨立的應用程式模組 已安裝應用程式所需的活動量。

如果您將應用程式遷移至支援 Android App Bundle,那麼您的應用程式模組 收回基本模組的角色,而由您管理其他已安裝或 做為功能模組的免安裝體驗這表示您的專案數量已增加 與標準應用程式專案非常類似,包含免安裝即用的基本模組 並能納入額外的模組化免安裝體驗

遷移現有的免安裝應用程式專案,並採用 Android App Bundle 建議您按照下列各節所述步驟操作 。

將基本功能模組轉換為應用程式模組

您必須先編輯基本功能模組的 build.gradle 檔案 將其轉換為主要應用程式模組,如下所示:

  1. 刪除 baseFeature true 行。
  2. 移除使用 featureapplication 依附元件的所有依附元件 儲存空間設定

    Groovy

    dependencies {
        ...
        // delete any lines that look like
        // feature project(":foo")
        // feature project(":bar")
        // application project(":app")
    }
    

    Kotlin

    dependencies {
        ...
        // delete any lines that look like
        // feature(project(":foo"))
        // feature(project(":bar"))
        // application(project(":app"))
    }
    
  3. 移動 applicationId 和您所需的任何其他建構指令碼設定 應位於基本應用程式模組中 com.android.application 模組到 com.android.feature 模組。只有部分通知 範例如下所示。這個步驟需要您 build.gradle 設定,但複製及貼上 android 可能比較簡單 前一個應用程式模組的 build.gradle 區塊至新應用程式 模組的 build.gradle 檔案。不過,執行這個步驟時 例如

    Groovy

    android {
        ...
        defaultConfig {
            // You need to move the application ID from the app module
            // to your feature module.
            applicationId "com.example.myapp"
            ...
        }
        // Some additional build configurations you might want to
        // copy from your current ‘app’ module may include ProGuard
        // rules and code shrinking settings.
        buildTypes {
            release {
                minifyEnabled true
                proguardFiles getDefaultProguardFile(
                  'proguard-android-optimize.txt'),
                  'proguard-rules.pro'
            }
        }
    }
    

    Kotlin

    android {
        ...
        defaultConfig {
            // You need to move the application ID from the app module
            // to your feature module.
            applicationId = "com.example.myapp"
            ...
        }
        // Some additional build configurations you might want to
        // copy from your current ‘app’ module may include ProGuard
        // rules and code shrinking settings.
        buildTypes {
            getByName("release") {
                minifyEnabled = true
                proguardFiles(
                    getDefaultProguardFile("proguard-android-optimize.txt"),
                    "proguard-rules.pro"
                )
            }
        }
    }
    
  4. 新增適當的套件,將功能模組標示為免安裝即用 發布標記到資訊清單,如下所示。

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="true" />
        ...
    </manifest>
    
  5. 變更外掛程式,將功能模組轉換為基本應用程式模組 輸入至 com.android.application

    Groovy

    // Replace  "plugins { id 'com.android.feature' }"
    // with the following
    plugins {
      id 'com.android.application'
    }
    

    Kotlin

    // Replace  "plugins { id("com.android.feature") }"
    // with the following
    plugins {
        id("com.android.application")
    }
    

將舊的應用程式模組轉換為安裝期間功能模組

如果舊的應用程式模組中沒有任何程式碼或資源 因為上一節的步驟會轉換您的 整合至應用程式的基本應用程式模組中。

不過,如果您在舊應用程式模組中,有 您希望使用者安裝應用程式時 按照本節的步驟將應用程式模組轉換為功能模組。

建立功能模組涉及將外掛程式類型從 從 com.android.applicationcom.android.dynamic-feature,以及幾行 其他 build.gradle 變更,如下:

  1. 將外掛程式類型從 com.android.application 變更為 com.android.dynamic-feature

    Groovy

    // Replace "plugins { id 'com.android.feature' }"
    // with the following:
    plugins {
      id 'com.android.dynamic-feature'
    }
    

    Kotlin

    // Replace "plugins { id("com.android.application") }"
    // with the following:
    plugins {
        id("com.android.dynamic-feature")
    }
    
  2. 如上一節所述,請確認您已移動建構 設定 com.android.application 外掛程式所需的 基本應用程式模組,例如 applicationIdproguardFiles 規則。

  3. 將模組重新命名為「install_feature」如下所示:

    1. 依序選取「View」>「View」,開啟「Project」窗格工具視窗 >專案。
    2. 在功能模組上按一下滑鼠右鍵,然後選取「重構」重構 >重新命名
    3. 在隨即顯示的對話方塊中,選取「Rename module」,然後按一下「OK」
    4. 輸入模組的新名稱,然後按一下「OK」
  4. 與步驟 3 類似,重新命名您在前一個步驟中建立的應用程式模組 連至「應用程式」之類的影片

  5. 在功能中的「應用程式」模組中新增實作依附元件 模組的 build.gradle 檔案,如下所示。

    Groovy

    dependencies {
        ...
        // In the feature module, add an implementation dependency
        // on the base app module.
        implementation project(":app")
    }
    

    Kotlin

    dependencies {
        ...
        // In the feature module, add an implementation dependency
        // on the base app module.
        implementation(project(":app"))
    }
    
  6. 將這項功能新增至新應用程式模組的 build.gradle 檔案。

    Groovy

    android {
        ...
        // In the base app module, specify each feature module.
        dynamicFeatures = [":installed_feature"]
    }
    

    Kotlin

    android {
        ...
        // In the base app module, specify each feature module.
        dynamicFeatures.addAll(listOf(":installed_feature"))
    }
    
  7. 在功能模組的資訊清單中,將功能模組標示為 安裝這個可安裝的模組,方法是在 資訊清單。

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="false" dist:onDemand="false"
                dist:title="@string/title_dynamic_feature">
            <dist:fusing dist:include="true" />
        </dist:module>
        ...
    </manifest>
    

將其他功能模組轉換為免安裝即用功能模組

如果您已將應用程式的其他功能模組化為多項功能 請按照本節的步驟轉換這些模組 轉換為免安裝即用功能模組

針對專案中其餘的功能模組,按照以下步驟進行轉換 轉換為免安裝即用功能

  1. build.gradle 檔案中的外掛程式類型變更為 com.android.dynamic-feature,如下所示:

    Groovy

    // Replace 'com.android.feature' with 'com.android.dynamic-feature'
    plugins {
      id 'com.android.dynamic-feature'
    }
    

    Kotlin

    // Replace "com.android.feature" with "com.android.dynamic-feature"
    plugins {
        id("com.android.dynamic-feature")
    }
    
  2. 新增下列程式碼,將各個功能模組標示為免安裝即用 加入資訊清單

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="true" dist:onDemand="false"
                dist:title="@string/title_dynamic_feature">
            <dist:fusing dist:include="true" />
        </dist:module>
        ...
    </manifest>
    
  3. 將功能模組新增至新應用程式模組的 build.gradle 檔案 其中,您已將 installed_feature 新增至功能模組清單。

    Groovy

    android {
       ...
       dynamicFeatures = [":installed_feature", ":feature_1", ":feature_2"]
       // or whichever name exists for the instant enabled feature module
    }
    

    Kotlin

    android {
       ...
       dynamicFeatures.addAll(listOf(":installed_feature", ":feature_1", ":feature_2"))
       // or whichever name exists for the instant enabled feature module
    }
    

建構、測試及發布新的免安裝即用應用程式套件

完成本頁中的步驟後,您的專案就能產生 單一構件是 Android App Bundle 可用來同時發布 安裝與免安裝版本至 Google Play 管理中心 為免安裝和已安裝測試群組分別建立。此外,應用程式 套件後,您可以享有提供最佳化 APK 的優勢。 因此使用者只需下載程式碼 執行應用程式所需的資源也就是說,您不再需要建構、簽署 並管理多個 APK 來支援不同的裝置,使用者也更小 更優異的下載體驗

如要開始建構及測試免安裝即用應用程式套件,請前往 建構應用程式套件