![](/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.