从@aar,gradle依赖项中排除包/类

时间:2017-01-04 17:23:16

标签: android android-studio gradle android-gradle build.gradle

我在build.gradle文件中添加了依赖关系。

compile 'com.aerisweather:aeris-maps-lib:2.0.0@aar'

来自

https://oss.sonatype.org/content/repositories/comaerisweather-1027/com/aerisweather/aeris-maps-lib/2.0.0/

如果你看到来自以下URL的工件,它有android支持v7库类。

https://oss.sonatype.org/#nexus-search;quick~aerisweather

我想在运行/打包应用程序时排除该包。由于重复的类错误,我无法运行/打包应用程序。

我尝试过添加这样的配置,

configurations {
    all*.exclude group: 'com.android.support', module: 'appcompat-v7'
}

但这将整个项目排除在外,导致我出现许多错误。

我已尝试过所有操作,但仍然遇到以下错误。

  

错误:任务':transformClassesWithJarMergingForDebug'执行失败。   com.android.build.api.transform.TransformException:java.util.zip.ZipException:重复条目:android / support / v7 / appcompat / R $ anim.class

2 个答案:

答案 0 :(得分:1)

此库还具有依赖项support-v4mediarouter-v7

您需要将它们全部排除在aeris-maps-lib之外,并将其作为您自己的依赖项。

def supportLibraryVersion = '25.0.1'
dependencies {
    compile "com.android.support:support-v4:${supportLibraryVersion}"
    compile "com.android.support:support-annotations:${supportLibraryVersion}"
    compile "com.android.support:appcompat-v7:${supportLibraryVersion}"

    //... other deps

    compile ('com.aerisweather:aeris-maps-lib:2.0.0@aar', {
        exclude group: 'com.android.support', module: 'support-v4'
        exclude group: 'com.android.support', module: 'appcompat-v7'
        exclude group: 'com.android.support', module: 'mediarouter-v7'
    })
}

PS。

aeris-maps-lib还有com.google.android.gms:play-services依赖项,这是整个Play服务包(它很大),您需要启用MultiDex或使用proguard缩小代码。

答案 1 :(得分:0)

不是直接的回答,而是建议。

gradle 提供的排除功能(排除方法调用)不适用于本地 aar 文件中的内容,因为这些内容不是由依赖项管理定义的,因此不能被其识别。 就依赖解析而言,aar 文件是一个单独的单元(包括其中的所有资源/类)。所以文件需要以不包含这些条目的方式构建;或者,如果该文件不是您自己构建的,您可以解压缩并忽略有问题的文件并重新打包。

虽然可能有一些使用 gradle 删除某些文件的黑客方法(我还没有找到任何可靠的方法),但我们可以在其中加入一些中间构建步骤并删除这些文件;但通常建议的最佳做法是避免将公开可用的依赖项打包到 aar/jar 中,以避免重复输入问题并保持 aar/jar 的大小较小。