【问题标题】:Android / Execution failed for task checkDebugAarMetadata / A failure occurred while executing CheckAarMetadataWorkActionAndroid / 任务 checkDebugAarMetadata 执行失败 / 执行 CheckAarMetadataWorkAction 时发生故障
【发布时间】:2021-03-04 19:44:09
【问题描述】:

TL'DR:this Android Kotlin libraryupdated from Gradle 5.6.4 to 6.6.1(提交d5d8d2)。现在我不能再依赖 aar 来构建项目了。

测试设置

我构建并部署 aarmavenLocal ...

$ ./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 5 或 Gradle 6 构建应用时,这两种情况都可以正常工作。

问题

从 Gradle 5 到 Gradle 6 的哪些变化导致 aar 被破坏 (?)

调查结果

  • 我查看了mavenLocal()中正在部署的文件:

    ~/.m2/repository/info/metadude/kotlin/library/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.xml

  • 我比较了使用 Gradle 5 和 Gradle 6 部署的文件。有趣的是,roadsigns-4.0.0.aar 文件是二进制等效的。不过,pom 文件有所不同:

  • 还有一个 roadsigns-4.0.0.module 文件,只有当我使用 Gradle 6 进行部署时。

  • 当我手动从使用 Gradle 6 部署的文件中删除“新”do_not_remove: published-with-gradle-metadata 部分时,应用程序构建成功!问题仍然存在……这是怎么回事?!

【问题讨论】:

    标签: android gradle android-library aar maven-publish


    【解决方案1】:

    我遇到了很多这样的错误:

    ...
    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-3\4e8a32482e233cfbbc450e03aabed8dd\transformed\lifecycle-livedata-core-2.4.0\META-INF\com\android\build\gradle\aar-metadata.properties.
    ...
    

    我做了什么来解决它

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

    【讨论】:

    • 我有不同的依赖关系并且面临同样的问题。将 compileSdk 升级到 31 有所帮助。谢谢。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    【解决方案3】:

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

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

    报“未指定aarFormatVersion”错误,编译失败。

    改为:

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

    编译错误消失了。

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

    【讨论】:

    • 是的,解决方法有效。谢谢你。不过,我想了解为什么它像以前的 Gradle 版本一样停止工作。
    猜你喜欢
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2021-07-29
    • 2019-12-27
    • 2020-09-19
    • 1970-01-01
    • 2022-08-21
    相关资源
    最近更新 更多