將現有遊戲轉換為免安裝遊戲

用於設定應用程式以執行 Google Play 免安裝功能的步驟 (如建立您的第一個免安裝應用程式一文所述),同樣適用於遊戲。本指南著重於介紹專屬於遊戲的一些設定步驟。

您可以使用 Unity (無論是否使用 Google Play 免安裝 Unity 外掛程式)、Cocos2DAndroid Studio 或自己的自訂引擎來開發 Google Play 免安裝遊戲。

本指南假設您已知道想要提供的遊戲體驗類型。如要瞭解製作高品質遊戲的理念和最佳做法,請參閱 Google Play 免安裝功能的遊戲使用者體驗最佳做法

此外,在發布可在 Google Play 免安裝功能執行的遊戲之前,請詳閱技術相關規定檢查清單

包含下列意圖篩選器的活動將成為 Google Play 免安裝體驗的進入點:

<activity android:name=".GameActivity">
   <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
</activity>

使用者輕觸 Play 商店中的「立即體驗」按鈕或 Google Play 遊戲應用程式的「立即玩按鈕時,就會啟動這項活動。您也可以使用深層連結 API 直接啟動這個活動。

定義正確的版本代碼

遊戲的免安裝體驗版本代碼必須低於可安裝遊戲的版本代碼。以這種方式管理應用程式版本,可以讓玩家從 Google Play 免安裝體驗下載遊戲並將遊戲安裝到其裝置上。Android 架構會將這個轉換視為應用程式更新。

為確保您遵循建議的版本管理計畫,請按照下列任一策略操作:

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

您可以在兩個獨立的 Android Studio 專案中開發免安裝遊戲和可安裝遊戲。但如果您這麼做,則必須執行下列步驟才能將遊戲發布到 Google Play 上:

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

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

支援執行環境

與其他應用程式一樣,Google Play 免安裝遊戲也是在裝置的有限沙箱內執行。如要支援這個執行環境,請完成以下各節所示的步驟。

選擇退出明文流量

Google Play 免安裝遊戲不支援 HTTP 流量。如果遊戲以 Android 9 (API 級別 28) 以上版本為目標平台,Android 預設會停用遊戲中的明文支援。

不過如果遊戲以 Android 8.1 (API 級別 27) 以下版本為目標平台,則必須建立一個網路安全性設定檔案。 在這個檔案中,將 cleartextTrafficPermitted 設為 false,如以下程式碼片段所示:

res/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="false">
        <domain includeSubdomains="true">secure.example.com</domain>
    </domain-config>
</network-security-config>

更新目標沙箱版本

更新免安裝遊戲的 AndroidManifest.xml 檔案,如此一來檔案就會指定 Google Play 免安裝技術支援的沙箱環境。您可以在遊戲的 <manifest> 元素中新增 android:targetSandboxVersion 屬性以完成這項更新,如以下程式碼片段所示:

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

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

請勿仰賴快取或應用程式資料

已下載的免安裝體驗會保留在使用者的裝置上,直到免安裝體驗快取遭到清除為止,系統會在出現下列情況時執行這項清除作業:

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

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

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

縮減應用程式大小

與其他類型的應用程式不同,Google Play 免安裝遊戲的下載大小上限是 15MB。如要建立這樣大小的遊戲,您可能需要重構遊戲的邏輯。本節介紹一些有助於最佳化遊戲大小的工具和技巧。

工具

以下列出的工具可協助您判定構成遊戲大小的內容為何:

  • APK 分析工具:提供編譯後 APK 內容的概觀。透過此檢視畫面中,您可以瞭解各個元素在整體大小中所佔的位元組數。這項工具可快速檢查遊戲使用的資源、素材資源、邏輯和原生資料庫的大小。
  • Bloaty McBloatface:顯示二進位檔案的大小設定檔。
  • Android GPU 檢查器:在不重新編譯遊戲的情況下,瞭解縮減紋理大小對檔案大小的影響。

技巧

下列技巧可用於縮減遊戲大小:

  • 擷取部分遊戲邏輯將其放入一或多個功能模組,這些模組不會計入大小限制。
  • 降低遊戲紋理的解析度。
  • 考慮使用 WebP 格式,特別是在 GPU 上使用未壓縮的紋理時。以 WebP 格式建立的圖片其品質與 JPEG 圖片相同,但大小會縮減 15% 到 30%。雖然壓縮 WebP 圖片所需的時間較長,但此壓縮時間仍然比下載遊戲紋理的時間來得短很多。Google 也已將格式整合到開放原始碼遊戲引擎中。
  • 壓縮或重複使用音效和音樂。
  • 請使用不同的編譯標記以協助縮小二進位檔案:
    • -fvisibility=hidden:是最重要的一個。在 cmake 中,可以按照下列方式指定:
      $ set_target_properties(your-target PROPERTIES CXX_VISIBILITY_PRESET hidden)
      
    • -Oz - 對縮減檔案大小也很重要。如果使用 gcc 進行編譯,請改用 -Os
    • -flto – 有時會縮減檔案大小。
    • 連接器標記:將 --gc-sections 與編譯器標記 (例如 -ffunction-sections-fdata-sections) 搭配使用,。
  • 使用 Proguard 縮減程式碼和資源
  • 使用 Gradle 4.4 以上版本來產生較小的 DEX 檔案。
  • 導入雲端資產提供服務

將大型遊戲分割為多個 APK

即使採用了縮減 APK 大小的建議,也可能很難透過最佳化 Google Play 免安裝體驗使遊戲能夠融入單一 15MB 的 APK。為解決這個問題,您可以將遊戲分割為多個 APK。玩家可以先下載主要的基本 APK,在玩遊戲的過程中,系統會在背景中提供遊戲剩餘的「分割 APK」

舉例來說,基本 APK 可能包含核心遊戲引擎,以及顯示載入畫面所需的素材資源。基本 APK 啟動時會顯示載入畫面,並立即要求包含遊戲和關卡資料的額外分割 APK。分割 APK 可供使用後,就能將其資產載入至遊戲引擎,並提供玩家開始遊戲所需的內容。

採用使用者體驗最佳做法

將遊戲設定為支援免安裝體驗後,請新增以下各節所述的邏輯,以提供良好的使用者體驗。

支援 64 位元架構

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

檢查遊戲是否執行免安裝體驗

如果遊戲的某些邏輯取決於使用者是否參與免安裝體驗,請呼叫 isInstantApp() 方法。如果目前執行的程序是免安裝體驗,這個方法會傳回 true

透過這項檢查作業,您可以決定是否要讓應用程式在有限的執行環境中執行,或者也可以利用平台功能。

顯示安裝提示

如果您已建立 Google Play 免安裝體驗試用版,遊戲應該會在某個時刻提示玩家將完整版本安裝在其裝置上。方法是在 Google API for Android 中使用 showInstallPrompt() 方法。

如要進一步瞭解應如何及何時提示玩家進行安裝,請參閱 Google Play 免安裝功能的遊戲使用者體驗最佳做法

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

如果玩家喜歡您的試玩體驗,可能會決定安裝完整版遊戲。如要提供優質的使用者體驗,請務必將玩家的遊戲進度從免安裝體驗轉移到完整版遊戲上。

如果遊戲指定的 targetSandboxVersion2,則玩家的遊戲進度會自動轉移到完整版遊戲。否則,您必須手動轉移與玩家進度相關的資料。方法是使用 Cookie API - 範例應用程式

其他資源

如要進一步瞭解 Google Play 免安裝功能,請參考這些額外資源:

程式碼研究室:打造第一個免安裝應用程式
在現有應用程式中新增 Google Play 免安裝支援。
程式碼研究室:建構多功能免安裝應用程式
將多功能應用程式模組化。