【Yelp 的缩包技巧:从40M降到20M】实践

前言

昨天看到这篇文章Yelp 的缩包技巧:从40M降到20M,这篇文章详细介绍了使用webp前后对包大小的影响,看完后是不是很心动,那么问题来了,我们改怎么才能把我们包内的图片自动变成webp呢,且下面看。

android4.2.1及以后才原生支持webp,由于android4.2和4.2.x的API level都是17,所以要想直接使用webp需要在API 18以上。如果你的应用要兼容API18以下的Android设备,则需要使用libwebp.so和libwebp.jar进行webp格式转换。

webp官方指南

webp官方指南
该指南详细介绍了webp是什么,工作原理,webp支持,webp转换器下载。

如何在windows安装cwebp,dwebp

cwebp 可把png,jpeg格式的图片转为webp格式
dwebp 可把webp转为png,jpeg

安装说明
下载地址
配置环境,把安装路径配置到path路径下面,我的路径是"D:\program\libwebp-0.5.0\bin”,这样在命令行可以执行cwebp

测试指令 cwebp test.png -q 75 -o out.webp

windows上查看WebP格式图片方法

windows系统是不支持webp格式图片查看的,为了能够在windows上直接查看webp,我们需要安装WebPCodec。
WebP Codec for Windows
按照说明下载安装即可,安装完成后你的webp格式的图片就可以项jpeg、png格式的图片一样查看了。

Gradle转webp

下面本人定义了一个task,会自动把drawabel-xhdpi目录下的图片转为webp格式,把下面的代码放到工程目录的build.gradle里面即可
重新打包见证奇迹的发生吧。

task convertToWebpTask {
    generateWebp()
}
def generateWebp() {
    new File(getProjectDir(),"src/main/res/drawable-xhdpi").listFiles(new FileFilter() {
        @Override
        boolean accept(File pathname) {
            return !pathname.getName().endsWith(".9.png") && (pathname.getName().endsWith(".png") || pathname.getName().endsWith(".jpeg"))
        }
    }).each { path->
        convertTowebp(path)
    }
}

def convertTowebp(File path) {
    def name = path.getName();
    name = name.substring(0,name.indexOf("."))
    exec {
        commandLine 'cwebp',"${path.getAbsolutePath()}",'-q','75', '-o',"${path.getParent()}/${name}.webp"
    }
    path.delete()
}

你可能感兴趣的:(【Yelp 的缩包技巧:从40M降到20M】实践)