Android / 任务 checkDebugAarMetadata 执行失败 / 执行 CheckAarMetadataWorkAction 时发生故障

Android / Execution failed for task checkDebugAarMetadata / A failure occurred while executing CheckAarMetadataWorkAction

TL'DR:this Android Kotlin library I updated from Gradle 5.6.4 to 6.6.1 中(提交 d5d8d2)。现在不能再依赖aar建项目了

测试设置

我构建 aar 并将其部署到 mavenLocal ...

$ ./gradlew clean :roadsigns:assemble
$ ./gradlew publishToMavenLocal

... 然后在示例 Android app 模块中引用已部署的库工件。首先,我在根 build.gradle 文件中添加 mavenLocal()

allprojects {
    repositories {
        google()
        mavenCentral()
        jcenter()
        mavenLocal() // <-- Add this
    }
}

我直接引用了mavenLocal()依赖:

dependencies {
    implementation
    // implementation project(":roadsigns")
    implementation "info.metadude.kotlin.library.roadsigns:roadsigns:$version"
    implementation Libs.kotlinStdlib
    // ...

错误

当我构建示例应用程序时,我得到以下 构建错误

$ ./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.

上下文信息

当我尝试使用 Gradle 5.6.4 时,没有错误

在我使用的 Android Kotlin 库中:

我在我的机器上使用 Java 8 (OpenJDK) 并验证在不同的计算机上也会出现同样的错误。

实验

问题

什么从 Gradle 5 更改为 Gradle 6 导致 aar 被破坏 (?)

调查结果

我也遇到了同样的问题。我找到了一个临时解决方案: 将 aar 后缀添加到错误模块并使其具有传递性(否则您将失去依赖性)例如:

implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"

报“not specify an aarFormatVersion”错误,编译失败。

更改为:

implementation ("androidx.lifecycle:lifecycle-extensions:2.2.0@aar") {
    transitive = true
}

编译错误消失。

AS Louis CAD 说,你可以使用内置的 'maven-publish' 来解决这个问题。

问题很可能来自您用于发布库的插件 (digital.wup:android-maven-publish:3.6.3) 和完全废弃的 bintray Gradle 插件,该插件尚未更新以支持 Gradle元数据。

我敢打赌,由于这两个插件的工作方式,.module 文件的内容优先于 Gradle 6 个消费者项目中 pom.xml 文件的内容。

幸运的是,现在 Android Gradle 插件中内置了 maven-publish 支持(所以是第一方),它记录在此处:https://developer.android.com/studio/build/maven-publish-plugin

有了它,您可以发布到 mavenLocal、bintray 和任何其他适当的 maven 存储库。

如果你使用它而不是任何第三方替代品,你应该不会有任何问题。

我 运行 犯了很多这样的错误:

...
The minCompileSdk (31) specified in a
dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties)
is greater than this module's compileSdkVersion (android-30).
Dependency: androidx.lifecycle:lifecycle-livedata-core:2.4.0.
AAR metadata file: C:\Users\CUR_USER\.gradle\caches\transforms-3e8a32482e233cfbbc450e03aabed8dd\transformed\lifecycle-livedata-core-2.4.0\META-INF\com\android\build\gradle\aar-metadata.properties.
...

我修复它的方法是

  • 打开 build.gradle(应用程序)
  • 更改android。 compileSdk 从 30
  • 到 31
  • 更改android。默认配置。 targetSdk 从 30
  • 到 31
  • 文件 -> 与 Gradle 个文件同步项目

我的解决办法是下载库包,复制LICENSE等文件到 src/main-> 新建“Java 资源文件夹”-> 新建“META-INF”文件夹

implementation 'org.apache.ftpserver:ftpserver-core:1.2.0'