apk “减肥”

apk太大一般是以下原因造成的:

 1, 图片资源很多,为多种屏幕密度出多个版本分辨率的图片。

 2, 有很多大图片(好几百KB),比如介绍页、使用指南之类的。

 3, 应用中集成了很多,或者很大的so库。


以下总结下我在项目中缩减apk体积所用到的方法。 (将原本14MB的安装包缩小为9.5MB)

1, 图片只切一版。

之前由于经验不足,项目中的所有切图都是让UI工程师输出两个版本的图片,比如我们要更好的适配hdpi屏幕和xhdpi屏幕,于是每张图片就有了两个版本,一版是基于视觉稿的尺寸(hdpi的480*800), 另一版是适配xhdpi,所以在这个基础上给图片的长和宽都乘以3/4。

其实是没有必要的, 当你将一张基于xhdpi视觉稿切的图片放到xhdpi目录时,所有的屏幕密度都能很好的适配, android系统会自动的对你的图片进行缩放, 不用为每个密度都切一版图片的, 经过实际验证我也发现确实是这样的, 于是我将hdpi下的所有和xhdpi目录有重复的图片全部删除掉。 这样下来应用就减少了将近2M !  

那,既然有了这样的经验,我们后面就知道了,首先,第一步,要在应用UX/UI设计的时候就确定下来的, 就是确定好你的应用最佳适配分辨率是多少, 比如720*1280,那么,接下来的设计就完全基于这个分辨率,包括视觉调整、切图输出。 这一步一定要和设计师沟通好,因为设计师可能对android平台的屏幕多样性适配不怎么了解,屏幕适配的事情要由你来做, 不能让设计师去设计不同分辨率下的视觉效果。 交互和视觉成型后,切图输出时就只需要根据这个720*1280分辨率输出一版图片。 然后具体这一版图片怎么适配不同的屏幕密度和分辨率完全是工程师的工作。 工程师只需要将图片放到xhdpi目录, 就会自适应大部分主流分辨率( 特殊分辨率可以专门通过drawable文件夹适配来解决)。 这样你的apk就不会因为重复图片而导致体积膨胀了。


2, 个别图片体积很大。

       以我的项目为例, splash页和首次运行介绍页5张图片都是实实在在的全屏大图, 每张图片200多KB,虽说apk在打包的时候会自动对图片进行一定程度的压缩, 但是光这几张图片就占了这么大体积,那还不包括其他图片呢。

我的做法是将“不注重”透明度的图片压缩格式改为jpg,  因为jpg相比于PNG图片拥有更好的压缩比(图片质量上可能会有所降低,但是基本是肉眼看不出来的差别), 这样一张200KB的图片一下子就变成了80KB, 缩小了60%, 当然如果你的图片必须拥有透明效果, 可以对PNG图片降低质量, 调整PS的相关输出选项即可(这个UI懂的哦),前提是在肉眼不能分辨的情况下降低图片质量。 这样即使你使用的PNG,也可以将图片体积缩小50%左右。

所有大图片处理一遍,apk体积又小了1M。

在这里提一下TinyPNG这个网站, 这个网站提供的服务可以在不损失视觉效果的前提下把你的PNG图片缩减达90%的大小, 可谓惊人!但是遗憾的是我将所有大图片都使用了TinyPNG进行缩减,但是打包出来的apk体积不减反增, 这令我十分纳闷, 有谁能告诉我这是为什么,  难道TinyPNG的压缩方式和apk打包工具有冲突?


3, 注意你的so库。

项目中使用了DLNA功能, 而DLNA是以C++实现的,编译成so直接打包在apk里以jni方式调用。 我相信有不少应用对于注重性能或者功能复用的模块都使用了jni方式,带来的问题就是so经常成为apk体积膨胀的一大因素, 以这个DLNA为例, so文件就有整整1MB。

如果仅仅是1MB还不算什么大问题,问题在于为了适配armeabi和armeabi-v7a两种机型,这个库必须在libs/armeabi目录和libs/armeabi-v7a两个文件夹下各放一份。否则有可能在某种CPU类型的机器上运行出现初始化连接异常(因为找不到so库引起的)。 那光这个库就占了2M。

怎么办呢, 说说我的解决方案:

将so库使用zip压缩,1MB可以压缩到400KB,然后 后只放一份到res/raw目录, 在代码里实现: 如果程序是第一次运行,则获取到raw下这个zip文件的输入流,然后将其解压到/data/data/com.xxx.xxx/lib_xxx目录, lib_xxx为你自己建的目录, 然后使用System.load加载库,而不要使用System.loadLibrary., 这样指定路径加载肯定不会出现找不到so的问题。

如此做, apk再缩小1M。 


4, 其他注意的地方。

比如如果应用中包含了语音提示等原始音频文件,可以使用压缩率较高的格式(一般mp3就可以了,音质损失不是大问题)。

注意清理应用中的无用图片, 无用代码。


本着精益求精的原则。 不要让你的apk体积成为用户下载的犹豫因素。 不要让用户花费太多时间等待下载, 不要浪费用户太多的流量, 快快给你的apk”减减肥“吧。 


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值