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

mwngjboj  于 2022-11-14  发布在  Android
关注(0)|答案(5)|浏览(659)

测试设置

我构建 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时,没有错误
在AndroidKotlin库中,我使用:

我在我的机器上使用 Java 8(OpenJDK),并验证了在另一台计算机上发生了相同的错误。

实验

  • 当我使用Gradle 5部署库并使用Gradle 5或Gradle 6构建应用时,这两种情况下都可以正常工作。

问题

从5级到6级的什么变化导致了 aar 被打破(?)

发现

  • 我看了一下在mavenLocal()中部署的文件:

~/.m2/资源库/信息/元数据/Kotlin/库/路标
道路标志
第4.0.0条
│ │ 道路标志-4.0.0.aar
│ │ - -道路标志-4.0.0-javadoc.jar
│ │ ──道路标志-4.0.0.模块
│ │ 道路标志-4.0.0.pom
│ │ ──路标-4.0.0-sources.jar
── maven元数据-本地. xml

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

  • 此外,只有在使用Gradle 6部署时才有roadsigns-4.0.0.module文件。
  • 当我手动从使用Gradle 6部署的文件中删除“新”do_not_remove: published-with-gradle-metadata部分时,应用成功构建!问题仍然存在......这是怎么回事?!
fgw7neuy

fgw7neuy1#

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

...
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(应用程序)
  • 将android . compileSdk从30更改为31
  • 将android .默认配置. targetSdk从30更改为31
  • 文件-〉将项目与Gradle文件同步
monwx1rj

monwx1rj2#

该问题很可能来自您用于发布库的插件(digital.wup:android-maven-publish:3.6.3)和相当废弃的bintray Gradle插件,该插件尚未更新以支持Gradle元数据。
我敢打赌,由于这两个插件的工作方式,在Gradle 6消费者项目中优先于pom.xml文件内容的.module文件填充不当。
幸运的是,Android Gradle插件中现在内置了maven-publish支持(因此是第一方),它记录在这里:https://developer.android.com/studio/build/maven-publish-plugin
使用它,您可以发布到mavenLocal、bintray和任何其他适当的maven存储库。
您应该没有任何问题,如果您使用,而不是任何第三方替代品。

jpfvwuh4

jpfvwuh43#

我也有同样的问题。我找到了一个临时的解决办法:将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'来解决这个问题。

yxyvkwin

yxyvkwin4#

我的解决方案是下载库包,将LICENSE和其他文件复制到src/main-〉new“Java Resources Folder”-〉new“META-INF”文件夹

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

toe950275#

这个问题是由于这个实现'androidx.core:core-ktx:1.9.0'造成的
更改版本ktx:从1.9.0到1.7.0的实现'androidx.内核:内核-ktx:1.7.0'

相关问题