簡體   English   中英

Android Gradle 項目對 AAR 庫的依賴在 3.5.x 版本中失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM