返回
AGP7.2.0图片压缩踩坑,漫漫排错路
Android
2023-10-22 20:54:15
在一次升级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时需要谨慎行事。一个小小的改动都可能导致意想不到的问题。通过逐个排查,我们最终找到了问题的根源并找到了解决办法。希望我们的经验能给其他开发者带来启发。