TL'DR: In this Android Kotlin library I updated from Gradle 5.6.4 to 6.6.1 (commit d5d8d2
). Now I cannot build a project depending on the aar anymore.
Test setup
I build and deploy the aar to mavenLocal ...
$ ./gradlew clean :roadsigns:assemble
$ ./gradlew publishToMavenLocal
... and then reference the deployed library artifact in the sample Android app
module. First I add mavenLocal()
in the root build.gradle file:
allprojects {
repositories {
google()
mavenCentral()
jcenter()
mavenLocal() // <-- Add this
}
}
I reference the mavenLocal()
dependency directly:
dependencies {
implementation
// implementation project(":roadsigns")
implementation "info.metadude.kotlin.library.roadsigns:roadsigns:$version"
implementation Libs.kotlinStdlib
// ...
The error
When I build the sample app then I get the following build error:
$ ./gradlew clean assembleDebug
Execution failed for task ':checkDebugAarMetadata'.
> Multiple task action failures occurred:
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction
> A dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties) does
not specify an aarFormatVersion value, which is a required value.
Dependency: info.metadude.kotlin.library.roadsigns:roadsigns:4.0.0.
AAR metadata file: /home/USERNAME/.m2/repository/info/metadude/kotlin/library/roadsigns/roadsigns/4.0.0/roadsigns-4.0.0-javadoc.jar.
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction
> A dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties) does
not specify an aarFormatVersion value, which is a required value.
Dependency: info.metadude.kotlin.library.roadsigns:roadsigns:4.0.0.
AAR metadata file: /home/USERNAME/.m2/repository/info/metadude/kotlin/library/roadsigns/roadsigns/4.0.0/roadsigns-4.0.0-sources.jar.
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction
> A dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties) does
not specify an aarFormatVersion value, which is a required value.
Dependency: info.metadude.kotlin.library.roadsigns:roadsigns:4.0.0.
AAR metadata file: /home/USERNAME/.m2/repository/info/metadude/kotlin/library/roadsigns/roadsigns/4.0.0/roadsigns-4.0.0.aar.
Context information
When I try the same with Gradle 5.6.4 then there is no error.
In the Android Kotlin library I am using:
I using Java 8 (OpenJDK) on my machine and verified that the same error occurs on a different computer.
Experiments
- When I deploy the library with Gradle 5 and build the app with Gradle 5 or Gradle 6 in both cases it works.
The question
What changed from Gradle 5 to Gradle 6 which causes the aar to be broken (?)
Findings
I took a look at the files being deployed in
mavenLocal()
:~/.m2/repository/info/metadude/kotlin/library/roadsigns
└── roadsigns
├── 4.0.0
│ ├── roadsigns-4.0.0.aar
│ ├── roadsigns-4.0.0-javadoc.jar
│ ├── roadsigns-4.0.0.module
│ ├── roadsigns-4.0.0.pom
│ └── roadsigns-4.0.0-sources.jar
└── maven-metadata-local.xmlI compared the files deployed with Gradle 5 and Gradle 6. Interestingly, the
roadsigns-4.0.0.aar
files are binary equivalent. Thepom
file differs, though:Also there is a
roadsigns-4.0.0.module
file only when I deploy with Gradle 6.When I manually remove the "new"
do_not_remove: published-with-gradle-metadata
part from the file deployed with Gradle 6 then the app builds successfully! The question remains ... what's going on here?!