关于android:为您的应用配置-Play-Feature-Delivery

44次阅读

共计 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

正文完
 0