Android 应用安装包“瘦身”大作战

发表于:2017-12-13 10:24

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:baiyang 搜狗测试    来源:51Testing软件测试网采编

  1、前言
  Hello,小伙伴们,随着app版本的迭代,新功能点增加,安装包的“体积”也越来越大。尽管智能手机存储空间不断升级,但我们安装包的大小不能这么“任性”。轻量的应用还是较受偏爱的(例如QQ发布简洁版-Tim)。更小的App能够使得更多的用户愿意去下载和体验。
  本文将介绍下应用安装包空间占用的减负方法、以及Lint工具使用。
  2、减小Apk空间占用方向
  减小Apk空间占用如何开始?
  安装包(APK)典型的组成结构如下

  Apk文件结构
  从Apk的组成结构可以看出,其中占用空间最大的部分就是代码和资源,所以我们要做安装包“瘦身”,就要从代码和资源这两个方向入手,整理关键点如下:
  (1). 代码部分:冗余代码、无用代码;
  (2). 资源部分:冗余资源、图片处理(压缩、图片转换等);
  3、代码部分
  3.1无用代码
  无用代码是指工程中那些未被引用的代码和文件,例如未被引用的变量、方法和类等。对于无用代码,主要采用的是Lint工具对整个工程代码进行扫描,找出未被引用的变量、方法、类,然后根据情况处理。
  静态代码分析工具 —— Lint
  Lint是Android Studio自带的工具,使用方法很简单Analyze-> Inspect Code然后选择想要扫描的区域即可。

  Lint 检测结果示例
  Unused  xml schema declaration
  Unused import无用的导入
  Unused declaration无用的声明
  Unused method parameters无用的方法参数
  3.2冗余代码
  冗余代码,是指重复的代码或经过优化后可以用更小代码量替换的代码,比如完全一样的代码,重命名标志符后完全一样的代码、插入或删除语句后完全一样的代码、重复排列语句后完全一样的代码,以及结构一样或者类似的代码。好的代码应用降低冗余度,提高复用率,这除了能使代码量减少,还能提高代码的可读性。
  Lint检测结果示例
  declaration redundancy声明冗余
  verboseor redundant code constructs 冗长冗余的代码结构
  Duplicatedicons under different names 相同的icon 用了不同的名字
  4、资源部分
  4.1冗余资源
  Apk的资源主要包括图片、xml。与冗余代码类似,资源里面可能也遗留了不少旧版本使用而新版本不再使用的图片、xml等。我们可以使用Lint来查找这些冗余资源。
  下面介绍Lint检测冗余资源的使用方法。
  在Anaylze中选择Run Inspection by Name
  我们关注Unused Resources,在弹出的窗口输入Unused resources,即可进行Unused resources的扫描。
  利用Android lint进行Unused  Resources扫描结果,如图所示
  Unused  resources没用过的资源
  点击对应项目,就可以看到详细信息,根据工程实际情况,判断是否需要该资源。
  4.2图片处理
  Apk本身代码占用的空间相对较小,主要的还是资源,而资源里面最主要的问题是图片。
  (1).图片压缩
  对Apk安装包来说,设计师为了追求完美效果,给出的资源一般较大,故图片有比较大的压缩空间。打包过程中aapt会进行一轮压缩,采用crunch做图片预处理。可以根据实际情况,决定是否做有损压缩。
  (2).jpg和png的转换
  png是一种无损格式,jpg是有损格式,可以和设计师进行协商给出建议,找到图片质量和大小的折中方案。
  (3).无用图片的再次梳理
  之所以要再次梳理,是因为app在版本的迭代开发中,可能遗留下许多以前版本试用的图片,但是新版本已经不再使用了,可能因为某种原因,图片的索引还残留在代码或者xml布局文件中,以致于用lint扫描时不能发现。
  这里需要联合设计师一起梳理,人工检查确认并删除。
  以上如有错误和不足,请大家指出。如果大家针对apk空间占用分析有建议或心得,欢迎留言。

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号