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

JJD*_*JJD 18 android gradle android-library aar maven-publish

TL\'DR:此 Android Kotlin 库中,我从 Gradle 5.6.4 更新到 6.6.1(提交d5d8d2)。现在我无法再依赖 aar 来构建项目了。

\n

测试设置

\n

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

\n
$ ./gradlew clean :roadsigns:assemble\n$ ./gradlew publishToMavenLocal\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
allprojects {\n    repositories {\n        google()\n        mavenCentral()\n        jcenter()\n        mavenLocal() // <-- Add this\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

mavenLocal()直接引用依赖项:

\n
dependencies {\n    implementation\n    // implementation project(":roadsigns")\n    implementation "info.metadude.kotlin.library.roadsigns:roadsigns:$version"\n    implementation Libs.kotlinStdlib\n    // ...\n
Run Code Online (Sandbox Code Playgroud)\n

错误

\n

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

\n
$ ./gradlew clean assembleDebug\n\nExecution failed for task \':checkDebugAarMetadata\'.\n> Multiple task action failures occurred:\n\n   > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction\n      > A dependency\'s AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties) does\n        not specify an aarFormatVersion value, which is a required value.\n        Dependency: info.metadude.kotlin.library.roadsigns:roadsigns:4.0.0.\n        AAR metadata file: /home/USERNAME/.m2/repository/info/metadude/kotlin/library/roadsigns/roadsigns/4.0.0/roadsigns-4.0.0-javadoc.jar.\n\n   > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction\n      > A dependency\'s AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties) does\n        not specify an aarFormatVersion value, which is a required value.\n        Dependency: info.metadude.kotlin.library.roadsigns:roadsigns:4.0.0.\n        AAR metadata file: /home/USERNAME/.m2/repository/info/metadude/kotlin/library/roadsigns/roadsigns/4.0.0/roadsigns-4.0.0-sources.jar.\n\n   > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction\n      > A dependency\'s AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties) does\n        not specify an aarFormatVersion value, which is a required value.\n        Dependency: info.metadude.kotlin.library.roadsigns:roadsigns:4.0.0.\n        AAR metadata file: /home/USERNAME/.m2/repository/info/metadude/kotlin/library/roadsigns/roadsigns/4.0.0/roadsigns-4.0.0.aar.\n
Run Code Online (Sandbox Code Playgroud)\n

上下文信息

\n

当我尝试使用 Gradle 5.6.4 进行相同操作时,没有错误

\n

在我使用的 Android Kotlin 库中:

\n\n

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

\n

实验

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

问题

\n

从 Gradle 5 到 Gradle 6 发生了什么变化导致 aar破坏(?)

\n

发现

\n
    \n
  • 我查看了正在部署的文件mavenLocal()

    \n

    ~/.m2/repository/info/metadude/kotlin/library/roadsigns
    \n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 路标
    \n\xe2\x94\x9c\xe2\x94\ x80\xe2\x94\x80 4.0.0
    \n\xe2\x94\x82\xc2\xa0\xc2\xa0\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 路标-4.0.0。 aar
    \n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 roadsigns-4.0.0-javadoc.jar \n\xe2\
    x94 \x82\xc2\xa0\xc2\xa0\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 roadsigns-4.0.0.module
    \n\xe2\x94\x82\xc2\xa0\xc2\ xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 roadsigns-4.0.0.pom
    \n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2 \x94\x80\xe2\x94\x80 roadsigns-4.0.0-sources.jar
    \n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 maven-metadata-local.xml

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

    \n

    roadsigns-4.0.0.pom 文件的差异

    \n
  • \n
  • roadsigns-4.0.0.module另外,仅当我使用 Gradle 6 部署时才会有一个文件。

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

    \n
  • \n
\n

Jac*_*nkr 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.
...
Run Code Online (Sandbox Code Playgroud)

我所做的修复是

  • 打开build.gradle(应用程序)
  • 换安卓。compileSdk从 30 增至 31
  • 换安卓。默认配置。targetSdk从 30 增至 31
  • 文件 -> 将项目与 Gradle 文件同步
  • 您可能需要根据各自的 Sdk 级别(当前为 34)定制这些值。

  • 我有不同的依赖关系并且面临着同样的问题。将compileSdk升级到31有帮助。谢谢。 (2认同)

Lou*_*CAD 4

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

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

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

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

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