繁体   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