本指南說明如何縮減遊戲大小。安裝後,小型遊戲就能縮短下載時間,並降低資料量。這兩項好處都能帶來較高的安裝轉換次數。 Google 的研究顯示,提供的 APK 大小只要增加 6 MB,安裝率就會降低 1%。許多開發人員會將資產從 APK 移至內容傳遞聯播網 (CDN),但這樣會產生代管 CDN 以及開發和維護資產管理系統的費用,
如要縮減遊戲大小,請按照下列步驟操作:
- 使用最佳化提交方式,例如 App Bundle 和 Play Asset Delivery。
- 判斷遊戲的基準大小和結構。
- 搜尋可縮減大小的資產和其他檔案。
- 檢查圖像紋理並找出最佳化的機會。
- 遵循適合資產的一般建議。
使用最佳化提交方式,例如 Android App Bundle 和 Play Asset Delivery
請考慮採用以下提交方式:
一般來說,舊版專案會輸出用於發布的 APK,但在 Google Play 上發布的遊戲則應採用 Android App Bundle。應用程式套件提供最佳化的 APK,能滿足每位使用者的裝置設定需求。應用程式套件平均能縮減 20% 的應用程式大小。
如要透過 Google Play 提供遊戲資產,並使應用程式套件的下載大小上限為 20 GB,甚至超過數 GB,請使用 Play Asset Delivery (PAD)。無須使用外部 CDN。PAD 支援三種不同的提交方式,每一種方式均可在單一遊戲中使用:
- Install-time:安裝時一併下載資產。資產會封裝於資產包中,以取代不透明的二進位 Blob (OBB) 檔案。
- Fast-follow:安裝完成後下載資產。
- On-demand:遊戲會視需要啟動資產下載作業。
PAD 規定遊戲必須使用 App Bundle 格式封裝。PAD 也可以降低開發人員 CDN (如果仍須使用) 所使用的資料量。
Google Play 會使用 Android App Bundle 為每位使用者的裝置設定產生及提供最佳化的 APK。這些最佳化 APK 包含一組紋理資產,並採用最適合裝置的壓縮格式。請將應用程式套件設為支援不同的紋理壓縮格式,以支援最多種類型的裝置。
判斷遊戲的基準大小和結構
為了讓你自己熟悉遊戲,請先確定任何最佳化作業所需的工作量,並判斷遊戲是否會下載其他資產,請按照下列步驟操作:
- 使用開發人員或已發布 APK 提供的正式版 (非偵錯版本)。
- 在開發人員提交或遊戲發布後,將二進位檔案大小記錄在遊戲的 Play 商店頁面上。APK 大小最重要的影響因素是,使用者為了執行實際遊戲而必須下載的資料量。
- 在裝置上安裝遊戲,然後進入初始遊戲選單。這時,請查看 Android 回報的遊戲安裝大小 (位於「設定」>「儲存空間」)。有些遊戲的初始安裝大小較小,因為這是最佳化作業的關鍵資料,但在會安裝完成後下載其他資料。有些遊戲會在安裝完成後下載數 GB 的資料。
- 有些遊戲只會在你開始玩遊戲後才下載資料。建議你玩遊戲一段時間,以判斷一般使用者首次玩遊戲時,額外下載的資料量有多大。
搜尋可縮減大小的資產和其他檔案
本節說明如何縮減 APK 中的檔案大小。你可以使用應用程式套件探索工具下載裝置專用的 APK。
如要縮減直接封裝至 APK 的檔案大小,請按照下列步驟操作:
- 使用 Android Studio APK 分析工具。在 Android Studio 中,依序選取「File」(檔案) >「Profile or debug APK」(分析或偵錯 APK),然後選取 APK。
- 選取「Assets」(資產) 資料夾。系統會列出每個檔案的原始檔案大小,以及佔總下載大小的百分比。
查看「Assets」(資產) 資料夾,以判斷遊戲資料大量存放的位置,以及是否有任何資產佔用過多空間 (亦即佔總檔案大小的 1% 以上)。請特別留意下列事項:
- 大型圖片和影片檔案 (例如 PNG、JPEG 和 mp4 檔案):這類檔案通常用於啟動畫面、背景和標誌,在大部分遊戲中很少用,且可在不影響使用者體驗的情況下進一步壓縮。無損 PNG 檔案特別大,最適合壓縮。
- 大型字型檔案 (例如 TTF 檔案):如果新增表情符號支援,字型檔案大小可能會大幅增加。如果字型檔案超過數百 KB,請考慮縮減檔案大小。
- 可合併的重複音訊檔案格式或版本。
如果 APK 含有多個應用程式二進位檔介面 (ABI),請移至 App Bundle 或建立多個 APK。
判斷二進位共用物件 (.so) 檔案的大小。如要檢查二進位檔案,以瞭解是否有不必納入的項目 (例如記錄檔),可以使用 Bloaty McBloatface 工具。 如要進一步瞭解如何最佳化二進位檔案,請參閱「編譯標記和選項」一文。
查看 Android 資訊清單檔案以瞭解支援的圖像格式。判斷 APK 中是否有多個
<supports-gl-texture>
標記。如果遊戲支援在單一 APK 中為多個 GPU 使用不同格式,請考慮使用 Binomial 的 Basis Universal 格式。 這個 GPU 紋理壓縮系統會建立中介格式的紋理檔案,可快速轉碼至 GPU。
檢查圖像紋理並找出最佳化的機會
本節說明判斷遊戲中使用的圖像紋理能否最佳化所需的工具和方法。
如要檢查遊戲中的紋理,請使用 Android GPU 檢查器 (AGI)、RenderDoc;如果是 Qualcomm Snapdragon GPU,請使用 Snapdragon Profiler。
請找出以下項目:
- 可將解析度調小的紋理,例如只能在遊戲中以小尺寸顯示的大型紋理項目。 縮小取樣紋理的運算成本相當高昂。
- 使用可以合併至單一紋理對應關係中的多個小型紋理。
- 可在色版中使用較少位元的紋理。你可以選用一些單色紋理。色彩漸層和陰影需要較多位元的解析度,因此不適合。
- 探索更優質的紋理壓縮演算法,包括 ETC1、ETC2 和 ASTC。
在低階裝置上載入紋理時,請捨棄頂層 mipmap 以節省記憶體。Unity 的 Texture Streaming 系統可做到這點。
如果你還沒這麼做,請查看 Android 資訊清單檔案以瞭解支援的圖像格式。判斷 APK 中是否有多個
<supports-gl-texture>
標記。如果遊戲支援在單一 APK 中為多個 GPU 使用不同格式,請考慮使用 Binomial 的 Basis Universal 格式。 這個 GPU 紋理壓縮系統會建立中介格式的紋理檔案,可快速轉碼至 GPU。
資產的一般建議
請按照 APK 資產的下列相關建議操作:
- 圖片、音訊和影片資產 (非 GPU 紋理):判斷資產能否進一步調整大小或壓縮。一般來說,遊戲可接受較高的壓縮率。無損 PNG 檔案特別大,因此最適合壓縮。
- 圖片資產 (非 GPU 紋理):請考慮使用 WEBP,這是用於進行有損和無損壓縮的圖片壓縮格式。有損 WEBP 的圖片壓縮比率比 JPG 圖片高出 25% 到 34%。
- 降低紋理的解析度:如果紋理像素數比螢幕上最終顯示的像素數高出許多,就會佔用額外的空間和 GPU 資源。如要變更紋理,並在無需重建遊戲的情況下查看紋理在頁框中的樣子,請使用 AGI。
- 變更圖像的紋理格式:使用在每個管道中佔用較少位元的紋理格式,例如使用 RGB565 等 16 位元紋理格式,而非 ARGB 等 32 位元紋理格式。詳情請參閱下列資源: