写点什么

我们是如何将 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:033858

评论

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

你的 Kubernetes 安全吗?最新benchmark的重要趋势解读

HummerCloud

Kubernetes k8s

什么是可信云?通过可信云评估意味着什么?

行云管家

可信云

火山引擎云原生数据仓库ByteHouse技术白皮书V1.0(上)

字节跳动数据平台

大数据 数据仓库 云原生 实时数仓 企业号 4 月 PK 榜

[直播预告]行云管家堡垒机V7.0版本说明会

行云管家

行云管家

扯下@EventListener这个注解的神秘面纱。

why技术

Java 源码

雀氏牛,Alibaba分布式微服务成长手册,GitHub已开源

Java 分布式 微服务

玩转Github:三分钟教你如何用 Github 快速找到优秀的开源项目

程序知音

Java GitHub 编程语言 后端技术

如何用 YonBuilder 构建线索管理应用?

YonBuilder低代码开发平台

Docker教程:如何将Helix QAC创建为一个容器并运行?

龙智—DevSecOps解决方案

Docker 容器 Helix QAC 静态代码扫描

浅析云原生时代的服务架构演进

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 4 月 PK 榜

文献管理软件:EndNote 20 v20.5激活版

真大的脸盆

Mac Mac 软件 文献管理 文献管理工具

SpringBoot整合RocketMQ,老鸟们都是这么玩

Java RocketMQ Spring Boot

又搞事!阿里400页JDK并发源码指南,再次被GitHub置顶了!

Java jdk 多线程 高并发 源码剖析

大模型高效开发的秘密武器:大模型低参微调套件MindSpore PET

华为云开发者联盟

人工智能 华为云 大模型 华为云开发者联盟 企业号 4 月 PK 榜

ZBC 荣登OKX涨幅榜前列,月内涨幅逾六成

股市老人

🔥InfoQ写作社区三周年主题征文火热开启

InfoQ写作社区官方

热门活动 三周年征文

简化你的代码,提高生产力:这10个Lambda表达式必须掌握

Java Lambda

MySQL数据库和Redis缓存一致性的更新策略

Java MySQL 数据库 redis 缓存

LED显示屏十大应用领域值得你收藏

Dylan

LED显示屏 户外LED显示屏 户内led显示屏

OpenTiny 跨端、跨框架组件库升级TypeScript,10万行代码重获新生

华为云开发者联盟

Vue 前端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

Atlassian后Server时代 | Server版vs.数据中心版,二者的区别在哪里?

龙智—DevSecOps解决方案

Atlassian 数据中心版 server版

【重磅发布】易观千帆用户体验分析产品领先版正式发布

易观分析

金融 银行 用户分析

Gartner最新报告,分析超大规模边缘解决方案

阿里云CloudImagine

云计算 边缘计算 边缘云

“字节”再次起跳!内部651页剖析HotSpot 源码手册,GitHub已开源

Java JVM 虚拟机 hotspot

一份深入解析Java虚拟机HotSpot手册,让我卷成美团架构师

程序知音

Java JVM java架构师 hotspot Java进阶

从 OSPO 角度思考开源治理问题——蚂蚁集团开源办公室负责人边思康

开源雨林

从零学习SDK(4)使用SDK创建一个简单的应用程序

MobTech袤博科技

企业云管平台是什么?有什么用?

行云管家

云计算 云管理 云管

成都开发者Meetup|聚焦云原生开源,点亮企业创新活力

阿里巴巴云原生

阿里云 容器 微服务 云原生

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