blueSheep
blueSheep

Reputation: 23

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

I am trying to update the following dependencies in my app from version 2.2.2 to 2.3.0

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

As soon as I try to build the app with the new dependency versions I get the following error:

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')

When I looked at the artifacts I noticed, that since version 2.3.0 there now is an extra module file, which contains this "releaseApiPublication" variant.

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"
        }
      ]
    }
  ]
}

Does that mean that I have to make changes to the way I include these dependencies, or is the error unreleated to this new module file?

Upvotes: 2

Views: 1837

Answers (1)

Thomas Keller
Thomas Keller

Reputation: 6060

For me the issue was fixed when I pulled these Android-specific dependencies down to a Gradle module that actually had an Android Gradle plugin applied, because that created the needed "aar" attributes that were needed for consumption. Previously I had both dependencies applied to a pure JVM module, which worked with 2.2.2, but stopped in 2.3.0 as you showed here.

Upvotes: 4

Related Questions