![](/img/trans.png)
[英]Spring 3 MVC + Hibernate 3.5.x : Autowiring and Dependency Injection of SessionFactory
[英]Android Gradle Project dependency on AAR library failes with 3.5.x release
我有一个依赖于另一个项目 android 库的 gradle android 库模块:
androidlib-a depends on androidlib-b
androidlib-a 依赖项
implementation project(path: ':androidlib-b', configuration: "default")
从 3.3.0 升级到 android 构建工具 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
}
}
}
我不能说这是否是您的问题,但 Android Studio 3.5 默认启用 R8 缩小和缩小,替换 Proguard - 并且即使在调试构建类型上至少在某些部分启用它我也会说。
此版本存在与 AAR 相关的问题。 Android Studio 找不到 AAR 中包含的 JAR 依赖项。 这个问题应该在 Android Studio 3.6.0-alpha05 或更高版本的 Canary 频道上修复,可在 Android Studio 的网站上下载。
此外,如果 AAR 不包含任何 JAR 依赖项,当您的 AAR 库尝试使用某些第三方库时,您在执行期间仍可能出现 NoClassDefFoundException 或 NoSuchMethodError。 此问题尚无任何修复,但您可以应用以下解决方法:
只需在根目录下的 gradle.properties 中添加下一行,同步项目并重新运行:
android.enableD8.desugaring=false
您还可以通过将 AAR 上传到任何存储库来解决这两个问题,例如本地存储库或云存储库,如 JFrog 或 Nexus 私有服务器(如果您的库是私有的),甚至上传到 Maven 或类似的公共存储库(如果您的库是公共的),因为这些错误只影响手动包含的 AAR,而不影响从存储库下载的 AAR
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.