功能模組可讓您將特定功能和資源與應用程式的基本模組分開,並納入應用程式套件中。接著,您可以自訂提供選項,以控管搭載 Android 5.0 (API 級別 21) 或以上版本的裝置下載應用程式功能的時間和方式。
請注意,這類模組化工作需要投注更多心力,也可能需要重構應用程式的現有程式碼,因此請仔細考慮應用程式的哪些功能可以隨選提供給使用者並獲益最多。
如果您想要逐步模組化應用程式功能,而不變更應用程式行為或自訂進階提供選項,則可透過建立設定為安裝時提供的功能模組來實現。也就是說,您可以將功能模組化為功能模組,但不啟用進階選項,這樣,在使用者安裝應用程式時就可以使用這項功能。
此外,設定為安裝時提供的功能模組會提供解除安裝選項,日後不需要時即可將其解除安裝。為此,需要將其設為可移除。
本節說明如何建立安裝時提供的功能模組。開始之前,請先確認您使用的是 Android Studio 3.5 或以上版本,以及 Android Gradle 外掛程式 3.5.0 或以上版本。
設定安裝時提供的新模組
如要建立新功能模組,最簡單的方法是使用 Android Studio 3.5 或以上版本。由於功能模組具有基礎應用程式模組的固有依附元件,因此您只能將其新增至現有的應用程式專案。
如要使用 Android Studio 將功能模組新增至應用程式專案,請按照下列步驟操作:
- 如果您尚未這麼做,請在 IDE 中開啟應用程式專案。
- 在選單列中,依序選取「檔案」>「新增」>「新增模組」。
- 在「Create New Module」對話方塊中選取「Dynamic Feature Module」,然後按一下「Next」。
- 在「Configure your new module」部分中完成下列步驟:
- 從下拉式選單中選取應用程式專案的「基礎應用程式模組」。
- 指定模組名稱。IDE 會使用此名稱,在 Gradle 設定檔中將該模組視為 Gradle 子專案。建立應用程式套件時,Gradle 會使用子專案名稱中的最後一個元素,在功能模組資訊清單中插入
<manifest split>
屬性。 - 指定模組的套件名稱。在預設的情況下,Android Studio 會建議一個套件名稱,該名稱結合了基礎模組的根套件名稱以及您在上一步中指定的模組名稱。
- 選擇您希望模組支援的最低 API 級別。此值應與基礎模組的值相符。
- 按一下「下一步」。
在「Module Download Options」部分中,完成以下操作:
指定最多 50 個字元的模組標題。應用程式的基礎模組必須包含模組標題作為字串資源,以供翻譯。使用 Android Studio 建立模組時,IDE 會將字串資源新增至基礎模組,並在功能模組的資訊清單中插入下列項目:
<dist:module ... dist:title="@string/feature_title"> </dist:module>
在「安裝時納入」下方的下拉式選單中,選取 「在安裝時包含模組」。Android Studio 會在模組資訊清單中插入下列內容,以反映出您做的選擇:
<dist:module ... > <dist:delivery> <dist:install-time /> </dist:delivery> </dist:module>
如果想要瞭解如何建立可在安裝應用程式後下載的功能模組,請參閱設定隨選提供。
如果您希望這個模組可用於搭載 Android 4.4 (API 級別 20) 以下版本的裝置,並且可納入多個 APK,請勾選「Fusing」(融合)旁邊的方塊。對於不支援下載及安裝分割 APK 的裝置,您可以略過相關功能。Android Studio 會在模組資訊清單中插入下列內容,以反映出您做的選擇:
<dist:module ...> <dist:fusing dist:include="true | false" /> </dist:module>
按一下「Finish」。
在 Android Studio 建立好模組後,請從「Project」窗格中自行檢查內容 (從選單列中依序選取「View」>「Tool Windows」>「Project」)。預設程式碼、資源及機構組織應與其標準應用程式模組類似。
將安裝時模組設為可卸除
建立具有解除安裝選項的安裝時提供功能模組可能大有用處,因為您可在不需要該模組時將其解除安裝。例如,為了縮減應用程式的安裝大小,您可以將訓練或新手上路所需的內容進行模組化,當使用者完成設定可以使用應用程式後,即可使用 Play Core API 解除安裝功能模組。
安裝時模組預設為無法卸除。如要將模組標示為可卸除並允許解除安裝,請新增 removable
標記並將其值設為 true
:
<dist:module ... >
<dist:delivery>
<dist:install-time>
<dist:removable dist:value="true"/>
</dist:install-time>
</dist:delivery>
</dist:module>