当前位置: 首页 > 知识库问答 >
问题:

Android Gradle项目对AAR库的依赖在3.5版本中失败。x释放

荆树
2023-03-14

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

androidlib-a depends on androidlib-b

androidlib-a依赖项

implementation project(path: ':androidlib-b', configuration: "default")

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

错误:无法确定任务“:androidlib-a:lint”的依赖关系。无法解析配置的所有项目:androidlib-a:ReleaseComileClassPath”。未能将工件“androidlib-b.aar(项目:androidlib-b)”转换为匹配属性{artifactType=jar}。身份转换的执行失败: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资产:-不匹配的属性:-找到artifactType“android资产”,但不是必需的。-找到com.Android建筑应用程序编程接口。属性。VariantAttr“发布”,但不是必需的。-兼容属性:-必需的com.Android建筑应用程序编程接口。属性。BuildTypeAttr“release”,并找到兼容值“release”。-必需的com.Android建筑格拉德尔。内部的附属国。AndroidTypeAttr“Aar”,并找到兼容值“Aar”。-所需组织。格拉德尔。使用“java runtime”并找到兼容值“java runtime”。-配置:androidlib-b:releaseRuntimeElements的变体android类:-不匹配的属性:-找到artifactType“android类”,但不是必需的。-找到com.Android建筑应用程序编程接口。属性。VariantAttr“发布”,但不是必需的。-兼容属性:-必需的com.Android建筑应用程序编程接口。属性。BuildTypeAttr“release”,并找到兼容值“release”。-必需的com.Android建筑格拉德尔。内部的附属国。AndroidTypeAttr“Aar”,并找到兼容值“Aar”。-所需组织。格拉德尔。使用“java runtime”并找到兼容值“java runtime”。-配置:androidlib-b:releaseRuntimeElements的变体android consumer proguard规则:。。。

更改后,我在另一个依赖于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”。项目的多个变体:androidlib-b与消费者属性匹配:-配置:androidlib-b:releaseRuntimeElements的变体android资产:-不匹配的属性:-找到artifactType“android资产”,但不是必需的。-找到com.Android建筑应用程序编程接口。属性。VariantAttr“发布”,但不是必需的。-兼容属性:-必需的com.Android建筑应用程序编程接口。属性。BuildTypeAttr“release”,并找到兼容值“release”。-必需的com.Android建筑格拉德尔。内部的附属国。AndroidTypeAttr“Aar”,并找到兼容值“Aar”。-所需组织。格拉德尔。使用“java runtime”并找到兼容值“java runtime”。-配置:androidlib-b:releaseRuntimeElements的变体android类:-不匹配的属性:-找到artifactType“android类”,但不是必需的。-找到com.Android建筑应用程序编程接口。属性。VariantAttr“发布”,但不是必需的。-兼容属性:-必需的com.Android建筑应用程序编程接口。属性。BuildTypeAttr“release”,并找到兼容值“release”。-必需的com.Android建筑格拉德尔。内部的附属国。AndroidTypeAttr“Aar”,并找到兼容值“Aar”。-所需组织。格拉德尔。使用“java runtime”,并找到兼容值“java runtime”。

android build tools 3.5.1版本也存在同样的问题。

完整的androidlib-a构建conifg:

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:

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
        }
    }
}

共有1个答案

瞿兴朝
2023-03-14

我不能说这是否是你的问题,但Android Studio 3.5默认支持R8收缩和缩小,取代了Proguard——我可以说,即使是在调试构建类型上,至少在某些部分上——也可以启用它。

此版本上存在与AAR相关的问题。Android Studio找不到AAR中包含的JAR依赖项。此问题应在Android Studio 3.6.0-alpha05或更高版本的Canary频道上修复,可在Android Studio网站上下载。

此外,如果AAR不包含任何JAR依赖项,当您的AAR库尝试使用某些第三方库时,您在执行期间仍然可能存在NoClassDefFoundException或NoSuchmetodError。此问题尚未修复,但您可以应用以下解决方法:

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

android.enableD8.desugaring=false

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

 类似资料:
  • 我有一个android gradle项目结构,看起来像这样 < li >模块1-aar < li >模块2-aar < li>testapp-apk 关键事实 模块2 aar取决于模块1 aar。 testapp apk取决于模块2 aar。 JDK11 Gradle 7.4.2 Androidgradle插件7.1.3 没有javadocs、gpg、签名或发布,一切都构建得很好。App运行,一切

  • 问题内容: 我看到了类似的问题,但未找到可接受的答案。问题-我有一些小功能我自己的android库。我的库使用其他库-fe Hawk(无sql数据库)。我的图书馆gradle文件: 图书馆工作正常。如果我将它用作另一个项目中的项目-它也可以工作。但是当我生成文件(带有-> )并包含到单独的项目中时-失败。项目仅查看我的图书馆的班级。Hawk com.orhanobut.hawk软件包和off其他软

  • 我正在用Tianium框架构建一个Android模块,我必须以AAR格式包含一个外部依赖项。我试图从AAR(即归档文件)中只提取类JAR,并将其包含在模块中,但这种技巧只适用于不依赖于任何资源的库(这就是制作AAR而不是JAR的原因)。 有没有办法在钛模块(使用Ant作为构建工具)的构建过程中包含AAR? 编辑:似乎在Appcelerator会有人做这件事:https://jira.appcele

  • 我正在为一个供应商做一个库项目,它需要Android Volley作为一个依赖项。我已经在Android Studio中使用了这个Create aar文件来创建.aar文件,并将其包含在一个测试项目中,我正在使用这个添加本地.aar文件到使用“flatdirs”的Gradle build中是不起作用的。库链接精细,项目编制无差错。但在运行时,测试应用程序崩溃,说它找不到Volley 我的图书馆项目