Android一键压缩Git提交的图片
版权声明:
本公众号发布的所有文章,均属于原创,版权归本公众号所有。
允许有条件转载,转载请附带底部二维码。
前言
Android中很多资源都是图片资源,而使用设计工具直接导出的图片,都是未经压缩过的图片。如果直接导入到项目中使用,会导致最终打包的apk变大。所以一般都会要求将图片进行压缩,然后使用。实际上,要是每次替换图片资源都要进行压缩,如此反复其实还是很麻烦的。本文就如何快捷的压缩Android项目内的图片,进行一个思路上的解决方案,最后也会提供一个可以使用的demo解决方案。
一般如何压缩?
现在压缩图片,一般要求不高的话,可以直接使用TinyPng这个网站去做图片的压缩,这个网站是公司的设计师告诉我的,听说在设计圈被用的很频繁。
TinyPng的官网:https://tinypng.com/
TinyPng其实用起来很简单,如果只是一次性对一批图片进行压缩,直接打开网站,然后把需要压缩的图片拖进去就可以了。
可以看到,TinyPng的压缩率,还是很高的。
但是这样实际上还是摆脱不了人手工去操作,如果替换图片比较频繁的话,必然是要把这个操作重复多次的。既然如此,可以考虑用脚本来完成这些操作。
TinyPng的APIs
看了一下TinyPng的网站,其实他们是提供了对应的压缩API接口的。API接口还很全面,基本上常用的脚本语言,都可以去实现,并且还提供了例子,这一点非常的贴心。
TinyPng提供的接口,需要在网站进行注册,并且每月提供500次的压缩免费份额,这样其实用在工作中也足够了。
在TinyPng中注册之后,就可以获取到和注册用户对应的唯一的一个Key,这个是这个用户的唯一标识,需要记录下来,后面会用到。
需要重复造轮子吗?
Android的项目现在是使用Gradle构建的,找了一下没有现有的对应Groovy实现。那么是不是需要自己重新写一个呢?思前想后觉得还是用已经有的轮子直接使用,会比较省时省力。
正好发现TinyPng还支持Node.js的接口,而Node.js下提供了各种构建工具,其中gulp就有对TinyPng对应的支持,经过简单的配置就可以直接使用。
这里简单介绍一下接下来需要使用的技术:
- Node.js:它是一个基于Chrome V8引擎的 JavaScript的运行环境。
- NPM:它是一个Node.js的包管理工具。
- gulp:它是Node.js项目的构建工具,类似于Gradle在Android项目的作用。
举个实际的例子
既然已经找到了解决方案,就实际操作一下。
首先呢,需要安装Node.js的运行环境,这个在官网直接下载安装即可。没什么技术含量,无脑下一步。
其次需要借助npm安装gulp和gulp-tinify,为了方便的区分出那些是git的改动,还需要安装gulp-git。
安装执行命令:npm install -g gulp gulp-git gulp-tinify
使用这个命令,npm会自动将这些所需要的工具安装到全局。
gulp-git和gulp-tinify的使用,这里不做讲解,可以自行查看文档:
- gulp-git:https://www.npmjs.com/package/gulp-git
- gulp-tinify:https://www.npmjs.com/package/gulp-tinify
然后需要在Android项目的根目录下,新建一个gulpfile.js文件,来编写gulp的构建脚本。
这个脚本会使用git state
命令查看当前被修改的命令,Add和Modify都包含在内。然后取出这些文件之后,通过TinyPng去压缩,然后直接使用压缩后的图片,替换到本地对应目录下的图片。
实际使用的过程中,只需要执行 gulp tinify
即可。
在执行完图片压缩之后,就可以正常的提交改动了。
有什么改进的方案
这里提供的方案只是提供了一个思路,并且也只是随手的一个实现,并不是最优解。那么有什么可以想到的优化方案呢?
可以想到的:
- 方案一:使用Git钩子来触发,当提交代码的时候,检测改动,在提交之前直接压缩再提交,做到用户无感知。
- 方案二:既然已经引用了gulp-git,是可以在压缩完成之后,继续脚本执行commit和push命令。就可以完成后续操作。
结语
操作本身如果会被重复多次,就可以将它流程化或者脚本化,这样简化了重复工作,也不会那么枯燥到无聊。