建立免安裝即用的應用程式套件

只要將 Google Play 免安裝體驗納入到您的應用程式中,即可打造該體驗 Android App Bundle。這種套裝組合稱為 免安裝即用的應用程式套件。本文件說明如何設定 開發免安裝即用應用程式套件的開發環境,以及如何 設定、建構、測試及發布免安裝即用應用程式套件。

如果您現有的免安裝應用程式專案使用已淘汰的功能 外掛程式 (com.android.feature)),瞭解如何 遷移免安裝應用程式以支援 Android App Bundle

設定開發環境

如要在應用程式套件中提供免安裝體驗,您需具備 Google Play 免安裝開發 SDK。您可以使用

  • 安裝 Android Studio 3.6 以上版本。開啟 Android Studio 後 從 SDK 工具下載 Google Play 免安裝開發 SDK SDK Manager 中的分頁。
  • 透過指令列安裝:

    cd path/to/android/sdk/tools/bin && \
      ./sdkmanager 'extras;google;instantapps'
    

此外,如要在本機測試免安裝體驗,請授予以下存取權: 實體或虛擬裝置。

瞭解必要的執行條件

Google Play 免安裝技術會透過特殊類型的 SELinux 沙箱以提升安全性。這個沙箱允許一部分的 權限,以及與其他應用程式的互動類型。 以下各節將詳細說明此沙箱的特性。

支援的權限和作業

免安裝即用的應用程式套件只能使用下列清單中的權限:

處理不支援的常見權限

下列是未支援的常見權限清單,您必須移除 ,以及下列每個項目的建議遷移路徑:

  • ACCESS_WIFI_STATE:使用 ACCESS_NETWORK_STATE,應提供 與「ACCESS_WIFI_STATE」相似的資訊
  • BILLING:此權限已淘汰。使用 Google Play 帳款服務程式庫, 而不再需要 com.android.vending.BILLING 權限。
  • READ/WRITE_EXTERNAL_STORAGE:免安裝應用程式無法存取外部 儲存空間;請改用內部儲存空間
  • com.google.android.c2dm.permission.RECEIVEpermission.C2D_MESSAGE: C2DM 已淘汰,遷移至 Firebase 雲端通訊 (FCM)。FCM 能 而且不需要任何其他權限就能運作

此外,免安裝即用應用程式套件無法執行下列操作:

已安裝應用程式的存取權

開發免安裝體驗時,請記住無法與 裝置上安裝的應用程式,除非符合下列任一情況:

  • 已安裝應用程式中的一或多項活動已設定 android:visibleToInstantApps 元素到 true - 此元素可用 以便支援搭載 Android 8.0 (API 級別 26) 以上版本的應用程式
  • 已安裝的應用程式含有意圖篩選器,其中包含 CATEGORY_BROWSABLE
  • 免安裝體驗會使用 ACTION_SENDACTION_SENDTO,或 ACTION_SEND_MULTIPLE 動作。

設定專案以提供免安裝體驗

如要與 Google Play 免安裝技術相容,必須設定多種 建議您仔細瞭解免安裝即用應用程式套件的各項功能。後續章節 說明這些考量

宣告專案依附元件

如要在應用程式中使用 Google Play 免安裝 API,請加入以下內容 宣告:build.gradle

Groovy

implementation "com.google.android.gms:play-services-instantapps:17.0.0"

Kotlin

implementation("com.google.android.gms:play-services-instantapps:17.0.0")

定義正確的版本代碼

應用程式免安裝體驗的版本代碼必須小於 安裝版應用程式的版本代碼。因為使用者從 Google Play 免安裝體驗 下載及安裝應用程式 他們的裝置。Android 架構會將這項轉換作業視為應用程式 更新。

為確保您遵守使用者預期的版本管理架構,請採用適用的 幾項策略

  • 從 1 開始重新計算 Google Play 免安裝體驗的版本代碼。
  • 將可安裝 APK 的版本代碼提高一個較大的數值 (例如 1000),以確保有足夠空間可以增加免安裝體驗的版本號碼。

您可以分別建立免安裝應用程式和安裝版應用程式 Android Studio 專案。但請注意,您必須執行下列操作: 在 Google Play 上發布應用程式:

  1. 在兩個 Android Studio 專案中使用相同的套件名稱。
  2. 在 Google Play 管理中心,將兩個變化版本上傳至同一個應用程式。

如要進一步瞭解如何設定應用程式版本,請參閱「管理 app

更新目標沙箱版本

您免安裝應用程式的 AndroidManifest.xml 檔案必須更新,才能指定 Google Play 免安裝功能支援的沙箱環境。可完成 只要將 android:targetSandboxVersion 屬性新增至應用程式的 <manifest> 元素,如以下程式碼片段所示:

<manifest
   xmlns:android="http://schemas.android.com/apk/res/android"
  ...
   android:targetSandboxVersion="2" ...>

詳情請參閱 targetSandboxVersion 屬性的說明文件。

宣告免安裝即用的應用程式模組

如要宣告應用程式套件支援免安裝體驗,您可以使用 方法如下:

  • 如果您現有的應用程式套件只包含基準 模組 應用程式套件:

    1. 從選單列中依序選取「View」>「Tool Windows」 >「Project」,開啟「Project」面板。
    2. 在基礎模組 (通常命名為「app」) 上按一下滑鼠右鍵,然後依序選取「Refactor」>「Enable Instant Apps Support」
    3. 畫面上會顯示對話方塊,請從當中的下拉式選單選取基礎模組。
    4. 按一下「OK」

    Android Studio 會將下列宣告新增至模組的資訊清單:

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="true" />
        ...
    </manifest>
    
  • 如果現有的應用程式套件包含多個模組,您可以 建立免安裝即用功能 模組。這項程序 也會為應用程式的基本模組啟用免安裝即用功能,您可以選擇支援 多個即時輸入項目 點 應用程式。

,瞭解如何調查及移除這項存取權。

新增登入功能

如果您的免安裝體驗可讓使用者登入,那屬於免安裝即用的應用程式 套件必須支援開啟密碼專用 Smart Lock Android:如果你是建構 「立即玩」遊戲 請改用 Google Play 遊戲服務登入。

支援執行環境

如要與執行免安裝體驗的 SELinux 沙箱相容, 建立免安裝即用應用程式套件時,請注意下列事項:

  • 不要分享 myUid() 的值, 這是應用程式程序的核心指派 UID
  • 如果您的應用程式指定 Android 8.1 (API 級別 27) 以下版本,請建立 網路安全性設定檔案 cleartextTrafficPermittedfalse。免安裝體驗不支援 HTTP 流量如果應用程式指定 Android 9 以上版本,明文流量將 預設停用。
  • 已下載的免安裝體驗會保留在使用者的裝置上,直到免安裝體驗快取遭到清除為止,系統會在出現下列情況時執行這項清除作業:

    • 裝置的可用記憶體不足,因此系統會將免安裝體驗快取收集為垃圾。
    • 使用者重新啟動裝置。

    如果發生以上任一情況,使用者必須重新下載免安裝體驗才能與其互動。

  • 如果系統的儲存空間即將用盡,很有可能會將免安裝體驗的使用者資料從內部儲存空間中移除。因此 建議您定期將使用者資料與應用程式伺服器同步處理,讓 使用者的進度會保留。

新增免安裝體驗工作流程的邏輯

將應用程式套件設定為支援免安裝體驗後,請新增 畫面就會顯示以下各節中的邏輯。

檢查應用程式是否執行免安裝體驗

如果應用程式的某些邏輯取決於使用者是否參與 建立例項時 isInstantApp()敬上 方法。如果目前執行的程序是免安裝體驗,這個方法會傳回 true

顯示安裝提示

如果您建立的是應用程式或遊戲的試用版,可以使用 Google Play 免安裝功能 即可顯示提示 免安裝體驗,邀請使用者在 裝置。如要顯示這則提示,請使用 InstantApps.showInstallPrompt()敬上 方法,如以下程式碼片段所示:

Kotlin

class MyInstantExperienceActivity : AppCompatActivity {
    // ...
    private fun showInstallPrompt() {
        val postInstall = Intent(Intent.ACTION_MAIN)
                .addCategory(Intent.CATEGORY_DEFAULT)
                .setPackage(your-installed-experience-package-name)

        // The request code is passed to startActivityForResult().
        InstantApps.showInstallPrompt(this@MyInstantExperienceActivity,
                postInstall, request-code, /* referrer= */ null)
    }
}

Java

public class MyInstantExperienceActivity extends AppCompatActivity {
    // ...
    private void showInstallPrompt() {
        Intent postInstall = new Intent(Intent.ACTION_MAIN)
                .addCategory(Intent.CATEGORY_DEFAULT)
                .setPackage(your-installed-experience-package-name);

        // The request code is passed to startActivityForResult().
        InstantApps.showInstallPrompt(MyInstantExperienceActivity.this,
                postInstall, request-code, /* referrer= */ null);
    }
}

將資料轉移至已安裝的體驗

如果使用者喜歡您的免安裝體驗 可能會考慮安裝 應用程式。為了提供良好的使用者體驗, 使用者資料從免安裝體驗轉移至 新的應用程式版本

如果使用者的裝置搭載 Android 8.0 (API 級別 26) 以上版本, 若您的應用程式指定 targetSandboxVersion 2,系統便會將使用者的資料 會自動切換至完整版應用程式否則,您就必須將 資料。方法是使用下列其中一個 API:

  • 如果使用者的裝置搭載 Android 8.0 (API 級別 26) 以上版本, 使用 Cookie API - 範例應用程式
  • 如果使用者在搭載 Android 7.1 的裝置上與您的體驗互動 (API 級別 25) 以下版本,新增對 Storage API 的支援 - 範例應用程式

建構應用程式套件

您可以使用 Android Studio 或指令列介面建立 免安裝即用應用程式套件。

Android Studio

在 Android Studio 中,您可以選取 建構 >建構套件 / APK >建構套件。如要進一步瞭解 若要瞭解如何建構專案,請參閱「建構專案」。

指令列介面

您也可以透過指令建立應用程式套件 使用 Gradle

支援 64 位元架構

在 Google Play 上發布的應用程式需要支援 64 位元架構。為應用程式新增 64 位元版本,不僅能提升效能,也能延伸支援只適用 64 位元硬體的裝置。進一步瞭解 64 位元架構支援機制

測試免安裝體驗

發布免安裝即用的應用程式套件之前,您可以在發布免安裝應用程式前進行測試 ,驗證該功能是否正常:

,瞭解如何調查及移除這項存取權。

Android Studio

如何使用 Android Studio 在本機電腦上測試應用程式的免安裝體驗, 請完成下列步驟:

  1. 如果您已在測試裝置上安裝應用程式版本,請解除安裝。 基礎架構
  2. 在 Android Studio 中,從以下安裝選項 執行/偵錯設定「一般」標籤 對話方塊中,啟用「Deploy as Instant」 app 核取方塊。
  3. 選取 執行 >在選單列中執行,或是在選單列中按一下執行 ,選擇要測試應用程式免安裝版本 這點十分重要應用程式的免安裝體驗會在測試裝置上載入

指令列介面

如要使用指令列在本機電腦上測試應用程式的免安裝體驗, 請完成下列步驟:

  1. 如果您已在測試裝置上安裝應用程式版本,請解除安裝。 基礎架構
  2. 輸入 以下指令:
,瞭解如何調查及移除這項存取權。
ia run output-from-build-command

內部測試群組

如何從 Play 商店測試應用程式的免安裝體驗,或 網站,請將應用程式發布到內部測試 軌道

如要將應用程式發布到內部測試群組,請完成下列步驟:

  1. 按照「上傳應用程式套件」一文中的步驟上傳應用程式套件 「Play 管理中心」指南。
  2. 備妥要在內部測試群組中發布版本的套件。適用對象 詳情請參閱有關如何準備與推出 版本
  3. 在裝置上登入內部測試人員帳戶,然後啟動免安裝應用程式 體驗:

    • 應用程式 Play 商店資訊中的「立即試用」按鈕。
    • 應用程式網站上橫幅的連結。
,瞭解如何調查及移除這項存取權。

將應用程式套件發布至正式版群組

如要發布免安裝即用應用程式套件,請完成下列步驟:

  1. 如果尚未簽署應用程式套件,請使用版本簽署應用程式套件 金鑰將應用程式套件上傳到 Play 管理中心
  2. 在 Play 管理中心開啟 [版本管理] > [版本管理]Android 免安裝應用程式,那麼 前往免安裝應用程式正式版群組。
  3. 選取「從程式庫更新」,然後選取免安裝即用的應用程式套件 上傳的圖片集

選擇免安裝體驗的發布位置

您可以在部分區域的應用程式中推出免安裝版本 能夠安裝應用程式的國家/地區。這項能力 想宣傳應用程式的免安裝體驗時 位於特定國家/地區組合的使用者。

其他資源

如要進一步瞭解如何建立免安裝體驗和 Android App Bundle,請參閱 以下資源:

影片:在免安裝應用程式中整合應用程式
歡迎閱讀以下文章,瞭解如何將免安裝體驗加入 Android App Bundle 。
影片:透過 Android App Bundle 發布較小的應用程式
瞭解應用程式套件如何協助您加快應用程式開發速度並打造應用程式 為使用者提供較小的 APK
程式碼研究室:您的第一個 Android App Bundle
這份逐步指南說明如何建立 Android App Bundle 及新增功能 。
Android App Bundle 格式
進一步瞭解 bundletool 指令列程式如何整理應用程式 整合應用程式的程式碼和資源。