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

警告:Google Play 免安裝應用程式將停止提供服務。2025 年 12 月起,您無法透過 Google Play 發布免安裝應用程式,且所有 Google Play 服務免安裝 API 都將停止運作。Play 不會再透過任何機制向使用者提供免安裝應用程式。

我們根據開發人員的意見,並持續投入資源改善 Google Play Instant 推出後的生態系統,做出這項變更。

如要持續促進使用人數成長,建議開發人員使用深層連結,將使用者導向標準版應用程式或遊戲,並在適當情況下將他們重新導向至特定路徑或功能。

您可以在 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:這是已淘汰的權限。使用 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_SENDTOACTION_SEND_MULTIPLE 動作傳送意圖。

設定專案以支援免安裝體驗

如要與 Google Play 免安裝應用程式相容,您必須仔細設定免安裝應用程式套件的幾個方面。下列各節將說明這些考量事項。

宣告專案依附元件

如要在應用程式中使用 Google Play Instant 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) 以上版本的裝置,且應用程式targetSandboxVersion 指定為 2,則使用者的資料會自動轉移到完整版應用程式上。否則,您必須手動轉移資料。方法是使用下列其中一個 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 中,從「Run/Debug Configurations」對話方塊「General」分頁中顯示的安裝選項,啟用「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 Instant Apps」,然後前往即時應用程式正式版群組。
  3. 選取「從檔案庫更新」,然後選取您上傳的免安裝應用程式套件。

選擇發布免安裝應用程式的位置

您可以在使用者可安裝應用程式的國家/地區中,選取部分國家/地區推出應用程式的免安裝體驗。如果您想向特定國家/地區的使用者宣傳應用程式的免安裝體驗,這項功能就非常實用。

其他資源

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

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