Google在Android Gradle Plugin(AGP)8.12中添加优化资源缩减(Optimized Resource Shrinking)工作管线,让资源缩减能与R8程序代码优化同时进行。对于已在项目中激活R8工具与资源缩减的开发者,只要在gradle.properties打开相关旗标,即可利用这项功能,进一步降低安装文件大小,并改善启动速度、渲染表现与应用程序无回应(Application Not Responding,ANR)的情况。
R8是Android构建过程中,用于程序代码缩减、优化和混淆的工具,能移除未使用的程序代码、缩小应用程序大小,并提升执行性能。
传统流程中,AAPT2(Android Asset Packaging Tool 2)会替资源参照产生无条件保留规则(Unconditional Keep Rules),使得被资源参照的类别在后续R8缩减时一律保留,而R8完成程序代码缩减后,再扫描剩余程序代码构建资源参照图。由于这些规则偏保守,常连带保留本可移除的程序代码与其参照的资源,降低缩减效果。
新的集成流程由R8同步优化程序代码格式与资源参照,能精确找出仅由未使用程序代码参照的资源,并加以移除,不再依赖AAPT2产生的无条件保留规则,此做法同时为程序代码与资源提供更细致的可删除性资讯,提升删除效率并降低错误保留的情况。Google建议在正式版(Release)构建使用,以避免影响调试与测试。
优化的实际效益会因项目规模与结构而不同,对于跨设备共享大量资源的应用程序,新的集成流程可能带来明显的大小缩减,小型应用虽然空间节省有限,但仍能受益于更一致的缩减结果。Google提供的数据显示,部分项目的安装包大小甚至可降低超过50%。
AGP 8.12仅提供此功能作为选项,开发者需手动打开,不过,从AGP 9.0开始,优化资源缩减就会成为默认行为,只要项目激活了资源缩减,便自动使用新的集成流程。