【问题标题】:Exclude package/classes from @aar, gradle dependency从@aar 中排除包/类,gradle 依赖项
【发布时间】:2017-01-04 17:23:16
【问题描述】:

我在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

【问题讨论】:

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


    【解决方案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 Services 包(它很大),您需要启用 MultiDex 或使用 proguard 收缩代码。

    【讨论】:

    • 不工作,我不断收到相同的错误消息“java.util.zip.ZipException:重复条目:android/support/v7/appcompat/R$anim.class”
    • 您在应用更改后清理了项目吗?
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 2017-09-08
      • 1970-01-01
      相关资源
      最近更新 更多