Android Apk瘦身方案2——gradle插件将png自动压缩为webp

实现思路

在 mergeRes 和 processRes 任务之间插入 WebP 压缩任务,如下图所示:
在这里插入图片描述
使用开源框架Cwebp,使用命令行对所有的图片进行遍历处理,然后将结果输出
Google 官方提供的下载地址:https://storage.googleapis.com/downloads.webmproject.org/releases/webp/index.html 下载的 cwebp 二进制可执行文件 64 位版本。

由于 WebP 格式在 14 <= minSdkVersion <= 17 不支持带 alpha 通道的图像,所以,针对 AAPT2, alpha 两个维度,将 task 分成了4 种:
在这里插入图片描述
应用是发布在 Google Play 上,应用的启动图标必须是 PNG 格式,否则 Google Play 不会接受。

代码实现

以下代码均来自booster开源项目

1.自定义gradle插件BoosterPlugin.java
在这里插入图片描述
这里的variantProcessors方法代码如下:

  private val variantProcessors: Collection<VariantProcessor>
        get() = BoosterServiceLoader.load(VariantProcessor::class.java, javaClass.classLoader).sortedBy {
            it.javaClass.getAnnotation(Priority::class.java)?.value ?: 0
        }

通过BoosterServiceLoader加载所有实现VariantProcessor接口的类,例如CwebpCompressionVariantProcessor就是用于webp图片压缩,PngquantCompressionVariantProcessor用于针对于不能使用cweb的情况进行图片压缩,还有很多其他的Processor。

查看CwebpCompressionVariantProcessor代码

@AutoService(VariantProcessor::class)
class CwebpCompressionVariantProcessor : VariantProcessor {

    override fun process(variant: BaseVariant) {
        val results = CompressionResults()
        val filter = if (variant.project.aapt2Enabled) ::isFlatPngExceptRaw else ::isPngExceptRaw
        Cwebp.get(variant)?.newCompressionTaskCreator()?.createCompressionTask(variant, results, "resources", {
            variant.scope.mergedRes.search(filter)
        }, variant.mergeResourcesTask)?.doLast {
            results.generateReport(variant, Build.ARTIFACT)
        }
    }

}

这里通过谷歌的AutoService来实现,这里使用实现VariantProcessor接口的方式,主要是为了解耦,因为有很多插件的功能,但是别人使用不一定都会用到,通过接口实现的方式,如果没使用到的功能,没有引入,则没有实现类

2.CwebpCompressionVariantProcessor#newCompressionTaskCreator

@AutoService(VariantProcessor::class)
class CwebpCompressionVariantProcessor : VariantProcessor {

    override fun process(variant: BaseVariant) {
        val results = CompressionResults()
        val filter = if (variant.project.aapt2Enabled) ::isFlatPngExceptRaw else ::isPngExceptRaw
        Cwebp.get(variant)?.newCompressionTaskCreator()?.createCompressionTask(variant, results, "resources", {
            variant.scope.mergedRes.search(filter)
        }, variant.mergeResourcesTask)?.doLast {
            results.generateReport(variant, Build.ARTIFACT)
        }
    }

}

3.Cwebp#newCompressionTaskCreator()

 override fun newCompressionTaskCreator() = SimpleCompressionTaskCreator(this) { aapt2 ->
        when (aapt2) {
            true -> when (supportAlpha) {
                true -> CwebpCompressOpaqueFlatImages::class
                else -> CwebpCompressFlatImages::class
            }
            else -> when (supportAlpha) {
                true -> CwebpCompressOpaqueImages::class
                else -> CwebpCompressImages::class
            }
        }
    }

通过是否支持supportAlpha和aapt2决定不同的task
在这里插入图片描述
minsdk只要大于17都是支持alpha的,且gradle 3.0以上都是使用aapt2了,所以这里创建CwebpCompressOpaqueFlatImages

4.SimpleCompression

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Android Studio 2021.1是Google最新发布的一款Android开发工具。在使用Android Studio 2021.1进行开发时,我们需要下载并安装对应版本的Gradle插件Gradle是一种基于Java的构建工具,它能够自动化构建、测试和部署应用程序。Android Studio在构建Android应用程序时采用了Gradle构建系统,通过Gradle插件,我们可以使用Gradle构建和管理Android项目。 Android Studio默认会从Gradle官方网站下载并安装最新版本的Gradle插件,但我们也可以手动下载Gradle插件。 首先,我们需要在Android Studio界面中打开Project Structure对话框,在左侧面板中选择“Project”,然后在右侧面板中选择“Gradle settings”。 在Gradle settings对话框中,我们可以看到当前Gradle版本信息,以及Gradle的下载链接。如果我们想手动下载Gradle插件,可以点击“Download Gradle”打开官方网站下载页面。 在官方网站下载完成后,将下载的Gradle文件解压缩至本地计算机的某个目录下。接着打开Android Studio,点击File->Settings->Build, Execution, Deployment->Gradle,在Gradle home下选择刚刚解压缩Gradle文件夹即可。 下载Gradle插件的过程比较简单,但需要注意的是,不同版本的Gradle插件可能会存在兼容性问题,因此建议选择当前最新版本的Gradle插件。同时,我们还需要关注Gradle插件的更新,及时升级到最新版本以确保开发体验与性能。 ### 回答2: Android Studio 2021.1的Gradle插件下载可以通过以下步骤完成。首先,打开Android Studio并进入“Preferences”(Mac上是“Android Studio”>“Preferences”,在Windows上是“File”>“Settings”)。在Preferences窗口中,选择“Build, Execution, Deployment”>“Build Tools”>“Gradle”。在Gradle页面上,您会看到当前所选Gradle版本信息。 要下载特定版本的Gradle插件,请单击“下载”链接旁边的“+”符号。接下来,您将会看到一个下载Gradle插件的对话框。在这个对话框中,您可以选择要下载的Gradle插件版本。在Gradle插件部分中,您可以选择Gradle插件的主要版本(如6.x、7.x等)。选择完主要版本后,您还需要选择一个具体的Gradle插件版本(如6.7.1、7.0.2等)。选择好版本后,单击“OK”按钮开始下载插件Android Studio将下载所选Gradle插件的zip文件,并将其保存在本地Gradle插件存储目录中。下载完成后,您将在Gradle页面上看到新下载的Gradle插件版本。要完成安装过程,请确保Gradle插件版本的选择框旁边有一个勾号,表示该插件已成功安装。如果您更新了Gradle插件版本,Android Studio可能需要重新启动才能应用更改。 通过以上步骤,您可以下载并安装Android Studio 2021.1的Gradle插件。这将使您能够更好地管理和构建您的Android项目,并享受到最新Gradle功能和改进带来的好处。 ### 回答3: 安装Android Studio 2021.1后,您可以在项目的`build.gradle`文件中指定所需的Gradle插件版本。首先,打开项目文件夹并找到`build.gradle`文件,然后按照以下步骤操作: 1. 在`buildscript`部分的`dependencies`块中,找到`classpath`行,其中应该包含Gradle插件的版本号。例如: ```groovy buildscript { repositories { google() // ... } dependencies { classpath "com.android.tools.build:gradle:7.0.0" // ... } } ``` 2. 确保在`dependencies`块中指定的Gradle插件版本与您要使用的版本一致。如果你想要使用最新版本,你可以在`classpath`行中设置一个适当的版本号: ```groovy classpath "com.android.tools.build:gradle:7.0.0" ``` 3. 保存`build.gradle`文件,然后重新构建您的项目。Android Studio将自动下载并使用指定版本的Gradle插件。 请注意,Gradle插件的版本与Android Studio的版本可能会有关联。您需要根据您正在使用的Android Studio版本选择兼容的Gradle插件版本。如果您的项目的Gradle插件版本与Android Studio不兼容,您可能会遇到构建错误或功能不可用的问题。因此,在更新Gradle插件之前,请务必查阅相关文档和指南,以确保您的项目和Android Studio版本兼容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的代码家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值