一键解决Android项目图片压缩烦恼,为apk瘦身!
Posted Android开发中文站
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一键解决Android项目图片压缩烦恼,为apk瘦身!相关的知识,希望对你有一定的参考价值。
ImgCompressPlugin
一款android端自动化图片压缩的gradle插件,一键扫描项目中的资源目录并进行批量图片压缩,提供3种压缩方式,支持有损及无损压缩.同时会记录已压缩的文件,适合个人及团队协同使用.
解决的场景
需要对apk体积瘦身的应用
解决逐个手动压缩的繁杂过程,一键点击即可解决
项目中曾经不慎引入了没压缩过的图片但没发现.怎么破?ImgCompressPlugin帮你解决!
UI童鞋给予的设计图大小感觉像压缩过,但实际可能没有,那我究竟是该手动压缩一下还是偷偷懒直接放项目中呢?ImgCompressPlugin帮你解决!
团队版本迭代过程中,多人协同开发,如何避免重复压缩导致的失真,怎么确定图片已经被其他童鞋压缩过呢?ImgCompressPlugin帮你解决!
如何使用
第一步:在Project的build.gradle文件中:
buildscript {
repositories {
jcenter()
}
dependencies {
...
classpath 'com.kingkingdu.plugin:img-compressor:1.1.4'
}
}
...
...
//图片压缩插件配置,后文有对配置信息介绍
apply plugin: 'img-compressor'
imgCompressOpt{
way="pngquant"
test = false
whiteFiles=["text_pic1.png","test_pic2.jpg"]
minSize=5
tinyKeys=["your key"]
}
第二步:引入后点击sync now,gradle配置完毕后会显示下图imgCompressTask,双击即可执行,等待压缩结果即可
配置信息
way:设置压缩的方式,支持3种常见的压缩,"tinypng","pngquant","zopflip" 3选1,压缩方式选择及压缩效果见下图
test:设置测试模式是否开启,false表示压缩后图片直接覆盖原图,true表示会把原图及压缩图输出到测试目录(Project/ImageCompressTest)
whiteFiles:选填,白名单文件数组,不进行压缩
minSize:单位为KB,设置原图大于某个数值才触发压缩,0表示全部都压缩
tinyKeys:选填,仅在way="tinypng"情况下才需要,tinyKeys申请教程入口
压缩效果
原图 | tinypng | pngquant | zopflip |
---|---|---|---|
压缩类型 | 有损 | 有损 | 无损 |
1.3M | 445KB | 542KB | 903KB |
如何选择合适的压缩方式
如果项目本身原先使用的压缩方式与3种模式之一相同,则way选择相同的方式.
如果原先没有固定的压缩方式,那么推荐使用tiny或者pngquant,相对来说,tiny压缩时间较长,需要去tinyKey官网申请key,教程入口,但效果最好.pngquant压缩快速,效果也不错
白名单的意义
当进行图片压缩后发现有少量图片失真,则可以加入白名单,避免被压缩
测试模式
适合场景:UI设计师可能需要协助对比压缩后的图片是否失真,但又没项目的代码权限,所以把压缩后的图片放置在一个目录整体打包,发给设计师审阅,当然最便捷的方式是Android studio自带的版本对比工具.
当配置中test=true时,会把原图及压缩后的图输出到测试目录(Project/ImageCompressTest),压缩后的图片命名为xxxx(test).png
注意:当测试目录中只存在原图但不存在压缩后的图片时,表示图片已充分压缩,无需再压缩
最佳实践
引入本插件,配置测试模式test=false,初次执行imgCompressTask后,查看log,会打印类似日志:
Task finish, compressed:3 files skip:3 Files before total size: 951.50KB after total size: 309.67KB save size: 641.83KB
通过日志可得知被压缩图片为3个,跳过图片为3个,图片压缩前后的大小比较.图片跳过的原因为图片已充分压缩,无需再压缩
执行task后会在project目录下生成image-compressed-info.json文件,记录了已压缩的图片信息
通过Android studio自带的版本控制对比压缩前后图片是否失真,将失真图片(一般很少)加入白名单中,同时revert恢复原图
将image-compressed-info.json文件加入到版本控制,提交修改后的图片及json文件
在后续的版本开发中,团队中的任何人在开发过程中加入任何图片,或者等版本提测后,执行一次task即可压缩新版本引入的图片,旧版本的图片保持不变,也不会出现团队成员重复压缩的情况
建议团队中一位童鞋专门处理图片压缩即可,无需所有人都懂得使用.也避免了json文件冲突问题.
问题解答
Q1:如果在后续版本迭代过程中,已压缩的图片替换成新的图片,会不会忘记压缩了?
答:不会.插件本身会通过MD5进行校验,而不是图片命名进行校验,故新图片也会执行压缩的
Q2:支持的图片格式有哪些?
答:支持png,jpg格式,webp暂时不支持
Q3:对于组件化项目存在多个module,是否会扫描所有的module?
答:会全部扫描,只要是application类型或者Android library类型都会被扫描到
最后
此插件已在笔者团队中线上使用,效果不错.
以上是关于一键解决Android项目图片压缩烦恼,为apk瘦身!的主要内容,如果未能解决你的问题,请参考以下文章