关于压缩apk包大小的实践

本文介绍了一种有效的APP安装包压缩方法,重点优化了lib和assets文件,通过减少图片分辨率种类和压缩图片、合理选择保留的so库版本、清理无用的assets文件等方式,成功将安装包从60M压缩到了30M以内。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间接手了一个项目,需要在该项目上进行二次开发。经过一段996的加班节奏之后,初步完成了开发工作,但是发现安装包竟然超过有60M,于是着手进行压缩。

在进行压缩之前,我们先来了解下安装包内部构造及各部分所占用的空间大小,一来可以知道压缩的主要方向,再者可以跟压缩后的效果进行比较。方法很简单,直接将apk包拖到Android studio就行了,然后你就可以看到如下的界面

可以看到,lib和assets占用了超过90%的空间,所以这两块是我们这次优化的重点(不同的app实际情况不同哈)。接下来是具体的实践步骤:

压缩图片文件

图片文件压缩是针对jpg和png格式的图片。我们通常会放置多套不同分辨率的图片以适配不同的屏幕,这里可以进行适当的删减。在实际使用中,只保留一到两套就足够了(保留一套的话建议保留xxhdpi,两套的话就加上hdpi)。然后再对剩余的图片进行压缩,我用的工具是tinyPng。可以把图片上传至网站进行压缩,然后下载替换,这种情况没有数量的限制。也可以通过脚本或者插件进行处理,这种情况下每个账号每天有500个免费调用机会,不过通过多注册几个账号可以解决这个问题(土豪的话就不用这么麻烦了)。

压缩lib文件

由于引用了很多第三方库,lib文件夹占用的空间通常都很大,特别是有so库的情况下。很多so库会同时引入armeabi、armeabi-v7a和x86这几种类型,一式三份。结合自己的经验,这里可以只保留armeabi或armeabi-v7a的其中一个就可以了,实际上微信等主流app都是这么做的。

我们在build.gradle里直接进行配置就可以了

如果第三方库刚好没有我们选择保留的类型的so库该怎么办呢?我们之前就碰到这种情况,项目保留的是armeabi版本,但是在接入商汤人脸识别sdk的时候,他们只有armeabi-v7a版本的库。别担心,这种情况把他们的so库直接手动copy到armeabi文件夹下就可以了。

assets文件压缩

这个文件夹的压缩就原始得多了,直接检查该文件夹下的文件还有没有在项目中用到,没用到的话删掉就可以了。虽然简单,但是通常会被我们所忽视,可能很多文件都已经没用了,却一直躺在那。

资源混淆

可以使用AndResGuard对资源进行压缩,在压缩apk包的同时,还能增加别人破解的难度。使用方法很简单,这里就不展开讲了。

你看,是不是跟代码混淆了一样,完全看不出来这些东西是干嘛的。

压缩资源和代码

可以通过在build.gradle配置以下几个属性

shrinkResources为true表示移除未引用资源,和代码压缩协同工作。minifyEnabled为true表示通过ProGuard启用代码压缩,配合proguardFiles的配置对代码进行混淆并移除未使用的代码。代码混淆在压缩apk的同时,也提升了安全性。

最终,我们把apk包压缩到30M以内,效果还是很显著的。

希望以上方法也能帮到你。

转载于:https://juejin.im/post/5b4476d9e51d45198a2eaa97

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值