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

Gradle传递依赖版本未生效:play-services-tasks超出设定范围

问题分析与解决方案

为什么版本范围没起作用?

你遇到的核心问题是Maven的版本范围约束在Gradle依赖解析中不具备强制性。Gradle默认的依赖解析策略是选择所有依赖路径中版本最高的那个,哪怕某个库指定了版本范围,只要有其他依赖(比如firebase-crashlytics)引入了更高版本的play-services-tasks,Gradle就会优先选高版本,而且不会触发报错——因为版本范围只是“建议”,不是“强制要求”。

另外,你的库用Maven(pom.xml)构建,但应用用Gradle,两者对版本范围的处理逻辑有差异:Maven的范围在依赖传递时只是给下游一个版本建议,Gradle不会严格遵守这个范围,除非你显式添加强制约束。

解决办法

1. 在你的库中添加强制版本约束

如果希望所有依赖你的库的应用都必须使用[17.2,17.3)范围内的版本,可以在库的pom.xml中通过dependencyManagement块来强制约束:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.google.android.gms</groupId>
            <artifactId>play-services-tasks</artifactId>
            <version>[17.2,17.3)</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>

2. 在应用端主动锁定版本

如果无法修改库的配置,可以在应用的build.gradle.kts中用resolutionStrategy锁定play-services-tasks的版本:

configurations.all {
    resolutionStrategy {
        force("com.google.android.gms:play-services-tasks:17.2.1")
    }
}

也可以用Gradle版本目录(libs.versions.toml)统一管理,确保所有依赖都指向指定范围:

[versions]
gmsTasks = "[17.2,17.3)"

[libraries]
gms-tasks = { group = "com.google.android.gms", name = "play-services-tasks", version.ref = "gmsTasks" }

3. 对齐Firebase与GMS服务版本

注意:Firebase依赖和Google Play Services依赖通常需要版本对齐,firebase-crashlytics引入18.1.0的play-services-tasks,说明你使用的Crashlytics版本对应的GMS服务版本就是18.x。强行降级tasks版本可能出现兼容性问题,这种情况下可以:

  • 升级你的库,将play-services-tasks的版本范围调整为兼容18.x的版本(比如[18.0,19))
  • 降级firebase-crashlytics的版本,使其引入的tasks版本落在[17.2,17.3)范围内

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:33:19