为了账号安全,请及时绑定邮箱和手机立即绑定

WINK+团队如何将Android应用瘦身至10MB以下

在开发 Android 应用程序时,开发人员面临的一个主要挑战是优化应用大小,同时不损害功能。我们的团队只有一个 Android 工程师在开发 WINK+ 应用。虽然资源有限,我们给自己设定了一个雄心勃勃的目标:将 APK 大小减小到 10 MB 以内。一个顶级产品应该在外表和内核上都做到最好。在巨大的资源限制下,我们被迫创造性地思考如何解决问题。这尤其具有挑战性,因为同一类别的竞争应用通常超过 20 MB,而 WINK+ 提供的功能比它们更复杂。我们遇到的一个主要瓶颈是,单纯为了减小应用大小并没有带来多少价值。尤其是资源并不充裕的情况下,我们必须谨慎地分配有限的资源。

1. 理解你的应用程序的组成部分

在优化应用程序大小的过程中,第一步是深入理解影响应用程序大小的各个组成部分。对于 WINK+,这包括了图像、库和冗余代码等资源。像 Android Studio 的 APK 分析器这样的工具可以帮助分析 APK 文件,并识别出主要影响大小的因素。不出所料,主要问题来自大尺寸图片文件和未使用的第三方库。

2. 移除不用的资源和库

最直接的成果来自于消除未使用的资源和库。许多应用程序包含了未充分利用的库,这些库要么是早期版本遗留下来的,要么是功能过剩的第三方库。我们使用了 Proguard,这是 Android Studio 内置的一个工具,用于缩减和优化代码。Proguard 的代码缩减功能帮我们剔除了未使用的类、方法和字段,从而减小了整体体积。此外,我们还进行了审计,识别并移除了不适合我们使用场景的庞大库。

一个例子是我们用来在新加坡各地收集WINK+积分的QR码扫描器。这背后使用的是MLKit。然而,支持这个功能的MLKit库大小有2.4 MB。但是,因为我们只在Google Play上发布我们的应用(这意味着所有手机理论上都应该安装了Google Play服务),我们可以解绑这个库并依赖于Google Play服务。这实际上为我们节省了2 MB的大小。

WINK+用户们可以扫描新加坡各处的二维码赚取积分兑换奖励

3. 移除不必要的字体以减小应用体积

字体也是应用程序优化中常被忽视的一个方面。虽然单独来看每个字体似乎并不重要,但它们的累积效应不容忽视,特别是在应用程序中包含了多种字体和字体样式时。在优化WINK+应用的过程中,我们发现最终APK中捆绑了一些未使用的字体家族和字体样式,导致了不必要的文件增大。移除这些未使用的字体后,我们显著减小了应用体积,同时没有影响到设计和用户体验。

我们确保只包含了必要的字体和字重。Android 允许你在 XML 中使用字体资源文件方法定义特定的字体字重和样式,因此我们不需要捆绑完整的字体家族,包括多种字重和样式。通过减少不必要的字体变体,只保留实际使用的字体,我们大大减少了字体资源的大小。

此外,为了避免从外部服务器下载字体(这可能会减慢应用启动时间),我们将字体直接嵌入应用,确保字体文件在离线时也能用上。通过精简字体并移除不必要的字体,我们大幅减小了APK大小,这一优化有助于保持应用大小在8MB以内。

4. 使用 VectorDrawables 而不是位图图片

应用程序体积减小的一个主要因素是将位图图像切换为矢量图。位图图像,特别是用于图标和其他可缩放元素的那些,会使应用体积显著增大。而矢量图则是可缩放的,并且文件大小更小。因此,通过将 PNG 等位图格式替换为 SVG 和其他矢量格式,我们大幅减少了分配给图像资源的存储空间。

然而,我们遇到的一个问题是,很多PNG文件从未上传到Figma中,因为我们是从其他地方继承了这个应用,所以一些工作文件已经丢失了。因此,我们依赖在线资源来帮助将PNG转换为SVG。尽管Adobe提供了一个免费的在线工具免费服务,我们发现这个是最有效的。(Adobe保留了很多奇怪的残余)

我们还利用了Avocado,它使我们能够进一步优化VectorDrawables,通过移除线条之间的多余点来实现。然而,我们从PNG迁移过来的一些资源边缘较为粗糙,这是由于位图图像通常会这样。我们认为花这么多时间清理这些内容,只为节省区区……几百字节,实在是不值得,所以我们保留了原样。

5 优化依赖并将其代码模块化,使其更简洁高效

接下来,我们仔细查看了使用的第三方依赖项。许多这些依赖项过于庞大,给应用造成了不必要的臃肿。比如 Facebook 的库就是一个例子。

我们最初使用的是这个特定的库,它加载了Facebook上的所有内容。

// Facebook Android SDK
implementation 'com.facebook.android:facebook-android-sdk:latest.release'

不过,因为我们并没有用到Facebook的所有功能,我们选择了更小的一个版本,这样一来,从而节省了很大的空间。

    // 仅用于 Facebook Core(分析)
    implementation 'com.facebook.android:facebook-core:latest.release'

    // 仅用于 Facebook Marketing
    implementation 'com.facebook.android:facebook-marketing:latest.release'

通过只使用严格必要的依赖项,我们大大减小了应用的体积。使用gradle 依赖管理这样的技术,我们能够将这些库精简到其核心功能,进一步优化了应用的构建设置。

6: 压缩资产文件而不影响质量

资产压缩是减小应用大小的另一个重要步骤。工具如ImageOptim使我们能够通过使用更好的压缩方式对图像进行优化,大幅减少了图像文件的大小。

Android Studio 可以自动将图片转成 WebP,只要条件合适。

7. 优化 Lottie 动画文件以加快加载时间和减小文件大小

在 WINK+ 上,我们使用 Lottie 动画来提升用户体验。Lottie 文件是基于 JSON 格式的动画,由于其轻量级的特性以及无损缩放的特性,已成为应用程序开发人员的热门选择。它们允许制作平滑且高质量的动画,与传统的视频或 GIF 动画相比,体积更小,更节省空间。然而,如果未进行适当的优化,即使是 Lottie 文件也会增加应用的体积,尤其是包含冗余图层或过于复杂时。

为了减少WINK+中使用的Lottie动画的整体大小,我们采用了几种优化策略。首先,我们确保动画本身尽可能简单。Lottie动画有时会包含多余的资料,例如多余的键帧或嵌入在JSON文件中的不必要的资产。通过使用LottieFiles的基于网络的资产优化器,我们能够通过去除多余的键帧和不必要的嵌入资产来优化这些动画,使我们的Lottie文件更小,加载更快。我们甚至能够通过这种方法减少大约1MB的文件大小。

[Lottie JSON 转优化 Lottie JSON 转换器 — LottieFiles

让您的 Lottie 动画加载更快,性能更佳。使用我们的转换器将 Lottie JSON 优化…lottiefiles.com](https://lottiefiles.com/tools/lottie-json-to-optimized-lottie-json?source=post_page-----00318f3e7d51--------------------------------)

第8步:测试、迭代更新和监控这一步

一旦优化并压缩到10MB以下,我们就进行了广泛的测试。确保应用的性能、功能以及整体用户体验未受影响至关重要。我们一直在监控不同设备上的应用性能。我们使用New Relic(应用性能管理)来进行APM。

哇!7.85MB(兆字节)!

最后

减小应用的大小可以显著提升下载率,因为用户通常更喜欢较小的应用,因为他们会担心数据使用量、下载时间和设备存储空间的限制。研究显示,对于每个 Android 应用,每增加 6MB 的大小,安装率就下降 1%。

在新兴市场中,这一趋势更加明显,因为数据成本和有限的存储空间是主要考虑因素。比如印度和巴西这样的国家,如果应用程序大小减少10MB,就可以使安装转化率提高2.5%。

根据所选市场,每减少10MB,安装转化率就会增加(来源:https://medium.com/googleplaydev/shrinking-apks-growing-installs-5d3fcba23ce2

总之,将WINK+应用大小减小到10MB以下,同时保持比类似应用更丰富的功能集,这是一个既具挑战性又令人满意的经历。通过采用优化资源、模块化代码、使用App Bundles以及专注于高效的压缩技术等策略,我们提供了一个精简、快速且高效的软件应用。随着安卓生态系统的应用大小不断增长,这次经历再次强调了优化大小的重要性——不仅是为了用户的方便,还为了提高应用性能和用户参与度。

编码愉快!

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消