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 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-元数据-local.xml
我比较了用 Gradle 5 和 Gradle 6 部署的文件。有趣的是,roadsigns-4.0.0.aar
文件是二进制等价的。 pom
文件不同,但是:
只有当我使用 Gradle 6.
部署时,才会有一个 roadsigns-4.0.0.module
文件
当我手动从使用Gradle6部署的文件中删除“新”do_not_remove: published-with-gradle-metadata
部分时,应用程序构建成功!问题仍然存在……这是怎么回事?!
我也遇到了同样的问题。我找到了一个临时解决方案:
将 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'
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 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-元数据-local.xml我比较了用 Gradle 5 和 Gradle 6 部署的文件。有趣的是,
roadsigns-4.0.0.aar
文件是二进制等价的。pom
文件不同,但是:只有当我使用 Gradle 6.
部署时,才会有一个roadsigns-4.0.0.module
文件当我手动从使用Gradle6部署的文件中删除“新”
do_not_remove: published-with-gradle-metadata
部分时,应用程序构建成功!问题仍然存在……这是怎么回事?!
我也遇到了同样的问题。我找到了一个临时解决方案:
将 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'