Android 免安装 app:管理下载大小的最佳实践

发布于 2024-12-10 00:27:54 字数 8987 浏览 7 评论 0

Android 免安装 app 提供丰富的本地体验,可轻松访问网络链接。人们可以在没有预先安装的情况下体验你的应用程序,从而实现更高级别和更高的参与度。

然而,为了提供加载移动网页的相当的延迟,免安装应用需要精简和结构良好,因此可以根据网址点击快速下载并运行。有鉴于此,我们鼓励二进制加载的任何入口点 URL 尽可能小,最大为 4MB。二进制文件越小,免安装应用程序加载的速度越快,用户体验越平滑。 本文档将提出管理应用程序结构和二进制大小的最佳实践,以实现流畅的免安装应用体验。这些做法也将有益于你的可安装应用程序。

重构你的代码库

最大的二进制大小优势来自于将你的应用程序重构为 多个功能模块 。即使你当前的大小和功能集不需要多个功能,我们建议你进行设计,因此你可以在将来快速添加更多功能,而不会影响现有功能的二进制大小。我们还强烈建议拥有统一的模块化代码库来生成可安装和即时应用二进制文件,因为这将减少维护单独的项目和代码的负担,并在两者之间提供更清洁的项目结构。根据我们早期访问合作伙伴的经验,我们相信这将对下载的二进制大小产生最大的影响。但是,它也需要最多的投资。

为了达到目的,你可以从单个(基本)模块开始,然后通过将相关部分移动到特征模块来重构代码。请注意,在开发免安装应用程序时,你不需要担心二进制大小,因为大小限制不适用于本地构建的二进制文件。你也可以通过 Play 开发者控制台将你的二进制文件发布到 开发轨道 (在开发期间快速部署即时应用程序的特殊轨道),其大小限制为 10MB。[ 12 ]的 4MB 限制使用一次的二进制完成出来的发展轨道。

每个特征模块可以具有与给定 URL 对应的一个(或多个)入口点 - activities。将单个代码库分为多个模块时,你将具有不同功能的不同入口点,平台将根据需要加载相关功能。请记住,为任何给定入口点下载的总二进制文件应低于 4MB,因此任何功能模块和基本模块的组合大小必须低于 4MB。

img

建议首先定义功能 activity 入口点映射,然后构造重构的努力,以减少每个入口点的二进制大小。

还要考虑如何包含库。如果特定功能模块需要某些库,那么它们应该只包含在功能模块中,而不是添加到基础 APK 中。这将减小基本模块的尺寸。例如,假设你有一个依赖于库 X,Y 和 Z 的应用程序。最初,你可以通过将基础 gradle.build 文件中的所有依赖项打包到基本模块中的所有库。但是,如果只有功能模块中的代码需要库 Z,则将依赖关系从基本模块移动到功能模块是有意义的。只要没有其他功能模块依赖于同一个库,这是有用的。如果多个功能模块使用相同的库,将其保留在基本模块中是绝对有意义的。

img

Link 检查

许多应用程序倾向于获取大量资源,并且在一段时间内,其中一些应用程序已不再使用。Android Studio 对于未使用的资源有用的内置 lint 检查。按 Alt + Ctrl + Shift + I(Mac OS 上的 Cmd + Alt + Shift + I),键入“未使用资源”,然后启动“未使用资源 Android | Lint | Performance”检查。它也有助于减少可安装的 APK 的大小。

img

字符串资源

与资源类似,请注意字符串,并不是所有这些都可能被使用,通常可以通过删除未使用的字符串资源来显着减少应用程序大小。如果应用程序支持多种语言,则可能需要减少本地化资源的数量,因为它通常会删除大量的资源资源。如果应用程序仅支持几种语言但使用 AppCompat 库(包括多种语言的消息),这一点尤为重要。使用 resConfig 仅选择特定的资源配置。提示:通常你可以使用“ 自动 )”来限制从第三方库拉出的配置,以匹配项目中定义的一组配置。

切换到 WebP

可以通过切换到 WebP 图像 而不是 PNG 来实现 绘制资源大小 的显着减少。Android 免安装 app 支持 WebP 格式的所有功能(透明度,无损等),因此功能不会有任何损失。请记住,应用程序启动器图标必须使用 PNG 格式,但它不应该是一个问题,因为项目通常会保留在 mipmap 目录中。如果需要向后兼容的解决方案,则需要将原始 PNG 图像包含在 APK 模块中,并 自动覆盖 WebP 资源 (主源集覆盖 AAR /功能模块中的所有资源)。[ 4 ]

img
img
当然,使用矢量绘图可以让你节省更多的宝贵空间,但使用矢量绘图将需要代码更改,而上述提到的技巧与 WebP 图像的即时应用程序和 PNG 图像可安装的 APK 不需要代码修改。

在运行时下载资源

最后,请记住,在技术上,免安装应用 APK 中的所有资源都不需要打包,因为应用程序可以在运行时下载其他资源。该方法还使应用程序仅下载所需的资源。这些修改可能需要对代码库进行重大更改,但也可以帮助你减少可安装的 APK 的大小。

如果缩小的资源不会使你的应用功能模块的大小受到限制,那么现在是寻找减少代码大小的方法了。

查看本地库

一些第三方库可能包括本机代码,这些代码可能根本不会在即时应用程序中使用。所以第一步是检查在 APK 中打包的本地库,并确保免安装应用只有那些实际使用的。记得使用 APK Analyzer (Build - > APK Analyzer ...)查看编译的 APK [ 5 ]

img

 查看外部库

接下来查看与应用程序代码链接的所有外部库的列表。你可能会发现一些意想不到的惊喜,提供传递依赖。当你的项目依赖的库取决于另一个库,而依赖于另一个库时,就会发生传递依赖。有时,这些传递依赖可能会包含意外的惊喜,例如你根本不需要的库(即,你在代码中不使用的 JSON 处理库)。有关详细信息,请参阅“Gradle 用户指南”中的“ 排除依赖关系 ”。

Android Studio 有几个有用的工具来分析项目的外部依赖关系。它始终有助于从项目视图开始:

img

“Project”视图显示了一个名为“外部库”的部分,你可以在其中看到项目使用的所有库,包括任何传递依赖关系:

img

为了进一步减少基本特​​征大小,你可能需要注意代码依赖关系和外部库。检查“Project”视图,并查找可能是项目不需要的传递依赖项的未使用的库。还要查找提供相同功能的库(例如用于图像加载/缓存的多个库)。[ 4 ]

你还可以将不同的版本与 APK Analyzer 工具进行比较,并且与即时 APK 一起使用。

img

最后,查看传递性依赖关系列表,并排除你不需要的依赖关系。使用以下命令查看依赖关系图: gradle -q :MODULE:dependencies --configuration compile。更多细节可以在 Gradle 文档 中找到。

其他技巧

Android Studio 3.0 包括 App Links Assistant 工具,可帮助你生成必要的 intent 过滤器,并帮助将项目拆分成多个模块。[ 3 ]

img
img

一旦你获得了大小限制下的免安装应用程序包,那么现在就是确保构建过程是最新的。检查应用程序包和即时应用 APK 是否使用“ APK 签名方案 v2 ”进行签名。如果你使用最新版本的 SDK 工具签署 APK,则应自动完成所有操作。但是,如果手动签名构建工件,则需要避免使用 jarsigner 并切换到 apksigner

还有一些有用的提示可以将应用程序的代码调整到免安装运行时环境。请记住,基于 InstantApps.isInstantApp(...) 的免安装/可安装应用程序的小代码分支应该是正常的,通常不会使源代码不可读(除非你滥用它)。另外,当使用共享 intent 时,请确保代码没有明确枚举设备上安装的应用程序,免安装应用安全模型不允许。只需使用常规 Intent.createChooser()向用户显示所有可能的操作的列表。

为现有 Android 应用开发免安装应用程序的工作水平在开发者各不相同,并且在很大程度上取决于你今天应用程序的组织方式。对于某些项目来说,很简单,因为你的项目已经被组织为多个模块。然而,对于某些人而言,重点将在于减少代码和资源资产的大小,我们已经介绍了上述工具和 Android 平台的功能来帮助你。

看看其他开发者使用 Android 免安装 app

最后,看看这些由于由已经建立了一个免安装的应用程序的开发者发布的非常好的帖子:

访问 Android 开发者网站, 开始使用 Android 免安装 Apps ,并查看其他开发者的 免安装应用程序成功案例

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

0 文章
0 评论
22 人气
更多

推荐作者

马化腾

文章 0 评论 0

thousandcents

文章 0 评论 0

辰『辰』

文章 0 评论 0

ailin001

文章 0 评论 0

冷情妓

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文