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

6

我已经在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 support 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个回答

3
这个库还依赖于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'
    })
}

附注:

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


无法工作,我一直收到相同的错误信息“java.util.zip.ZipException: duplicate entry: android/support/v7/appcompat/R$anim.class” - Alok Patel
你应用更改后有清理项目吗? - Przemysław Piechota. kibao

1

这不是直接的答案,而是一些建议。

Gradle提供的排除功能(exclude方法调用)对于本地aar文件中的内容无效,因为这些内容没有通过依赖管理定义,因此无法识别。就依赖解析而言,aar文件是一个独立的单元(包括其中的所有资源/类)。因此,需要以不包括这些条目的方式构建文件;或者如果文件不是由您构建的,则可以解压并省略相关文件,并重新打包。

虽然可能有使用Gradle删除某些文件的hackish方法(我还没有找到任何可靠的方法),我们可能可以钩入一些中间构建步骤并摆脱这些文件;但通常建议最佳实践是避免将公开可用的依赖项打包到aar / jar中,以避免重复条目问题并使aar / jar大小更小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接