共计 3804 个字符,预计需要花费 10 分钟才能阅读完成。
这是一个新的系列文章,咱们称之为 “Modern Android Development 技巧 ”,简称为 “MAD Skills”。本系列文章致力于帮忙开发者们打造更好的古代 Android 开发体验,敬请关注。
明天为大家公布本系列文章中的第六篇: 为您的利用配置 Play Feature Delivery。如果您想回顾过去公布的内容,请参考上面链接查看:
- 导航组件概览
- 导航到对话框
- 在利用中导航时应用 SafeArgs
- 应用深层链接导航
- 打造您的首个 app bundle
在 “MAD Skills” 系列文章中,Android App Bundle 是 Android 利用默认的公布格局。
在用户设施上,相比于通用 apk 文件,应用 Android App Bundle 的利用文件大小均匀 缩减了 15%。您只需简略地切换到 Android App Bundle,就能够利用其节约文件大小和改良公布,无需扭转利用的任何代码。在 2021 年下半年,Google Play 将要求 新的利用和游戏以 Android App Bundle 的格局公布。
想要理解更多对于如何构建您的第一个 Android App Bundle,请参阅这个系列 之前的文章。
当然您也能够利用 Play Feature Delivery 来进一步模块化以及优化装置利用。
为什么须要模块化利用和 Play Feature Delivery 呢?
模块化利用会在利用的不同局部之间创立清晰的界线,这会带来各种益处。
大多数状况下,您只须要从新构建利用的一部分,这也能够帮忙您缩短利用的构建工夫。构建工夫的缩短以及清晰的模块界线可能会进步工程开发速度。
同时,从 Google Play Store 咱们也能够发现:
利用的下载大小每升高 3 MB 能够减少 1% 的下载量
通过这篇文章您能够理解到 Android App Bundles 带来的 Play Feature Delivery 的新个性,这些个性能够帮忙您更进一步地升高利用的大小。同时我还将会介绍一些 API (这些 API 能够用来实现按条件或按需进行性能散发) 以及各种不同的配置选项。
您能够应用 Android Studio 来体验 “ 新建模块 (New Module)” 的流程,咱们在这篇文章里还会介绍该流程背地的逻辑,以及之后您能够如何更改配置。
建设根本模块
当应用功能模块开始模块化一个利用的时候,您的根本模块是 装置时模块 (install-time modules),此时您曾经能够从诸如构建速度以及工程开发速度的晋升中获益。
装置时模块的根底配置如下所示:
/* Copyright 2020 Google LLC.
SPDX-License-Identifier: Apache-2.0 */
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:dist="http://schemas.android.com/apk/distribution"
package="com.google.android.samples.playcore.picture">
<uses-feature android:name="android.hardware.camera" android:required="true" />
<dist:module dist:title="@string/module_feature_picture">
<dist:fusing dist:include="true" />
<dist:delivery>
<dist:install-time />
</dist:delivery>
</dist:module>
</manifest>
最重要的局部是散发命名空间 (distribution namespace),xmlns:dist="http://schemas.android.com/apk/distribution"
以及散发配置属性被设置为 install-time
。
当首次装置时,像这样配置的模块会被默认装置。
每个装置时模块都会被交融进根本模块,这也使他们变成不可移除的。如果您想当前能够移除装置时模块,您须要设置其 removable
的属性值为 true
。
有些模块很占存储空间,且只有初始装置利用时有用,一旦实现就不再须要,比方老手教程和注册流程等。对于这些模块来说,模块卸载会十分有用。
咱们还提供了 PlayCore API 来按需装置和卸载某些模块,我稍后会在本文中介绍它。
对于 Android 5.0 以前的设施的提醒
功能模块的装置机制须要运行在 Android 5.0 及当前的机型上。对于旧版本的 Android,功能模块能够放到根底 apk 中。如果想开启这个性能,您须要在 module 标签中设置 fusing 的 include 属性值为 true。
<dist:fusing dist:include=”true”>
设置按条件散发
除了装置时候发,按条件散发是另外一个申请功能模块的办法。装置条件包含设施 API 版本、用户所在国家和设施个性。
这是一个残缺的 AndroidManifest 配置文件。
/* Copyright 2020 Google LLC.
SPDX-License-Identifier: Apache-2.0 */
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:dist="http://schemas.android.com/apk/distribution"
package="com.google.android.samples.playcore.picture">
<uses-feature android:name="android.hardware.camera" android:required="true" />
<dist:module dist:title="@string/module_feature_picture" >
<dist:fusing dist:include="true" />
<dist:delivery>
<dist:install-time>
<dist:conditions>
<dist:min-api dist:value="21"/>
<dist:max-api dist:value="29"/>
<dist:device-feature dist:name="android.hardware.camera"/>
<dist:user-countries dist:exclude="false">
<dist:country dist:code="DE"/>
<dist:country dist:code="GB"/>
</dist:user-countries>
</dist:conditions>
</dist:install-time>
<dist:removable value="true" />
</dist:delivery>
</dist:module>
</manifest>
并不是所有的这些条件都须要设置,而且您也不大可能须要在单个模块中应用所有这些条件。咱们来一步步解释它们。
如果要设置按条件散发,咱们须要增加 dist:conditions 标签。
而后,通过应用 min-api 和 max-api,您能够申明所反对的最低以及最高的 API 版本。
如果您须要为一个特定模块指定 API 版本,这些会十分有用。
此外,AndroidManifest 文件中的每一个 uses-feature 元素 都能够被用来作为装置条件。通过应用 device-feature 属性,您能够确保功能模块只会被散发到有相干配置的设施上。
默认状况下,每个用户都能够从利用所公布的地区下载到其所有功能模块。您能够抉择某些特定的功能模块只在特定的国家可用。这将是一个实现本地化利用十分好的形式。为了实现这个性能,您须要增加 user-countries
标签并设置两个字母的国家代码。
当您想设置某个性能在某些特定的国家 不可用 时,请确保设置 dist:exclude=”false”。如果您想让一个性能只在某个国家可用,请设置该值为 true。
不含代码的模块
有时您只想分发给用户一个相似 TensorFlow 模型的大型资源文件,在这个功能模块中,您并没有任何代码,这时请确保该模块的 AndroidManifest 文件中 hasCode 的值设置为 false。
<application android:hasCode="false" />
这个设置会通知编译器 不用生成 dex 文件。
如果模块中没有代码而且遗记设置 hasCode 为 false 则会导致运行时异样。
按需散发配置
如果想齐全本人管制利用的安装时间,您能够应用 按需装置 (on-demand installation)。这意味着您能够在利用被下载并装置到用户设施之后调用 API 来装置模块。
应用按需装置节俭了初始的下载工夫和大小。
在 AndroidManifest 文件中,您须要设置散发选项为 on-demand。随后,您能够在利用的流程中应用 PlayCore API 来下载、装置和卸载模块。
如需更多材料具体理解 Play Feature Delivery 中的按需散发,请查阅:
- Github 上 PlayCoreKtx 的示例工程
- 视频: 为您的利用配置 Play Feature Delivery – MAD Skills