【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

我们是如何将 App 的大小从 31M 减少到 2.6M 的?

  • 2018-03-12
  • 本文字数:1925 字

    阅读完需:约 6 分钟

四周前,我在谷歌的 Play Store 发布了我的第一个应用。在介绍我们是如何将一个 App 从 31M 减到 2.6M 之前,先来说一下这件事的背景。

我是德里久尔政府工程学院的大四学生,主攻方向是计算机科学。我已经在编程与应用开发邻域学习了多年。

故事要从五个月前开始说起,大学二年级的师弟 Atul Nair 告诉我,他想学习安卓应用开发。

我认为学习任何事情最好的方法就是从实践开始做起。所以我建议 Nair 从开发一个简单的安卓应用开始慢慢学习,并针对应用提出了一些“陈词滥调”。

一些“陈词滥调”

  • 一款可以展示 WhatsApp 用户近期动态的软件,可以分享和保存这些状态。
  • 用户可以发送超过 30 秒的视频。
  • 用户可以通过添加自定义视觉效果和图像来发布音频状态。

注意:在那个时候,WhatsApp 的动态功能才刚刚上线,所以这些想法听起来还是很棒的。

然后我们就开始动手了

这是我们那天画的 App 框架草图。

然后呢?

首先,将我们的任务简化为三个点。

  1. “近期动态”
  2. “视频动态”
  3. “音频动态”

最开始我们都很兴奋,只用了 2 到 3 天就完成了“近期动态”这一功能。毕竟对于我们来说,这是一项非常简单和熟悉的任务。

然后我协助 Atul 开发了视频动态功能。因为我还有其他几个项目,所以大部分时间我只在 Android 的视频库上进行研究,他会尝试一些实践性的代码。

“视频动态”功能完成了,但是……

在这一周里,他学得非常快,正如我们计划的那样,他发给我一个拥有视频分享功能的 apk!这个软件可以很流畅的运行,但是存在一个严重的问题!

apk 的大小是 31M,我当然不能接受这一点。

最开始,我们决定用著名的 ffmpeg 库对视屏进行处理。最简单的方法是通过 WritingMinds 直接使用 Ffmpeg-Android 库。我们使用的是原始的预编译库,这个库本身大小就超过了 27M,这也是导致 apk 很大的原因。

我告诉他,我们应该解决这个问题,让软件包尽可能小。

经过一段时间的研究,他成功地将软件包压缩到了 18M 的大小,并且对软件的性能没有任何影响。他按照这个项目的方法将 App 的大小减小了一半,只使用了 armv7 版本的 ffmpeg。

然后我说,虽然已经很棒了,但还不是最好!我告诉他:

“软件的大小应该至少小于 5M,否则人们不会去下载,我们也不会发布它。”

在软件大小这一点上,我是非常“固执”的。我给他看了一些 Play Store 的上的视频编辑软件,这些软件只有 5M。然后告诉他:“既然他们可以做到,我们为什么不行?”

然后我们继续解决这个问题,但是由于一些学术上的事情和考试,这件事就被拖了一段时间。

然后有一天,他告诉我他将软件压缩到了 10M!

其实这个大小已经很不错了,但我还是很“固执”。我尝试使用一些本地开发工具和方法来编译我们的 ffmepg ,为了减少大小,我只实现了一些一本功能,但是测试效果都不好。

日子就这么一天天过去,直到有一天他告诉我一个好消息:

他将软件压缩到了 2.6M!(这可是最开始大小的 12 分之一!!!)

看来他也是一个“固执”的人!他在网上查了很多方法然后找到了最好的解决方案。他找到了一个本地 C++ 编译的.so 文件,这个文件包含了我们要使用的所有功能,并且只有 4M,然后他将他压缩到只有 2M 大小的 arr 包。这是 1.2 版本 apk 文件的分析结果。

WhatSaga 1.2 版本软件包分析

同时,我们也使用了 proguard minify 和 drawable optimisation 这些功能使得其他资源尽可能占用更少的空间。我们最终放弃了“语音动态”这个功能,几天后我们就在 Play Store 上线了我们的 App。

我们叫他WhatSaga,这个名字结合了 WhatsApp 和Saga。Saga 的意思是“传说”,这也是我们这款软件的主要功能。如果你对我们的软件感兴趣,欢迎下载我们的 App: https://goo.gl/nvjNRc

那么这就结束了吗?

让我们思考一下我写这篇文章的原因。想象一下如果我们不是那么“固执”!我们可能会在 10-15MB 这个版本上止步不前,或者更糟。当然这是跟 2.6MB 的最终版本相比而言的。

你可能会问,现代的手机内存和带宽基本都到达了 GB 级别,App 的大小真的有那么重要吗?

答案是肯定的!App 的大小比你想象的更重要。

假设有两个 App,他们的 UI 是一样的,然后其中一个比另一个小 3 到 4MB,你会选择使用哪个呢?很明显,大多数人都会选择更小的那款软件。更小的 App 大小意味着更多满意的用户。

从这件事我学到了什么?

择善固执!

没错,对于你正在做的任何事情,一定要择善固执!无论是软件的设计、运行时间、视觉质量和外观,还有其他的任何事情,你和你的团队都应该追求极致。在没有达到你的预期之前,千万不要放弃。

老实说,我认为在没有加入“音频动态”之前就上线我们的 App 是一个错误的行为,在这点上我也应该保持我的“固执”。

查看英文原文 How we brought down the size of our app from 31 MB to 2.6 MB and what it taught us

感谢 Martin 对本文的审校。

2018-03-12 17:033037

评论

发布
暂无评论
发现更多内容

快速搞懂Seata分布式事务AT、TCC、SAGA、XA模式选型

知识浅谈

开源 8月月更

开源一夏 | 不会吧,十分钟就能上手Prometheus与Grafana监控SpringBoot项目

知识浅谈

开源 8月月更 SpringBoot实战

开源一夏 | Python Web开发(八):后端开发中的增查改删处理

是Dream呀

开源

安全至上:落地DevSecOps最佳实践你不得不知道的工具

龙智—DevSecOps解决方案

DevOps DevSecOps

开源一夏 | 数据结构课设:图书信息管理--顺序存储和链式存储

是Dream呀

开源

大数据培训如何部署一个健壮的Airflow

小谷哥

大数据培训机构大概要花费多少钱

小谷哥

制胜精细化运营时代 华为应用市场打出内容、场景、商业运营组合拳

Geek_2d6073

融云「 IM 进阶实战高手课」系列直播上线

融云 RongCloud

IM 连接协议

电烙铁的基础知识

单宝华

电子技术 8月月更

大数据培训班如何选

小谷哥

CWE4.8:2022年危害最大的25种软件安全问题

华为云开发者联盟

安全 后端 开发

2022年值得尝试的7个MQTT客户端工具

EMQ映云科技

物联网 IoT mqtt 客户端 8月月更

开源一夏|数据结构课设:基于字符串模式匹配算法的病毒感染检测问题

是Dream呀

开源

大咖说·图书分享 | Serverless工程实践:从入门到进阶

大咖说

Serverless 工程实践

A tour of gRPC:06 - gRPC client straming 客户端流

BUG侦探

gRPC RPC

研发了 5 年的时序数据库,到底要解决什么问题?

TDengine

数据库 tdengine

参加前端培训后程序员能找到工作吗?

小谷哥

用 Lunchbox 在 vue3 中创建一个旋转的 3D 地球竟是如此简单

前端修罗场

3D 地球 ThreeJS

学好web前端培训课程方法推荐

小谷哥

Redis进阶之路:深度解析Redis单线程架构,图文并茂不能再清晰了

王小凡

Java redis 程序员 开发

一文搞懂│php 中的 DI 依赖注入

设计模式 依赖注入 8月月更 高级编程

数字孪生园区场景中的坐标知识

ThingJS数字孪生引擎

数字孪生

「全球数字经济大会」登陆 N 世界,融云提供通信云服务支持

融云 RongCloud

isc N世界

不改一行源码,实现 sentinel-dashboard 所有配置支持 apollo 持久化

铁匠

微服务 sentinel 流量控制 sentinel dashboard

全面认识二极管,一篇文章就够了

矜辰所致

ESD二极管 8月月更 二极管 电子设计基础 TVS二极管

绝对最直白的MySQL MVCC机制总结,免费拿走

知识浅谈

开源 8月月更

浅聊组合函数

掘金安东尼

前端 函数编程 8月月更

Python 教程之输入输出(2)—— 输入和输出

海拥(haiyong.site)

Python 8月月更

创新云集技术咖,工赋汇聚实战派:2022工赋开发者峰会

工赋开发者社区

工业 峰会

什么是SVN(Subversion)?

龙智—DevSecOps解决方案

svn 版本控制 版本管理 版本控制软件

我们是如何将App的大小从31M减少到2.6M的?_语言 & 开发_Irshad PI_InfoQ精选文章