Android / 执行任务checkDebugAarMetadata失败 / 在执行CheckAarMetadataWorkAction时出现故障

17

TL'DR:这个Android Kotlin库中,我从Gradle 5.6.4更新到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 5或Gradle 6构建应用程序时,在这两种情况下都可以工作。
问题
什么导致从Gradle 5到Gradle 6的更改使得aar文件损坏?
结果
  • 我查看了在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.xml

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

    Diff of roadsigns-4.0.0.pom files

  • 此外,只有当我使用Gradle 6部署时才有一个roadsigns-4.0.0.module文件。

  • 当我手动从使用Gradle 6部署的文件中删除“new”do_not_remove: published-with-gradle-metadata部分时,应用程序可以成功构建!问题仍然存在...发生了什么?!

5个回答

11

我遇到了很多这些错误:

...
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(app)
  • 将android的compileSdk从30改为31
  • 将android的defaultConfig的targetSdk从30改为31
  • 文件 -> 与Gradle文件同步项目
  • 您可能需要根据您的SDK级别来调整这些值(当前工作34)。

2
我有不同的依赖关系,遇到了相同的问题。将compileSdk升级到31有所帮助。谢谢。 - Srivaths A

4
很可能出现问题的原因是您使用的插件来发布库(digital.wup:android-maven-publish:3.6.3)以及相当被遗弃的bintray Gradle插件,它没有更新以支持Gradle元数据。

我敢打赌,在这两个插件工作方式的影响下,优先于Gradle 6消费者项目中的文件内容的.module文件填充不正确。
幸运的是,Android Gradle插件现在内置了maven-publish支持(第一方),并在此处记录:https://developer.android.com/studio/build/maven-publish-plugin 使用它,您可以发布到mavenLocal、bintray和任何其他适当的maven存储库,如果您使用它而不是任何第三方替代品,则不应该有任何问题。

1
谢谢,那也是我的怀疑。我现在已经成功迁移了这个项目。 - JJD

4

我有相同的问题。我找到了一个临时解决方案:

将错误模块添加 aar 后缀并使其可传递(否则您将丢失依赖项),例如:

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

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

更改为:

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

编译错误消失了。

正如Louis CAD所说,您可以使用内置的“maven-publish”来解决此问题。


1
是的,这个解决方法有效。谢谢。不过,我还是想知道为什么它在之前的Gradle版本中能够正常工作,而现在却不能了。 - JJD

0

我的解决方案是下载库包,将LICENSE和其他文件复制到src/main->新建"Java资源文件夹" -> 新建"META-INF"文件夹

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

-1
问题出在这里 implementation 'androidx.core:core-ktx:1.9.0'
将版本ktx: 1.9.0改为1.7.0 implementation 'androidx.core:core-ktx:1.7.0'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接