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

您可以將這項功能納入 Android App Bundle,即可建立 Google Play 免安裝體驗。這類套件稱為免安裝即用的應用程式套件。本文件說明如何為免安裝即用應用程式套件設定開發環境,以及如何設定、建構、測試及發布免安裝即用應用程式套件。

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

設定開發環境

如要在應用程式套件中提供免安裝體驗,您必須存取 Google Play 免安裝開發 SDK。您可以使用下列其中一種方法安裝 SDK:

  • 安裝 Android Studio 3.6 以上版本。開啟 Android Studio 後,從 SDK Manager 的「SDK Tools」分頁下載 Google Play 免安裝開發 SDK。
  • 從指令列安裝:

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

此外,如果您想在本機測試免安裝體驗,您可以存取實體或「虛擬」裝置。

瞭解必要的執行條件

Google Play 免安裝功能會在特殊的 SELinux 沙箱中執行免安裝即用應用程式套件,提升安全性。這個沙箱允許使用部分權限,以及有限的與其他應用程式互動類型。以下各節會詳細說明這個沙箱的特性。

支援的權限和作業

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

處理常見的不支援權限

以下清單列出您必須從應用程式移除的常見不支援權限,以及每個權限的建議遷移路徑:

  • ACCESS_WIFI_STATE:使用 ACCESS_NETWORK_STATE,其應提供與 ACCESS_WIFI_STATE 類似的資訊。
  • BILLING:這是已淘汰的權限。使用不再需要 com.android.vending.BILLING 權限的 Google Play 帳款服務程式庫
  • 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_SENDTOACTION_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 管理中心,將兩個變化版本上傳至同一個應用程式。

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

更新目標沙箱版本

免安裝應用程式的 AndroidManifest.xml 檔案需要更新,才能以 Google Play 免安裝功能支援的沙箱環境為目標。您可以在應用程式的 <manifest> 元素中加入 android:targetSandboxVersion 屬性,完成這項更新,如以下程式碼片段所示:

<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>
    
  • 如果現有的應用程式套件包含多個模組,可以建立免安裝即用功能模組。這個程序也可以為應用程式的基本模組啟用免安裝即用功能,方便您選擇支援應用程式中的多個免安裝進入點

新增登入支援功能

如果您提供免安裝體驗讓使用者登入,則免安裝即用應用程式套件必須在 Android 裝置上支援密碼專用 Smart Lock。如果您要建構「立即玩」遊戲,請改用 Google Play 遊戲服務登入功能。

支援執行環境

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

  • 請勿提供 myUid() 的值,該值是應用程式程序的核心指派 UID
  • 如果應用程式指定的是 Android 8.1 (API 級別 27) 以下版本,請建立網路安全性設定檔案,並將 cleartextTrafficPermitted 設為 false。免安裝體驗不支援 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) 以上版本的裝置,且您的應用程式指定 2targetSandboxVersion,則使用者資料會自動轉移至應用程式的完整版本。否則,您必須手動轉移資料。方法是使用下列其中一個 API:

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

建構應用程式套件

您可以使用 Android Studio 或指令列介面建構支援免安裝功能的應用程式套件。

Android Studio

在 Android Studio 中,您可以依序選取「Build」>「Build Bundle(s) / APK(s)」>「Build Bundle(s)」建構應用程式套件。如要進一步瞭解如何建構專案,請參閱「建構專案」。

指令列介面

您也可以使用 Gradle 從指令列建構應用程式套件

支援 64 位元架構

在 Google Play 上發布的應用程式必須支援 64 位元架構。為應用程式新增 64 位元版本,不僅能提升效能,還能為使用僅限 64 位元硬體的裝置提前做好準備。進一步瞭解 64 位元支援機制

測試免安裝體驗

在發布免安裝即用應用程式套件之前,您可以從下列其中一個位置測試免安裝體驗,以便驗證功能:

Android Studio

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

  1. 如果測試裝置上已有安裝的應用程式版本,請解除安裝。
  2. 在 Android Studio 中,從「General」「General」分頁「Run/Debug Configurations」對話方塊顯示的安裝選項中,Deploy as Instant app核取方塊。
  3. 在選單列中依序選取「Run」>「Run」,或在工具列中按一下「Run」圖示 ,接著選擇要測試應用程式免安裝體驗的裝置。系統會在您選擇的測試裝置上載入應用程式的免安裝體驗。

指令列介面

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

  1. 如果測試裝置上已有安裝的應用程式版本,請解除安裝。
  2. 輸入下列指令,在測試裝置上側載及執行免安裝應用程式:
ia run output-from-build-command

內部測試群組

如要從 Play 商店或網站上的橫幅測試應用程式的免安裝體驗,請將應用程式發布到 Play 管理中心的內部測試群組

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

  1. 按照「將應用程式套件上傳至 Play 管理中心」指南中的步驟上傳應用程式套件。
  2. 將已上傳的套件準備至內部測試群組。詳情請參閱如何準備及推出版本支援文章。
  3. 在裝置上登入內部測試人員帳戶,然後透過下列任一途徑啟動免安裝體驗:

    • 在應用程式 Play 商店資訊中,點選「立即試用」按鈕。
    • 應用程式網站上橫幅的連結。

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

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

  1. 如果您尚未使用版本金鑰簽署應用程式套件,然後將應用程式套件上傳至 Play 管理中心,請先完成這項操作。
  2. 在 Play 管理中心內,依序開啟「版本管理」>「Android 免安裝應用程式」,然後前往即時應用程式正式版測試群組。
  3. 選取「Update from Library」,然後選取已上傳的免安裝即用應用程式套件。

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

您可以針對使用者能安裝應用程式的特定國家/地區,啟動應用程式的免安裝體驗。如果您想向特定國家/地區的使用者宣傳應用程式的免安裝體驗,這項功能就能派上用場。

其他資源

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

影片:即時繫結應用程式
參加 2018 年 Android 開發人員高峰會的這場講座,瞭解如何為 Android App Bundle 新增免安裝體驗。
影片:透過 Android App Bundle 發布較小的應用程式
瞭解應用程式套件如何協助您加快應用程式開發速度,為使用者建立較小的 APK。
程式碼研究室:第一個 Android App Bundle
這份逐步指南說明如何建立 Android App Bundle 及新增功能。
Android App Bundle 格式
進一步瞭解 bundletool 指令列程式如何從應用程式的程式碼和資源整理應用程式套件。