縮減免安裝應用程式的大小

只需輕觸網頁連結,「Google Play 免安裝」就能提供豐富的原生體驗。使用者不必先行安裝就能體驗應用程式,提升參與度和品質。不過,如果想讓免安裝應用程式載入速度就跟一般行動網頁一樣快,您必須建立結構良好且高效的免安裝應用程式。免安裝應用程式的二進位檔越小,就能越快載入,且使用者體驗也更流暢。

本文件說明管理應用程式結構和二進位檔大小的最佳做法,以提供流暢的免安裝應用程式體驗。您也可以套用相同做法,對可安裝應用程式帶來助益。

重構為多個功能模組

將應用程式重構為多個功能模組時,應用程式二進位檔大小獲得最大改善。從基本功能模組開始,然後將主題相關工作流程擷取至專屬的功能模組。為每個功能模組指派起始活動和專屬網址,讓使用者順利完成模組工作流程。

建立功能模組時,請盡可能縮小基本功能模組。請特別留意應用程式中需要存取依附元件程式庫的部分。如果只有一個功能模組使用指定的程式庫,請將其匯入功能模組本身,而非基本功能模組。請注意,如要針對特定功能模組發布免安裝應用程式,該功能模組和基本功能模組的「總」大小必須小於 15 MB

最佳做法

重構應用程式時,請注意下列最佳做法:

針對這兩種應用程式類型使用相同的程式碼集
您可以使用相同的模組程式碼集,「同時」建立安裝版應用程式和免安裝應用程式,藉此簡化應用程式的專案管理流程。
設計多個功能模組
即使您的應用程式目前只有一個工作流程,且只需要一個功能模組,仍建議您設計多個功能模組。這樣一來,您就可以在不影響原始功能模組大小的情況下,將現有模組加入應用程式。
不要在一開始就聚焦於功能模組大小限制
功能模組大小限制不適用於本機建構的二進位檔。您也可以透過內部測試測試群組發布免安裝應用程式,強制限制功能模組大小 15 MB。只有「Alpha 版」和「正式版」測試群組會強制執行 15 MB 的限制。

更新應用程式資源

部分應用程式 (尤其是大型程式碼集記錄的應用程式) 包含應用程式二進位檔已不再使用的資源。在尋找縮減應用程式模組的方式時,請考慮下列非必要程式碼的常見來源。

縮減圖片檔案大小

您可以使用 WebP 檔案格式 (而非 PNG) 大幅縮減應用程式可繪項目的總大小。Google Play 免安裝功能提供 WebP 的完整支援,包括透明度和無損壓縮,因此圖片品質維持不變。

請盡可能移除使用其他 PNG 圖片所需的所有回溯相容性要求。如果必須使用 PNG 圖片,請將其放在用來建構及安裝應用程式的模組中。

移除不支援的語言

如果您的應用程式支援多種語言,請盡可能減少本地化資源。如果您使用「應用程式相容性」程式庫 (例如 android.support.v7.appcompat),這個步驟就能派上用場。這個程式庫內含許多語言的訊息,其中有些應用程式可能不支援。

詳情請參閱如何移除未使用的額外資源,特別是未使用的語言。

移除額外檔案

應用程式可能不再使用已匯入專案的部分資源。為了協助移除這些資源,Android Studio 會對這個特定情況執行 Lint 檢查。如要使用這項工具,請完成下列步驟:

  1. 按下 Control + Alt + Shift + I 鍵 (在 Mac OS 上為 Command + Alt + Shift + I 鍵)。
  2. 在隨即顯示的對話方塊中,輸入 "unused resources"
  3. 選取「Unused resources」選項,啟動資源用量檢查程序。

如果應用程式中有任何大型資源,請考量是否該能在使用者開始與應用程式互動後,將其從應用程式解除封裝並下載為獨立檔案。這類圖片載入延遲做法通常需要變更程式碼,但只要下載使用者明確要求的資源,就能大幅縮減免安裝應用程式的檔案大小。

移除未使用的程式庫

隨著應用程式的範圍擴大,可能會面臨過多的依附元件,尤其是以下其中一種類型:

  • 原生程式庫:包含免安裝應用程式一律不會執行的原生程式碼的程式庫。
  • 遞移依附元件:應用程式匯入程式庫所依附的程式庫。

Android Studio 提供多種實用工具,可用於找出應用程式專案中任何不必要的依附元件:

外部程式庫

Android Studio 的「Project」檢視畫麵包含「External Libraries」部分。

本節包含應用程式使用的所有程式庫,包括原生程式碼和所有遞移依附元件。在這個檢視畫面中,找出未使用或製作應用程式不需要的程式庫。

APK 分析工具

您可以使用 APK 分析工具比較不同版本,包括免安裝應用程式版本。

確定應用程式不需要哪些程式庫後,請在 Gradle 建構檔案中加入類似以下幾行,將程式庫排除:

<feature_module>/build.gradle

Groovy

dependencies {
    implementation('some-important-but-large-library') {
        exclude group: 'com.example.imgtools', module: 'native'
    }
}

Kotlin

dependencies {
    implementation('some-important-but-large-library') {
        exclude(group = "com.example.imgtools", module = "native")
    }
}

如要進一步瞭解如何減少應用程式依附元件的總匯入大小,請參閱 Gradle 的依附元件管理指南。

導入雲端資產提供服務

如要進一步縮減大小,可能要依據雲端資產提供機制