首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android项目依赖于3.5.x版本的AAR库失败

Android项目依赖于3.5.x版本的AAR库失败
EN

Stack Overflow用户
提问于 2019-10-15 10:14:56
回答 1查看 1.3K关注 0票数 2

我有一个gradle android库模块,它依赖于另一个项目android库:

代码语言:javascript
复制
androidlib-a depends on androidlib-b

androidlib-依赖性

代码语言:javascript
复制
implementation project(path: ':androidlib-b', configuration: "default")

在从3.3.0升级到android 3.5.0之后,在配置阶段引发以下异常:

出了什么问题:无法确定任务的依赖性':androidlib-a:lint‘。无法解析配置的所有工件':androidlib-a:releaseCompileClasspath‘。未能将工件'androidlib-b.aar (项目:androidlib-b)‘转换为匹配属性{artifactType=jar}。执行失败的C:\LocalData\projects\project\androidlib-b\build\outputs\aar\androidlib-b-release.aar.:IdentityTransform:C:\LocalData\projects\project\androidlib-b\build\outputs\aar\androidlib-b-release.aar.

我将androidlib-一个依赖项更改为:

代码语言:javascript
复制
implementation project(':androidlib-b')

androidlib-a from命令行的构建现在可以工作了,但是我在上遇到了以下问题:

错误:项目的多个变体:androidlib-b与使用者属性- Configuration‘:androidlib-b:releaseRuntimeElements的变体android-assets:--不匹配的属性:--找到了artifactType 'android-assets’,但不是必需的。-找到了com.android.build.api.attributes.VariantAttr‘释放’,但不是必需的。-兼容属性:-必需的com.android.build.api.attributes.BuildTypeAttr 'release‘和找到兼容值'release’。-必需的com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar‘和找到兼容的值'Aar’。-必需的org.gradle.usage‘java-运行时’并找到兼容的值‘java-运行时’。-配置:androidlib-b:releaseRuntimeElements的变体android-classes:-无与伦比的属性:-找到了artifactType 'android-classes‘,但不是必需的。-找到了com.android.build.api.attributes.VariantAttr‘释放’,但不是必需的。-兼容属性:-必需的com.android.build.api.attributes.BuildTypeAttr 'release‘和找到兼容值'release’。-必需的com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar‘和找到兼容的值'Aar’。-必需的org.gradle.usage‘java-运行时’并找到兼容的值‘java-运行时’。-配置:androidlib-b:releaseRuntimeElements的变体android-消费者保护-规则:.

更改之后,我在另一个依赖于androidlib-a的模块中也出现了一个问题,并试图复制类似这样的依赖项:

代码语言:javascript
复制
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"

任务执行失败“:另一个模块:copyToLib‘。无法解析配置的所有文件“:androidlib-a:releaseRuntimeClasspath”。项目的多个变体:androidlib-b匹配使用者属性:- Configuration ':androidlib-b:releaseRuntimeElements‘variant’variant:- Unmatched属性:- artifactType 'android-assets‘,但不是必需的。-找到了com.android.build.api.attributes.VariantAttr‘释放’,但不是必需的。-兼容属性:-必需的com.android.build.api.attributes.BuildTypeAttr 'release‘和找到兼容值'release’。-必需的com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar‘和找到兼容的值'Aar’。-必需的org.gradle.usage‘java-运行时’并找到兼容的值‘java-运行时’。-配置:androidlib-b:releaseRuntimeElements的变体android-classes:-无与伦比的属性:-找到了artifactType 'android-classes‘,但不是必需的。-找到了com.android.build.api.attributes.VariantAttr‘释放’,但不是必需的。-兼容属性:-必需的com.android.build.api.attributes.BuildTypeAttr 'release‘和找到兼容值'release’。-必需的com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar‘和找到兼容的值'Aar’。-必需的org.gradle.usage‘java-运行时’并找到兼容的值‘java-运行时’。

在3.5.1版本中也存在同样的问题。

完整的androidlib-一个构建conifg:

代码语言:javascript
复制
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构建conifg:

代码语言:javascript
复制
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
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-10-24 07:34:15

我不能说这是否是您的问题,但是AndroidStudio3.5默认允许R8收缩和缩小,取而代之的是-and,即使在调试构建类型上也是如此,至少在某些部分是这样的。

在这个版本中有一个与AAR相关的问题。Android无法找到包含在AAR中的JAR依赖项。这个问题被认为是固定在Android 3.6.0-alpha 05或更高的金丝雀频道,可以在Android的网站上下载。

另外,如果AAR不包含任何JAR依赖项,那么当您的JAR库尝试使用一些第三方库时,在执行过程中仍然可以使用NoClassDefFoundException或NoSuchMethodError。此问题尚未修复,但您可以应用以下解决方法:

只需将下一行添加到根目录下的gradle.properties中,同步项目并重新运行:

代码语言:javascript
复制
android.enableD8.desugaring=false

您还可以通过将AAR上传到任何存储库(如本地存储库或云存储库,如JFrog或Nexus私有服务器(如果您的库是私有的),甚至上传到Maven或类似的公共存储库(如果您的库是公共的)来解决这两个问题,因为这些错误只是影响手动包含的AAR,而不是从存储库下载的。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58392303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档