自定义Gradle任务同步失败:找不到compileDebugSources任务求助
问题分析与解决方案
首先,你遇到的compileDebugSources任务找不到的问题,本质是Android Gradle Plugin(AGP)版本更新带来的任务结构变化——在较新的AGP版本中,像compileDebugSources这类细分编译任务已经被封装为内部任务,不再对外暴露,自然无法直接通过名称引用。
为什么打印任务列表看不到这些任务?
AGP为了优化构建效率、实现增量构建,把很多底层细分任务(比如编译、资源处理等)隐藏了,只对外暴露语义化的顶层任务(比如assembleDebug、installDebug)。你打印出的任务列表都是AGP公开的顶层任务,那些细分任务属于内部实现逻辑,不会出现在tasks集合里。
修正后的任务配置方案
你想要的是按clean→编译→打包→安装→上传Crashlytics的顺序执行流程,其实不需要依赖那些隐藏的细分任务,直接用公开的顶层任务就能实现,而且AGP本身已经维护了这些任务的依赖关系,我们只需要保证自定义任务的执行顺序即可:
task fabricUploadDebug { // 依赖顶层任务,AGP会自动处理它们的内部依赖链 dependsOn 'clean', 'installDebug', 'crashlyticsUploadDistributionDebug' // 明确执行顺序:clean先执行,然后是installDebug(它会自动触发assembleDebug、编译等前置任务),最后执行上传 tasks.getByName('installDebug').mustRunAfter('clean') tasks.getByName('crashlyticsUploadDistributionDebug').mustRunAfter('installDebug') }
如果你的fabricUploadDebug确实需要是Exec类型(比如要执行额外命令),可以补充commandLine配置,示例如下:
task fabricUploadDebug(type: Exec) { dependsOn 'clean', 'installDebug', 'crashlyticsUploadDistributionDebug' tasks.getByName('installDebug').mustRunAfter('clean') tasks.getByName('crashlyticsUploadDistributionDebug').mustRunAfter('installDebug') // 这里添加你需要执行的自定义命令,比如打印日志 commandLine 'echo', 'Fabric上传流程执行完成!' }
额外说明
assembleDebug已经包含了所有编译、打包的完整流程,installDebug又默认依赖assembleDebug,所以不需要单独依赖compileDebugSources和assembleDebug,AGP会自动按顺序执行它们。- 如果需要更细粒度的构建控制,可以参考AGP官方文档,使用它提供的公开任务和Provider API来关联任务,避免直接引用内部任务。
内容的提问来源于stack exchange,提问作者NickUnuchek
相关产品推荐
相关产品推荐

