返回

AGP7.2.0图片压缩踩坑,漫漫排错路

Android

在一次升级AGP到7.2.0版本的过程中,我们在编译环节遇到图片压缩失败的问题,导致我们的包体积优化计划受挫。带着解决问题的迫切心情,我们踏上了漫漫排错路。

问题复现

在AGP7.0.4版本下,我们在编译期执行了一个png自动压缩为webp的任务,以减小包体积。然而,升级到AGP7.2.2后(我们跳过了7.2.0版本),这个任务执行失败了。

逐个排查

为了找出问题的根源,我们逐个排查了可能的因素:

  • AGP版本: 我们尝试将AGP版本回退到7.0.4,图片压缩任务成功执行。这表明问题出在AGP7.2.2中。
  • Gradle版本: 我们检查了Gradle版本,确认它是最新的。
  • 第三方依赖项: 我们检查了所有第三方依赖项,确保它们与AGP7.2.2兼容。
  • 自定义配置: 我们审查了我们的自定义Gradle配置,确保它们符合AGP7.2.2的要求。

罪魁祸首

在排除了一系列可能的因素后,我们终于发现了罪魁祸首:manifestPlaceholders 。我们注意到,AGP7.2.2中manifestPlaceholders的处理方式发生了变化。在之前的版本中,我们使用manifestPlaceholders将图片压缩相关的配置传递给编译任务。而在AGP7.2.2中,这种方法不再有效。

解决之道

为了解决这个问题,我们重新配置了图片压缩任务,直接使用resValues方法传递配置。以下是修改后的代码:

android.buildTypes {
    release {
        postProcessing {
            removeUnusedResources true
            optimizeProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            configurationParameters {
                keep 'resources.arsc'
                keep 'META-INF/services/javax.annotation.processing.Processor'
                keep 'org.jetbrains.kotlin.**'
                keep 'com.google.**'
                keep 'androidx.**'
                keep 'kotlinx.**'
                keep 'dagger.**'
                resValues 'public static final int compress_png_to_webp = 1'
            }
        }
    }
}

总结

这次排错经历让我们深刻认识到在升级Android Gradle Plugin时需要谨慎行事。一个小小的改动都可能导致意想不到的问题。通过逐个排查,我们最终找到了问题的根源并找到了解决办法。希望我们的经验能给其他开发者带来启发。