【发布时间】:2020-02-11 23:52:33
【问题描述】:
我有一个 gradle android 库模块,它依赖于另一个项目的 android 库:
androidlib-a depends on androidlib-b
androidlib-a 依赖
implementation project(path: ':androidlib-b', configuration: "default")
从 3.3.0 升级到 android build tools 3.5.0 后配置阶段抛出以下异常:
出了什么问题: 无法确定任务 ':androidlib-a:lint' 的依赖关系。 无法解析配置“:androidlib-a:releaseCompileClasspath”的所有工件。 无法转换工件 'androidlib-b.aar (project :androidlib-b)' 以匹配属性 {artifactType=jar}。 IdentityTransform 执行失败:C:\LocalData\projects\project\androidlib-b\build\outputs\aar\androidlib-b-release.aar。 C:\LocalData\projects\project\androidlib-b\build\outputs\aar\androidlib-b-release.aar.
我把 androidlib-a 的依赖改成:
implementation project(':androidlib-b')
从命令行构建 androidlib-a 现在可以工作,但我在 Android Studio Gradle Sync 上遇到以下问题:
错误:项目的多个变体 :androidlib-b 匹配消费者属性: - 配置 ':androidlib-b:releaseRuntimeElements' 变体 android-assets: - 无与伦比的属性: - 找到 artifactType 'android-assets' 但不是必需的。 - 找到 com.android.build.api.attributes.VariantAttr 'release' 但不是必需的。 - 兼容属性: - 需要 com.android.build.api.attributes.BuildTypeAttr 'release' 并找到兼容值 'release'。 - 需要 com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' 并找到兼容值 'Aar'。 - 需要 org.gradle.usage 'java-runtime' 并找到兼容值 'java-runtime'。 - 配置 ':androidlib-b:releaseRuntimeElements' 变体 android-classes: - 无与伦比的属性: - 找到 artifactType 'android-classes' 但不是必需的。 - 找到 com.android.build.api.attributes.VariantAttr 'release' 但不是必需的。 - 兼容属性: - 需要 com.android.build.api.attributes.BuildTypeAttr 'release' 并找到兼容值 'release'。 - 需要 com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' 并找到兼容值 'Aar'。 - 需要 org.gradle.usage 'java-runtime' 并找到兼容值 'java-runtime'。 - 配置 ':androidlib-b:releaseRuntimeElements' 变体 android-consumer-proguard-rules: ...
更改后,我在另一个依赖于 androidlib-a 的模块中也遇到了问题,并尝试像这样复制依赖项:
task copyToLib() {
afterEvaluate {
dependsOn ":androidlib-a:assembleRelease"
}
doLast {
delete libDir
def config = rootProject.project(":project").configurations.releaseRuntimeClasspath
println config.toList()
copy {
into libDir
from config
}
}
}
preBuild.dependsOn "copyToLib"
任务 ':anothermodule:copyToLib' 执行失败。 无法解析配置“:androidlib-a:releaseRuntimeClasspath”的所有文件。 不止一种 project :androidlib-b 变体匹配消费者属性: - 配置 ':androidlib-b:releaseRuntimeElements' 变体 android-assets: - 无与伦比的属性: - 找到 artifactType 'android-assets' 但不是必需的。 - 找到 com.android.build.api.attributes.VariantAttr 'release' 但不是必需的。 - 兼容属性: - 需要 com.android.build.api.attributes.BuildTypeAttr 'release' 并找到兼容值 'release'。 - 需要 com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' 并找到兼容值 'Aar'。 - 需要 org.gradle.usage 'java-runtime' 并找到兼容值 'java-runtime'。 - 配置 ':androidlib-b:releaseRuntimeElements' 变体 android-classes: - 无与伦比的属性: - 找到 artifactType 'android-classes' 但不是必需的。 - 找到 com.android.build.api.attributes.VariantAttr 'release' 但不是必需的。 - 兼容属性: - 需要 com.android.build.api.attributes.BuildTypeAttr 'release' 并找到兼容值 'release'。 - 需要 com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' 并找到兼容值 'Aar'。 - 需要 org.gradle.usage 'java-runtime' 并找到兼容值 'java-runtime'。
android 构建工具 3.5.1 版本也存在同样的问题。
完整的 androidlib-a 构建配置:
apply plugin: 'com.android.library'
version = releaseVersion
android {
compileSdkVersion 27
buildToolsVersion '28.0.3'
defaultConfig {
minSdkVersion 19
targetSdkVersion 27
versionCode 1
versionName releaseVersion
}
buildTypes {
release {
minifyEnabled false
}
}
}
dependencies {
implementation project(path: ':androidlib-b', configuration: "default")
}
完整的 androidlib-b 构建配置文件:
apply plugin: 'com.android.library'
version = releaseVersion
android {
compileSdkVersion 27
buildToolsVersion '28.0.3'
defaultConfig {
minSdkVersion 19
targetSdkVersion 27
versionCode 1
versionName releaseVersion
}
buildTypes {
release {
minifyEnabled false
}
}
}
【问题讨论】:
-
能把
buildTypes和productFlavors各库的配置贴出来吗? -
此外,模块(libs + 模块取决于 libs)的目录结构将有助于解决您的第二个问题
-
看不到任何 AAR 依赖项;这些错误信息并不能解释问题。
-
@ahasbini 为 androuidlib-a 和 b 添加了构建配置
-
在引入构建工具 3.0.x 之前我也遇到过类似的问题,然后添加默认配置即可解决问题。不知道这在 3.5.x 中是如何再次改变的。此处描述了与 3.0.x 构建工具问题相关的修复:stackoverflow.com/a/51766919/1100559
标签: java android gradle dependencies