【发布时间】:2021-03-04 19:44:09
【问题描述】:
TL'DR: 在this Android Kotlin library 我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-metadata-local.xml -
我比较了使用 Gradle 5 和 Gradle 6 部署的文件。有趣的是,
roadsigns-4.0.0.aar文件是二进制等效的。不过,pom文件有所不同: -
还有一个
roadsigns-4.0.0.module文件,只有当我使用 Gradle 6 进行部署时。 -
当我手动从使用 Gradle 6 部署的文件中删除“新”
do_not_remove: published-with-gradle-metadata部分时,应用程序构建成功!问题仍然存在……这是怎么回事?!
【问题讨论】:
标签: android gradle android-library aar maven-publish