You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义Android Gradle插件致应用体积大幅增加30MB问题排查

问题原因分析及排查方向

1. Gradle API/插件依赖被误打包进APK

project.tasks.whenTaskAdded的逻辑如果不小心修改了主应用的编译/打包类路径,很可能会把buildSrc依赖的gradle-api.jar、groovy-all.jar这类体积庞大的库(单文件就可能超过20MB)引入到最终APK中。比如如果你的插件逻辑里写了类似下面的错误代码:

project.tasks.whenTaskAdded { task ->
    if (task.name.contains("compile")) {
        // 错误:把buildSrc的依赖加到了主应用编译类路径
        task.classpath += project.buildscript.configurations.classpath
    }
}

这类操作会直接把Gradle构建脚本的依赖库塞进APK,导致体积暴增。

2. 任务监听逻辑引入了冗余依赖

当你通过whenTaskAdded监听打包相关任务(比如mergeAssets、mergeClasses)时,若逻辑中错误地将buildSrc模块的资源、类文件或者第三方依赖添加到了主应用的打包资源/类集合里,就会额外增加体积。比如误将buildSrc的输出jar包加入到主应用的依赖中:

project.tasks.whenTaskAdded { task ->
    if (task instanceof MergeClassesTask) {
        // 错误:把buildSrc的产物加到了主应用类集合
        task.inputs.files(project.buildDir.file("buildSrc/libs/custom-plugin.jar"))
    }
}

3. 破坏了R8/ProGuard的代码裁剪

whenTaskAdded的逻辑如果修改了任务的输入输出规则,可能导致Gradle的增量构建缓存失效,或者让R8无法正确识别哪些代码是无用的。比如插件强制保留了某些本来会被裁剪的类,或者修改了混淆规则的生成逻辑,导致大量冗余代码没有被移除,最终体现在APK体积上。

4. buildSrc的依赖泄漏

buildSrc模块的依赖默认是和主应用隔离的,但如果你的插件通过反射、动态类加载或者修改类加载器的方式,让主应用的类加载器加载了buildSrc的依赖类,打包工具会误以为这些类是主应用的依赖,从而将它们打包进APK。


内容的提问来源于stack exchange,提问作者ssssssshhhhhh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 04:35:00