gpt4 book ai didi

android - Gradle离线同步问题

转载 作者:行者123 更新时间:2023-12-02 14:56:15 26 4
gpt4 key购买 nike

我在离线模式下使用 gradle 时遇到问题:当未选中离线时,我可以正常运行我的项目,然后,我需要离线工作(因为我正在乘坐火车),并且在不触及任何 gradle 文件的情况下,会抛出此错误:

 > Could not resolve com.google.android.gms:play-services-basement:[15.0.1,16.0.0).
Required by:
project :app > com.google.android.gms:play-services-ads:15.0.1
project :app > com.google.android.gms:play-services-ads-lite:15.0.1
project :app > com.google.android.gms:play-services-gass:15.0.1
> No cached version listing for com.google.android.gms:play-services-basement:[15.0.1,16.0.0) available for offline mode.

为什么在上次在线同步期间没有缓存此依赖项?我怎样才能在没有任何互联网连接的情况下构建这个项目?

最佳答案

该问题可能与来自您的构建的多个更高级别依赖项隐式需要的 com.google.android.gms:play-services-basement 依赖项版本冲突有关 .gradle.

以下步骤介绍了如何诊断相同的问题,但具有 com.google.android.gms:play-services-ads-identifier(在下面的示例中使用)依赖项。

以“app”为例,因此请用您的 app_module 的实际名称替换app

先决条件(初始问题案例):

我的build.gradle具有以下内容:

...
implementation 'com.google.android.gms:play-services-ads:15.0.1'
implementation 'com.google.android.gms:play-services-analytics:17.0.0'
...

当未选择“离线工作”时,运行 Gradle 同步可以正常工作。但是一旦我打开离线工作,在 gradle 同步过程中就会弹出以下错误:

:app@debug/compileClasspath': Could not resolve com.google.android.gms:play-services-ads-identifier:[15.0.1,16.0.0).
Disable offline mode and sync project
Show Details
Affected Modules: app
...

诊断步骤:

  1. 打印所有引用 play-services-ads-identifier 依赖项的位置
./gradlew :app:dependencyInsight --configuration releaseRuntimeClasspath --dependency "com.google.android.gms:play-services-ads-identifier"

就我而言,在所有输出中我看到以下几行:

...
com.google.android.gms:play-services-ads-identifier:17.0.0
+--- com.google.android.gms:play-services-analytics-impl:17.0.0
| +--- com.google.android.gms:play-services-analytics:17.0.0 (requested com.google.android.gms:play-services-analytics-impl:[17.0.0])
| |
...
...
com.google.android.gms:play-services-ads-identifier:[15.0.1,16.0.0) -> 17.0.0
\--- com.google.android.gms:play-services-ads:15.0.1
+--- releaseRuntimeClasspath
...

线路

com.google.android.gms:play-services-ads-identifier:[15.0.1,16.0.0) -> 17.0.0

表示存在冲突,play-services-ads-identifier 的版本已解析为 17.0.0,而最初请求的是 15.0.1。

  • 接下来最重要要注意的是play-services-ads-identifier的引用来源。这是在输出中依赖项名称后面的下一行中指定的,在我的具体情况下,这些源是
    1. com.google.android.gms:play-services-analytics-impl:17.0.0
    2. com.google.android.gms:play-services-ads:15.0.1
  • 因为我知道这两个依赖项是我的顶级依赖项(即在 build.gradle 中明确指定)。现在我有以下选择来解决这个问题。

    解决方案1
    我可以避免版本冲突e。 G。通过升级com.google.android.gms:play-services-ads:15.0.1com.google.android.gms:play-services-ads:17.0.0 app 模块中的 build.gradle。这样做可以让 Gradle 在选择离线工作时成功同步。

    解决方案2
    保留依赖关系但排除冲突的模块。 IE。改变

    implementation 'com.google.android.gms:play-services-ads:15.0.1'

    implementation ('com.google.android.gms:play-services-ads:15.0.1') {
    exclude group: 'com.google.android.gms', module: 'play-services-ads-identifier'
    }

    完成此操作后,我将面临更多同步错误,因为很少有底层依赖项存在冲突。结果,我将得到以下结果:

    implementation ('com.google.android.gms:play-services-ads:15.0.1') {
    exclude group: 'com.google.android.gms', module: 'play-services-ads-identifier'
    exclude group: 'com.google.android.gms', module: 'play-services-base'
    exclude group: 'com.google.android.gms', module: 'play-services-basement'
    }

    这使得 Gradle 也离线工作

    注意:在您的情况下,可能会在上面显示的 dependencyInsight 命令的树状输出中更深入地找到导致冲突的源依赖项。

    <小时/>

    我使用的环境:
    macOS 上的 Android Studio v3.5.2、Gradle 插件 v3.5.2、Gradle v5.6.4

    关于android - Gradle离线同步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54792730/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com