- TL'DR:* In this Android Kotlin library I updated from Gradle 5.6.4 to 6.6.1(commit
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时,没有错误。
在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
部分时,应用成功构建!问题仍然存在......这是怎么回事?!
5条答案
按热度按时间fgw7neuy1#
我遇到了很多这样的错误:
我所做的是
build.gradle
(应用程序)compileSdk
从30更改为31targetSdk
从30更改为31monwx1rj2#
该问题很可能来自您用于发布库的插件(
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存储库。
您应该没有任何问题,如果您使用,而不是任何第三方替代品。
jpfvwuh43#
我也有同样的问题。我找到了一个临时的解决办法:将
aar
后缀添加到错误模块并使其可传递(否则将丢失依赖关系),例如:报告“未指定aarFormatVersion”错误,编译失败。
更改为:
编译错误消失。
正如Louis CAD所说,您可以使用内置的'maven-publish'来解决这个问题。
yxyvkwin4#
我的解决方案是下载库包,将LICENSE和其他文件复制到src/main-〉new“Java Resources Folder”-〉new“META-INF”文件夹
toe950275#
这个问题是由于这个实现'androidx.core:core-ktx:1.9.0'造成的
更改版本ktx:从1.9.0到1.7.0的实现'androidx.内核:内核-ktx:1.7.0'