AndroidX KTX 导航片段和导航 ui 的版本更新从版本 2.2.2 到 2.3.0 失败

Version update of AndroidX KTX navigation fragment and navigation ui fails from version 2.2.2 to 2.3.0

我正在尝试将我的应用程序中的以下依赖项从版本 2.2.2 更新到 2.3.0

androidx.navigation:navigation-fragment-ktx
androidx.navigation:navigation-ui-ktx

当我尝试使用新的依赖版本构建应用程序时,我收到以下错误:

Execution failed for task ':my-ui-module:kaptGenerateStubsKotlin'.
> Could not resolve all files for configuration ':my-ui-module:compileClasspath'.
   > Could not resolve androidx.navigation:navigation-fragment-ktx:2.3.0.
     Required by:
         project :my-ui-module
      > No matching variant of androidx.navigation:navigation-fragment-ktx:2.3.0 was found. The consumer was configured to find an API of a library compatible with Java 8, preferably in the form of class files, and its dependencies declared externally, as well as attribute 'org.jetbrains.kotlin.platform.type' with value 'jvm' but:
          - Variant 'releaseApiPublication' capability androidx.navigation:navigation-fragment-ktx:2.3.0 declares an API of a library, and its dependencies declared externally:
              - Incompatible because this component declares a component, with the library elements 'aar' and the consumer needed a component, preferably in the form of class files
              - Other compatible attributes:
                  - Doesn't say anything about its target Java version (required compatibility with Java 8)
                  - Doesn't say anything about org.jetbrains.kotlin.platform.type (required 'jvm')
          - Variant 'releaseRuntimePublication' capability androidx.navigation:navigation-fragment-ktx:2.3.0 declares a runtime of a library, and its dependencies declared externally:
              - Incompatible because this component declares a component, with the library elements 'aar' and the consumer needed a component, preferably in the form of class files
              - Other compatible attributes:
                  - Doesn't say anything about its target Java version (required compatibility with Java 8)
                  - Doesn't say anything about org.jetbrains.kotlin.platform.type (required 'jvm')
          - Variant 'sourcesElements' capability androidx.navigation:navigation-fragment-ktx:2.3.0 declares a runtime of a component, and its dependencies declared externally:
              - Incompatible because this component declares documentation and the consumer needed a library
              - Other compatible attributes:
                  - Doesn't say anything about its target Java version (required compatibility with Java 8)
                  - Doesn't say anything about its elements (required them preferably in the form of class files)
                  - Doesn't say anything about org.jetbrains.kotlin.platform.type (required 'jvm')
   > Could not resolve androidx.navigation:navigation-ui-ktx:2.3.0.
     Required by:
         project :my-ui-module
      > No matching variant of androidx.navigation:navigation-ui-ktx:2.3.0 was found. The consumer was configured to find an API of a library compatible with Java 8, preferably in the form of class files, and its dependencies declared externally, as well as attribute 'org.jetbrains.kotlin.platform.type' with value 'jvm' but:
          - Variant 'releaseApiPublication' capability androidx.navigation:navigation-ui-ktx:2.3.0 declares an API of a library, and its dependencies declared externally:
              - Incompatible because this component declares a component, with the library elements 'aar' and the consumer needed a component, preferably in the form of class files
              - Other compatible attributes:
                  - Doesn't say anything about its target Java version (required compatibility with Java 8)
                  - Doesn't say anything about org.jetbrains.kotlin.platform.type (required 'jvm')
          - Variant 'releaseRuntimePublication' capability androidx.navigation:navigation-ui-ktx:2.3.0 declares a runtime of a library, and its dependencies declared externally:
              - Incompatible because this component declares a component, with the library elements 'aar' and the consumer needed a component, preferably in the form of class files
              - Other compatible attributes:
                  - Doesn't say anything about its target Java version (required compatibility with Java 8)
                  - Doesn't say anything about org.jetbrains.kotlin.platform.type (required 'jvm')
          - Variant 'sourcesElements' capability androidx.navigation:navigation-ui-ktx:2.3.0 declares a runtime of a component, and its dependencies declared externally:
              - Incompatible because this component declares documentation and the consumer needed a library
              - Other compatible attributes:
                  - Doesn't say anything about its target Java version (required compatibility with Java 8)
                  - Doesn't say anything about its elements (required them preferably in the form of class files)
                  - Doesn't say anything about org.jetbrains.kotlin.platform.type (required 'jvm')

当我查看我注意到的工件时,从版本 2.3.0 开始,现在有一个额外的模块文件,其中包含这个“releaseApiPublication”变体。

navigation-fragment-ktx-2.3.0.module:

{
  "formatVersion": "1.1",
  "component": {
    "group": "androidx.navigation",
    "module": "navigation-fragment-ktx",
    "version": "2.3.0",
    "attributes": {
      "org.gradle.status": "release"
    }
  },
  "createdBy": {
    "gradle": {
      "version": "6.4",
      "buildId:": "6592867"
    }
  },
  "variants": [
    {
      "name": "releaseApiPublication",
      "attributes": {
        "org.gradle.category": "library",
        "org.gradle.dependency.bundling": "external",
        "org.gradle.libraryelements": "aar",
        "org.gradle.usage": "java-api"
      },
      "dependencies": [
        {
          "group": "androidx.navigation",
          "module": "navigation-fragment",
          "version": {
            "requires": "2.3.0"
          }
        },
        {
          "group": "androidx.navigation",
          "module": "navigation-runtime-ktx",
          "version": {
            "requires": "2.3.0"
          }
        },
        {
          "group": "androidx.fragment",
          "module": "fragment-ktx",
          "version": {
            "requires": "1.2.4"
          }
        },
        {
          "group": "androidx.lifecycle",
          "module": "lifecycle-viewmodel-ktx",
          "version": {
            "requires": "2.2.0"
          }
        },
        {
          "group": "org.jetbrains.kotlin",
          "module": "kotlin-stdlib",
          "version": {
            "requires": "1.3.71"
          }
        }
      ],
      "files": [
        {
          "name": "navigation-fragment-ktx-2.3.0.aar",
          "url": "navigation-fragment-ktx-2.3.0.aar",
          "size": 17267,
          "sha512": "db57f768201ac1f662a9ff889698bd33e5593862c88bf226550060b9e16770ee178bc6c9b25ad31f598b63b7144169e78424f68cfdb7c8486a7ed5e03103a2ca",
          "sha256": "fbff4ba82564f53e13c3f64402be56a391f1a20bc983557beeff9c07ca0593dd",
          "sha1": "9e0e91461ada5a697974a0195c38a163366ea9c7",
          "md5": "eec5cb60dd0e8b638125e91c08d21c4c"
        }
      ]
    },
    {
      "name": "releaseRuntimePublication",
      "attributes": {
        "org.gradle.category": "library",
        "org.gradle.dependency.bundling": "external",
        "org.gradle.libraryelements": "aar",
        "org.gradle.usage": "java-runtime"
      },
      "dependencies": [
        {
          "group": "androidx.navigation",
          "module": "navigation-fragment",
          "version": {
            "requires": "2.3.0"
          }
        },
        {
          "group": "androidx.navigation",
          "module": "navigation-runtime-ktx",
          "version": {
            "requires": "2.3.0"
          }
        },
        {
          "group": "androidx.fragment",
          "module": "fragment-ktx",
          "version": {
            "requires": "1.2.4"
          }
        },
        {
          "group": "androidx.lifecycle",
          "module": "lifecycle-viewmodel-ktx",
          "version": {
            "requires": "2.2.0"
          }
        },
        {
          "group": "org.jetbrains.kotlin",
          "module": "kotlin-stdlib",
          "version": {
            "requires": "1.3.71"
          }
        }
      ],
      "files": [
        {
          "name": "navigation-fragment-ktx-2.3.0.aar",
          "url": "navigation-fragment-ktx-2.3.0.aar",
          "size": 17267,
          "sha512": "db57f768201ac1f662a9ff889698bd33e5593862c88bf226550060b9e16770ee178bc6c9b25ad31f598b63b7144169e78424f68cfdb7c8486a7ed5e03103a2ca",
          "sha256": "fbff4ba82564f53e13c3f64402be56a391f1a20bc983557beeff9c07ca0593dd",
          "sha1": "9e0e91461ada5a697974a0195c38a163366ea9c7",
          "md5": "eec5cb60dd0e8b638125e91c08d21c4c"
        }
      ]
    },
    {
      "name": "sourcesElements",
      "attributes": {
        "org.gradle.category": "documentation",
        "org.gradle.dependency.bundling": "external",
        "org.gradle.docstype": "sources",
        "org.gradle.usage": "java-runtime"
      },
      "files": [
        {
          "name": "navigation-fragment-ktx-2.3.0-sources.jar",
          "url": "navigation-fragment-ktx-2.3.0-sources.jar",
          "size": 6257,
          "sha512": "a6b68eb7fa8aeee59fc5e8e204415e67b286000163164b5b28d39e878870811987758b36cbff5b8f27a80cc5519f6312101e5c612853dc55d7134b0121bbd2b4",
          "sha256": "4cf53654f02d796c3ca1338f2c5c4a3d94045c524f6b88db150f3e218a64a914",
          "sha1": "9bebacd34921c1dd65c0cf5ceb32f70e8c7b17b9",
          "md5": "5473b099adf68016e77bd7472e687a4c"
        }
      ]
    }
  ]
}

这是否意味着我必须更改我包含这些依赖项的方式,或者错误是否与这个新模块文件无关?

对我来说,当我将这些 Android-specific 依赖项拉到实际上应用了 Android Gradle 插件的 Gradle 模块时,问题就解决了,因为它创建了消费所需的所需“aar”属性。以前我将这两个依赖项应用于纯 JVM 模块,该模块适用于 2.2.2,但如您在此处所示,在 2.3.0 中停止。