縮減應用程式大小

Stay organized with collections Save and categorize content based on your preferences.

使用者通常會避免下載看似過大的應用程式,特別是在網路裝置連線速度偏低或頻寬不足的新興市場。這可能會導致應用程式使用率降低,進而縮小目標對象的範圍並降低觸及率。不過,您可以透過多種方式縮減應用程式大小。

最佳做法

您可以嘗試下列幾種最佳做法,藉此縮減應用程式大小。

使用 Android App Bundle 上傳應用程式

要將應用程式發布至 Google Play 同時縮減其大小,最簡便的方式是利用 Android App Bundle 格式進行上傳。這種新的上傳格式包含應用程式所有已編譯的程式碼和資源,但是需要較長的處理時間,才能產生及簽署 APK,發布到 Google Play 上。

移除不必要的版面配置

合併含有小幅 UI 變動且未使用的版面配置,並移除不必要的版面配置,藉此縮減整體應用程式程式碼大小。此外,建議您盡可能動態轉譯版面配置和檢視區塊。這樣一來,就能避免繪製靜態範本,可直接套用替代版面配置,無須浪費額外的技術資源。

重新評估不常用的功能

停用每日活躍使用者 (DAU) 指標偏低的功能,特別針對 Android (Go 版本) 進行最佳化調整。例如移除複雜的動畫、大型 GIF 檔案,或是對應用程式成效而言非必要的任何其他美感附加項目。

結合原生二進位檔和常見依附元件

如果應用程式採用多項不同的 Java Native Interface (JNI) 實作,並搭配常見的基礎依附元件,會導致多個二進位檔因為包含多餘的元件而增加 APK 大小。您可以將多個 JNI 二進位檔合併為單一 JNI 二進位檔,同時保持 Java 和 JNI 檔案各自獨立。這樣做可大幅縮減 APK 大小。

縮減執行階段程式碼大小

檢查應用程式在執行階段未使用的程式碼,例如任何大型類別或自動產生的程式碼。R8 等程式碼最佳化工具可協助最佳化及縮減程式碼大小,但無法處理受到執行階段常數保護的程式碼。只要將檢查標記替換為編譯時間常數,即可讓各種最佳化工具發揮最大效益。

縮減可翻譯字串大小

您可以利用 Android Gradle resConfigs 屬性移除應用程式不需要的額外資源檔案。如果您使用的程式庫包含語言資源 (例如 AppCompat 或 Google Play 服務),則應用程式會納入所有已翻譯的程式庫訊息語言字串 (無論應用程式是否需要翻譯)。如果只想保留應用程式官方支援的語言,可以使用 resConfig 屬性指定這些語言。系統會移除任何未指定語言的資源。

如要將語言資源限制為英文和法文,可按照以下方式編輯 defaultConfig


android {
    defaultConfig {
        ...
        resConfigs "en", "fr"
    }
}

使用選擇性翻譯

如果特定字串不會顯示在應用程式的 UI 中,就無需翻譯。用於偵錯、例外狀況訊息或網址的字串應為程式碼中的字串常值,而非資源。

舉例來說,您可以不必費心翻譯網址這類字串。


<string name="car_frx_device_incompatible_sol_message">
  This device doesn\'t support Android Auto.\n
  &lt;a href="https://support.google.com/androidauto/answer/6395843"&gt;Learn more&lt;/a&gt;
</string>

您可能已經知道 &lt;&gt 的作用,因為這些是 <> 的逸出字元。如果您在 <string> 標記內置入 <a> 標記,Android 資源編譯器就會因無法識別這些標記而不予處理,因此需要加入這些標記。不過,這意味著您要將 HTML 標記和網址翻譯成 78 種語言。您可改為移除 HTML:

<string name="car_frx_device_incompatible_sol_message">
         This device doesn\'t support Android Auto.
</string>

使用 Dynamic Delivery

Play Feature Delivery 使用應用程式套件的進階功能,以便視情況提供或隨選下載應用程式的特定功能。您可以透過功能模組按照使用者的需求提供功能。功能模組有一個獨特的優點,就是讓您自行選擇在什麼時間、透過何種方式將應用程式的不同功能下載到裝置上。凡是搭載 Android 5.0 (API 級別 21) 以上版本的裝置,都支援這項功能。