WebP Compression
Cwebp
与 pngquant 不同,cwebpopen in new window 采用的是 BSD Licenseopen in new window,与 Apache License 并不冲突,所以 booster-task-compression-cwebpopen in new window 内置了从 Google 官方提供的下载地址:https://storage.googleapis.com/downloads.webmproject.org/releases/webp/index.html 下载的 cwebp 二进制可执行文件 64 位版本。
How it Works?
与 PNG 图片压缩 的思路一样,也是在 mergeRes 和 processRes 任务之间插入 WebP 压缩任务,如下图所示:
由于 WebP 格式在 14 <= minSdkVersion <= 17 不支持带 alpha 通道的图像,所以,针对 AAPT2, alpha 两个维度,将 task 分成了4 种:
WARNING
需要注意的是:如果应用是发布在 Google Play 上,应用的启动图标必须是 PNG 格式open in new window,否则 Google Play 不会接受。
Getting Started
开启 WebP 压缩只需要引入 booster-task-compression-cwebpopen in new window 即可,如下所示:
buildscript {
ext {
kotlin_version = "1.5.31"
booster_version = "4.16.3"
}
repositories {
mavenLocal()
mavenCentral()
google()
jcenter()
maven { url 'https://oss.sonatype.org/content/repositories/public/' }
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "com.didiglobal.booster:booster-gradle-plugin:$booster_version"
/* 👇👇👇👇 引用这个模块 👇👇👇👇 */
classpath "com.didiglobal.booster:booster-task-compression-cwebp:$booster_version"
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
然后,执行 compress{Variant}ResourcesWithCwebp 任务来完成对资源的压缩,如下所示:
$ ./gradlew compressDebugResourcesWithCwebp --info
Combined with PNG Compression
由于只有 minSdkVersion 在 18 以上才能完全使用 WebP 压缩,所以,为了解决 minSdkVerion 在 18 以下,部分图片无法使用 WebP 压缩的情况,这时候就需要用 booster-task-compression-pngquantopen in new window 来弥补,当 booster-task-compression-pngquantopen in new window 与 booster-task-compression-cwebpopen in new window 共存时,task 的依赖关系是这样的:
同时启用 PNG 和 WebP 压缩只需要引入 booster-task-compression-cwebpopen in new window,booster-task-compression-pngquantopen in new window 和 booster-pngquant-provideropen in new window 即可:
buildscript {
ext {
kotlin_version = "1.5.31"
booster_version = "4.16.3"
}
repositories {
mavenLocal()
mavenCentral()
google()
jcenter()
maven { url 'https://oss.sonatype.org/content/repositories/public/' }
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "com.didiglobal.booster:booster-gradle-plugin:$booster_version"
/* 👇👇👇👇 引用这三个模块 👇👇👇👇 */
classpath "com.didiglobal.booster:booster-task-compression-cwebp:$booster_version"
classpath "com.didiglobal.booster:booster-task-compression-pngquant:$booster_version"
classpath "io.johnsonlee.booster:booster-pngqaunt-provider:1.1.0"
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
WARNING
Android Gradle Plugin 3.6 及以上版本,需要在 gradle.properties 中设置:
android.precompileDependenciesResources=false
WARNING
Android Gradle Plugin 7.0 及以上版本,需要在 gradle.properties 中设置:
android.enableSourceSetPathsMap=false
Custom Compression Quality
booster-task-compression-cwebpopen in new window 支持自定义的参数如下表所示:
选项 | 描述 |
---|---|
booster.task.compression.cwebp.option.quality | 压缩质量 (默认 80) |
Configuring by gradle.properties
booster.task.compression.cwebp.option.quality=75
Configuring by Command Line
$ ./gradlew assembleDebug -Pbooster.task.compression.cwebp.option.quality=75
The Report
当 compress${Variant}ResourcesWithCwebp
任务执行完成后会自动在以下路径中生成任务报告:
build/reports/booster-task-compression-cwebp/${variant}/report.txt
其内容如下所示:
88.03% intermediates/res/merged/debug/drawable-xxhdpi_bg_banner2.png.flat 157,448 178,864 ...
88.03% intermediates/res/merged/debug/drawable-xxhdpi_bg_banner1.png.flat 157,448 178,864 ...
53.41% intermediates/res/merged/debug/drawable-xxxhdpi_bg_card.png.flat 49,315 92,325 ...
55.69% intermediates/res/merged/debug/drawable-xxxhdpi_bg_box.png.flat 19,387 34,813 ...
0% intermediates/res/merged/debug/mipmap-xxxhdpi_ic_launcher_round.png.flat 0 15,308 ...
0% intermediates/res/merged/debug/drawable-xxxhdpi_bg_chart.png.flat 0 10,653 ...
0% intermediates/res/merged/debug/mipmap-xxhdpi_ic_launcher_round.png.flat 0 10,592 ...
0% intermediates/res/merged/debug/mipmap-xxxhdpi_ic_launcher.png.flat 0 9,292 ...
0% intermediates/res/merged/debug/mipmap-xhdpi_ic_launcher_round.png.flat 0 7,072 ...
0% intermediates/res/merged/debug/mipmap-xxhdpi_ic_launcher.png.flat 0 6,552 ...
0% intermediates/res/merged/debug/mipmap-hdpi_ic_launcher_round.png.flat 0 5,084 ...
0% intermediates/res/merged/debug/mipmap-xhdpi_ic_launcher.png.flat 0 4,656 ...
0% intermediates/res/merged/debug/mipmap-hdpi_ic_launcher.png.flat 0 3,128 ...
0% intermediates/res/merged/debug/mipmap-mdpi_ic_launcher_round.png.flat 0 2,960 ...
0% intermediates/res/merged/debug/mipmap-mdpi_ic_launcher.png.flat 0 2,224 ...
---------------------------------------------------------------------------------------
TOTAL 383,598
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
其中,各列涵义如下所示:
- 压缩率
(压缩前的大小 - 压缩后的大小) / 压缩前的大小
- 合并后的资源文件路径
- 压缩后的大小
- 压缩前的大小
- 原始路径