AGP 8.1.0发布MavenCentral遇sources.jar冲突错误求助
解决AGP 8.1.0发布MavenCentral时sources.jar冲突问题
问题根源
AGP 8.0+版本开始,会自动为release变体生成包含未混淆源码的sources.jar并添加到发布组件中,这和你自定义的androidSourcesJar任务生成的同classifier的jar包冲突,导致发布失败。
解决办法
办法1:禁用AGP自动生成的Sources Jar
在模块的build.gradle中配置发布变体,关闭自动生成sources jar的功能,这样就能继续使用你自定义的任务:
android { publishing { singleVariant("envProdRelease") { withSourcesJar = false // 关闭自动生成的sources jar } } }
配置完成后,原发布配置里的artifact androidSourcesJar可以保留,不会再出现冲突。
办法2:复用AGP自动生成的Sources任务并修改逻辑
AGP会为envProdRelease变体自动生成名为envProdReleaseSourcesJar的任务,你可以直接修改这个任务的配置,替换成你需要的混淆后源码逻辑,无需再自定义任务:
// 找到自动生成的sources任务并修改其配置 tasks.named('envProdReleaseSourcesJar', Jar) { archiveClassifier.set('sources') // 在这里添加你原来androidSourcesJar任务中的所有逻辑 // 比如指定源码目录、过滤文件等 }
之后发布配置中只需保留from components.envProdRelease,删除artifact androidSourcesJar即可,因为自动生成的任务已经输出你需要的源码包。
办法3:移除自定义任务,直接修改自动任务的输出
如果不想保留自定义任务,直接调整AGP自动生成的任务,让它输出符合要求的源码:
tasks.named("envProdReleaseSourcesJar") { // 覆盖默认的源码目录,替换为你需要的混淆后源码路径 from android.sourceSets.main.java.srcDirs // 添加你需要的其他过滤、打包逻辑 }
同样,发布时直接依赖components.envProdRelease即可,无需额外添加artifact。
验证
配置完成后,执行publishToMavenLocal任务测试,确认冲突消失,且发布的sources.jar是你需要的版本。
内容的提问来源于stack exchange,提问作者Evgeniy Mishustin
相关产品推荐
相关产品推荐

