【问题标题】:Can't build in offline mode. "No cached version listing for androidx.fragment:fragment:[1.2.0] available for offline mode"无法在离线模式下构建。 “没有 androidx.fragment 的缓存版本列表:fragment:[1.2.0] 可用于离线模式”
【发布时间】:2020-08-22 17:42:33
【问题描述】:

我希望能够离线处理我的项目。所以我禁用离线模式,按下“使用 gradle 文件同步项目”按钮,然后启用离线模式并尝试构建。但是,每次我这样做时,我都会收到错误:

FAILURE: Build failed with an exception.

*What went wrong:

Could not determine the dependencies of task ':app:compileDebugRenderscript'.
  > Could not resolve all task dependencies for configuration ':app:debugCompileClasspath'.
      > Could not resolve androidx.fragment:fragment:[1.2.0].
        Required by
           project :app > androidx.fragment:fragment-ktx:1.2.0
               > No cached version listing for androidx.fragment:fragment:[1.2.0] available for offline mode.
               > No cached version listing for androidx.fragment:fragment:[1.2.0] available for offline mode. 

我还尝试过使缓存/重新启动无效,然后在启用离线模式之前进行 gradle 同步,结果相同。

我正在运行 Android Studio 3.6.3

gradle-wrapper.properties 包含以下内容:

distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip

如何使 androidx.fragment:fragment 可用于离线模式?

【问题讨论】:

标签: android android-studio


【解决方案1】:

很可能存在依赖关系解析问题。当多个组件使用相同的依赖项但版本不同时,Gradle 会上线以确定要使用的版本。这显然在离线模式下不起作用。

我假设您在其他地方使用了不同的片段依赖项 (androidx.fragment:fragment),在在线模式下默认选择该片段依赖项。现在处于离线模式,由于无法进行此类检查,Gradle 会查找版本 1.2.0androidx.fragment:fragment-ktx:1.2.0 需要)并且找不到它,因为 if 从未下载/缓存。

更好的解决方案是尝试使您的依赖项引用相同版本的冲突子依赖项。您可以使用 ./gradlew app:dependencies 检查您的依赖关系树并更新冲突的依赖关系,以便它们使用相同的版本(如果可能)。

另一种解决方案是在 Gradle 中强制执行依赖关系。你可以在build.gradle 文件中添加这样的内容:

configurations.all {
    resolutionStrategy {
        if (project.gradle.startParameter.offline) {
            // x.y.z being the version that Gradle picks in the online mode.
            force 'androidx.fragment:fragment:x.y.z'
        }
    }
}

【讨论】:

    猜你喜欢
    • 2014-05-01
    • 2016-09-21
    • 2017-12-22
    • 1970-01-01
    • 2018-01-08
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多