日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Android App Bundle:动态功能模块

發(fā)布時(shí)間:2024/4/15 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android App Bundle:动态功能模块 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

Android App Bundle

創(chuàng)建動(dòng)態(tài)功能模塊

動(dòng)態(tài)功能模塊?

與主模塊建立關(guān)聯(lián)

部署應(yīng)用

按需分發(fā)On-Demand?

免安裝分發(fā)


自 2021 年 8 月起,Google Play 將開始要求新應(yīng)用使用 Android App Bundle 進(jìn)行發(fā)布。該格式將取代 APK 作為標(biāo)準(zhǔn)發(fā)布格式。雖然這個(gè)政策目前還無法影響到國內(nèi)應(yīng)用,但是作為Android開發(fā)者,對(duì)于新的動(dòng)態(tài)還是要有一定的認(rèn)識(shí)。本文并不是介紹Android App Bundle,因?yàn)樗皇切碌氖挛?#xff0c;相關(guān)的文章也有很多了,本文重點(diǎn)介紹的是Android App Bundle中“動(dòng)態(tài)功能模塊”的實(shí)際應(yīng)用。

Android App Bundle

Android App Bundle是基于google play的分發(fā)技術(shù),可以有效的減少apk的大小。

Android App Bundle可以自動(dòng)將不同的分辨率、語言、平臺(tái)(CPU)的資源分別打包,這樣當(dāng)安裝時(shí)只根據(jù)當(dāng)前設(shè)備安裝對(duì)應(yīng)的資源,這樣大大的節(jié)省了內(nèi)存空間。

除了這些資源,Android App Bundle還支持動(dòng)態(tài)功能模塊(Dynamic Feature Module),這樣如果用戶不需要這部分功能,則不安裝這個(gè)模塊,這樣就更加高度優(yōu)化了下載和安裝。

創(chuàng)建動(dòng)態(tài)功能模塊

下面就來看看如何創(chuàng)建動(dòng)態(tài)功能模塊:

1、從菜單欄中依次選擇 File > New > New Module。這一步與創(chuàng)建普通模塊一樣。

2、在 Create New Module 對(duì)話框中,選擇 Dynamic Feature Module,然后點(diǎn)擊 Next。

3、在 Configure your new module 部分中,完成以下操作:

  • 從下拉菜單中選擇應(yīng)用項(xiàng)目的 Base application module。(一般就是main主模塊)

  • 指定 Module name。IDE 會(huì)使用此名稱在 Gradle 設(shè)置文件中將該模塊標(biāo)識(shí)為 Gradle 子項(xiàng)目。當(dāng)您構(gòu)建 app bundle 時(shí),Gradle 會(huì)使用子項(xiàng)目名稱的最后一個(gè)元素在功能模塊的清單中注入 <manifest split> 屬性。

  • 指定該模塊的 package name。默認(rèn)情況下,Android Studio 會(huì)建議一個(gè)軟件包名稱,該名稱由基本模塊的根目錄軟件包名稱和您在上一步中指定的模塊名稱組合而成。

  • 選擇您希望該模塊支持的 Minimum API level。此值應(yīng)與基本模塊的值一致。

  • 點(diǎn)擊 Next。

4、在 Module Download Options 部分中,完成以下操作:

1)指定最多包含 50 個(gè)字符的 Module title。(這個(gè)會(huì)展示給用戶)

2)在 Install-time inclusion 下的下拉菜單中,選擇分發(fā)時(shí)機(jī),有下面三種:

  • Include module at install-time 安裝時(shí)分發(fā)(與普通模塊類似)

  • Do not include module at install-time ?按需分發(fā)(安裝時(shí)不分發(fā),后面單獨(dú)說)

  • Only include module at app install for devices with specified features ?按條件分發(fā)

?????按條件分發(fā)還需要配置條件,如下圖

????????點(diǎn)擊“+ device-feature”可以添加一個(gè)條件(可以添加多個(gè)條件)。在 每個(gè)device-feature 旁邊,從下拉菜單中選擇以下選項(xiàng)之一,然后為其指定值:

  • Name:用于指定設(shè)備為在安裝應(yīng)用時(shí)下載模塊所需具備的硬件或軟件功能。按條件分發(fā)所支持的功能與被 PackageManager 列為 FEATURE_* 常量的功能相同。如果您選擇此選項(xiàng),請(qǐng)先在下拉菜單旁邊的字段中輸入相應(yīng)功能的常量值的任意部分(例如“bluetooth”),然后在所顯示的建議中選擇一個(gè)。

  • OpenGL ES Version:用于指定設(shè)備為在安裝應(yīng)用時(shí)下載模塊所需的 OpenGL ES 版本。如果您選擇此選項(xiàng),請(qǐng)先在下拉菜單旁邊的字段中輸入相應(yīng)版本(例如“0x00030001”),然后在所顯示的建議中選擇一個(gè)。

3)如果您希望此模塊可提供給搭載 Android 4.4(API 級(jí)別 20)及更低版本的設(shè)備并包含在多 APK 中,請(qǐng)選中 Fusing 旁邊的復(fù)選框。這意味著,您可以從不支持下載和安裝拆分 APK 的設(shè)備上將其省略。

(這部分的配置最終會(huì)在模塊下的Manifest中體現(xiàn),下面會(huì)提到)

5、點(diǎn)擊 Finish即可創(chuàng)建模塊

?

動(dòng)態(tài)功能模塊?

創(chuàng)建出的模塊目錄如下:

可以看到與正常模塊一樣,但是這里的Manifest內(nèi)容有差異,如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:dist="http://schemas.android.com/apk/distribution"package="com.huichongzi.dynamicfeature"><dist:moduledist:instant="false"dist:title="@string/title_dynamicfeature"><dist:delivery><dist:on-demand /></dist:delivery><dist:fusing dist:include="true" /></dist:module> </manifest>

?可以看到這里出現(xiàn)了一個(gè)dist標(biāo)簽,這個(gè)標(biāo)簽下就是動(dòng)態(tài)功能模塊的一些配置。比如dist:instant="false"就是不支持免安裝(免安裝后面會(huì)細(xì)說),而title就是上面4步中設(shè)置的module title。而

<dist:delivery><dist:on-demand /> </dist:delivery>

就是分發(fā)時(shí)機(jī),on-demand就是Do not include module at install-time即按需分發(fā)(后面單獨(dú)說),如果改成install-time就是Include module at install-time即安裝時(shí)分發(fā),按條件分發(fā)則不太一樣,如下:

<dist:delivery><dist:install-time><dist:conditions><dist:device-feature dist:name="android.hardware.camera.ar"/>...</dist:conditions></dist:install-time></dist:delivery>

模塊創(chuàng)建后可以在這里添加新的分發(fā)條件。

這里也可以根據(jù)國家/地區(qū)指定條件

<dist:conditions><!-- Set to "true" to specify countries to exclude from downloadingthis module at app install-time. By default, modules are availablefor download to all user countries. --><dist:user-countries dist:exclude="true"><!-- Specifies the two-letter CLDR country code for regions that shouldnot download the module at app install-time. --><dist:country dist:code="CN"/><dist:country dist:code="HK"/></dist:user-countries> </dist:conditions>

根據(jù) API 級(jí)別指定條件

<dist:conditions><!-- Specifies the minimum API level that the device must satisfyin order to download your module at app install-time. The API level youspecify must be greater or equal to the module's own minSdkVersion. --><dist:min-sdk dist:value="21"/><!-- Specifies the maximum API level that the device cannot exceedin order to download your module at app install-time. The API level youspecify must be less than or equal to the module's own maxSdkVersion. --><dist:max-sdk dist:value="24"/> </dist:conditions>

與主模塊建立關(guān)聯(lián)

當(dāng) Android Studio 創(chuàng)建功能模塊時(shí),它會(huì)自動(dòng)在基本模塊的?build.gradle?文件添加?android.dynamicFeatures?屬性,以使該功能模塊對(duì)基本模塊可見,如下所示:

// In the base module’s build.gradle file. android {defaultConfig {...}...// Specifies feature modules that have a dependency on// this base module.dynamicFeatures = [":dynamic_feature", ":dynamic_feature2"] }

此外,Android Studio 還會(huì)將基本模塊添加為功能模塊的依賴項(xiàng),如下所示:

// In the feature module’s build.gradle file: ... dependencies {...// Declares a dependency on the base module, ':app'.implementation project(':app') }

部署應(yīng)用

在開發(fā)支持功能模塊的應(yīng)用時(shí),您可以像往常一樣,從菜單欄中依次選擇 Run > Run(或點(diǎn)擊工具欄中的 Run 圖標(biāo) ),將該應(yīng)用部署到連接的設(shè)備。

如果您的應(yīng)用項(xiàng)目包含一個(gè)或多個(gè)功能模塊,您可以通過修改現(xiàn)有的運(yùn)行/調(diào)試配置以選擇需要在部署應(yīng)用時(shí)包含的功能,具體操作步驟如下:

  • 從菜單欄中依次選擇 Run > Edit Configurations。

  • 在 Run/Debug Configurations 對(duì)話框的左側(cè)面板中,選擇所需的 Android App 配置。

  • 在 General 標(biāo)簽頁中的 Dynamic features to deploy 下,選中需要在部署應(yīng)用時(shí)包含的每個(gè)功能模塊旁邊的復(fù)選框。

  • 點(diǎn)擊 OK。

默認(rèn)情況下,Android Studio 不會(huì)使用 app bundle 部署您的應(yīng)用,而是由 IDE 構(gòu)建針對(duì)部署速度(而非 APK 大小)進(jìn)行了優(yōu)化的 APK,并將其安裝到設(shè)備中。如需將 Android Studio 配置為通過 app bundle 構(gòu)建和部署 APK 以及免安裝體驗(yàn),請(qǐng)修改運(yùn)行/調(diào)試配置。

按需分發(fā)On-Demand?

上面我們提到了三種分法模式:安裝時(shí)分發(fā),按需分發(fā)和按條件分發(fā)。

安裝時(shí)分發(fā)比較好理解,即在google play下載安裝應(yīng)用的時(shí)候就會(huì)下載該模塊;按條件分發(fā)也比較好理解,下載安裝應(yīng)用時(shí),如果當(dāng)前設(shè)備滿足條件才會(huì)下載該模塊;只有按需分發(fā),并不是很容易理解。

按需分發(fā)與國內(nèi)很多應(yīng)用的插件化類似,就是在功能被使用的時(shí)候才會(huì)去下載那部分代碼和資源。官方描述是這樣的:

如果在使用購物平臺(tái)應(yīng)用的用戶中,只有 20%?的人發(fā)布待售商品,有一個(gè)不錯(cuò)的策略可以減少大多數(shù)用戶的初始下載大小,那就是將拍照、輸入商品描述及上架商品的功能配置為按需下載。也就是說,您可以為應(yīng)用的銷售功能配置功能模塊,使該功能僅在用戶希望在購物平臺(tái)上銷售商品時(shí)才下載。此外,如果用戶在一段時(shí)間后不再出售商品,應(yīng)用可以通過請(qǐng)求卸載該功能減小其安裝大小。

但是通過上面創(chuàng)建部署動(dòng)態(tài)模塊的流程,我們發(fā)現(xiàn)沒有關(guān)于按需下載的這部分邏輯。這是因?yàn)槿绻褂脛?dòng)態(tài)模塊,還需要配合google的play core?library才可以:

implementation "com.google.android.play:core:${versions.playcore}"

?通過這個(gè)library中的SplitInstallManager這個(gè)類來實(shí)現(xiàn)判斷模塊是否安裝,如果沒有安裝則下載安裝等邏輯。

這部分內(nèi)容很多,受本文篇幅所限就不展開了,官方有一篇很詳細(xì)的教程:https://developer.android.com/codelabs/on-demand-dynamic-delivery#0,有興趣的同學(xué)可以自行閱讀(需要梯子)。以后有時(shí)間我會(huì)單獨(dú)出一篇中文教程,請(qǐng)大家留意我的公眾號(hào)更新。

免安裝分發(fā)

還有一種動(dòng)態(tài)功能模塊,即免安裝分發(fā)。Google Play 免安裝體驗(yàn)讓用戶無需在設(shè)備上安裝 APK 即可與您的應(yīng)用互動(dòng)。用戶可以通過 Google Play 商店中的“立即體驗(yàn)”按鈕或您創(chuàng)建的網(wǎng)址體驗(yàn)?zāi)膽?yīng)用。這種內(nèi)容分發(fā)形式可讓您更輕松地提高用戶與應(yīng)用的互動(dòng)度。

僅當(dāng)應(yīng)用的基本模塊也支持免安裝體驗(yàn)時(shí),您才能使功能支持免安裝體驗(yàn)。這是因?yàn)?#xff0c;如果用戶想要體驗(yàn)?zāi)膽?yīng)用中某個(gè)支持免安裝體驗(yàn)的功能模塊,他們的設(shè)備還必須下載應(yīng)用的基本模塊以獲取通用代碼和資源。請(qǐng)注意,為了支持 Google Play 免安裝體驗(yàn),基本模塊和功能的下載必須滿足幾個(gè)條件:

最大大小:支持免安裝體驗(yàn)的基本模塊和支持免安裝體驗(yàn)的功能模塊的總大小不得超過 10 MB。如需了解詳情,請(qǐng)閱讀通過縮減應(yīng)用或游戲大小支持免安裝體驗(yàn)。

后臺(tái)活動(dòng):支持免安裝體驗(yàn)的模塊無法使用后臺(tái)服務(wù)。此外,此類模塊在后臺(tái)運(yùn)行時(shí)無法發(fā)送通知。

如果您使用 Android Studio 3.5 或更高版本創(chuàng)建支持免安裝體驗(yàn)的功能模塊(如本部分所述),IDE 會(huì)在每個(gè)模塊的清單中添加以下內(nèi)容,從而自動(dòng)使基本模塊和功能模塊支持免安裝體驗(yàn):

<manifest xmlns:dist="http://schemas.android.com/apk/distribution"... ><dist:module dist:instant="true" />...

此外,在下載并安裝您的應(yīng)用時(shí),系統(tǒng)會(huì)隨該應(yīng)用的基本 APK 自動(dòng)下載并安裝支持免安裝體驗(yàn)的功能模塊。因此,IDE 還會(huì)在支持免安裝體驗(yàn)的功能模塊中添加以下內(nèi)容。

總結(jié)

以上是生活随笔為你收集整理的Android App Bundle:动态功能模块的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。