android - 如何防止依赖编译重复依赖

标签 android gradle android-gradle-plugin

我的项目的 lib 文件夹中有一个 aar 形式的 SDK。我正在尝试将它添加为项目的 build.gradle 中的依赖项。

  dependencies {
      ...
      compile(name:'mySDK', ex:'aar')
      ...
  }

但是,当我尝试重建 gradle 时,我得到以下信息:

Error:(48, 0) No such property: ex for class: org.gradle.api.internal.artifacts.dependencies.DefaultExternalModuleDependency_Decorated.
> java.util.zip.ZipException: duplicate entry: org/apache/http/impl/cookie/IgnoreSpecFactory.class

我解压了 mySDK 并确认 httpclient-android-4.3.5.1.jarmySDK 中使用的一个库(这个 jar 包含 org.apache.http...).

然后我更新了我的 gradle 以尝试排除这个库。

  dependencies {
      ...
      compile(name:'mySDK', ex:'aar'){
        exclude(group: 'org.apache.http', module: 'httpclient-android-4.3.5.1')
      }
      ...
  }

我也试过排除:

exclude module: 'httpclient'
exclude(group: 'org.apache.http', module: 'httpclient-android')
exclude(group: 'org.apache.http', module: 'httpclient')

不幸的是,我仍然收到相同的 java.util.zip.ZipException。知道如何解决这个问题吗?

最佳答案

您不能使用aar 文件平面存储库

您只能在使用 maven 依赖项的情况下执行此操作。在这种情况下,您有一个 pom 文件,它描述了依赖关系(带有模块和组)。

例如,在 aar 中没有任何 pom 文件描述 jar 文件是一个名为 httpclient-android-4.3.5.1 的依赖项。

通常 aar 文件不包含依赖项。 最好的选择是将此 aar 放在 maven 存储库中以排除依赖项。
由于不可能,另一种方法是解压缩 aar 文件,删除 jar 依赖项并重新打包 aar(它是一个简单的 zip 文件)。

关于android - 如何防止依赖编译重复依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35016036/

相关文章:

java - 再次出现错误 java.util.concurrent.TimeoutException : android. view.ThreadedRenderer.finalize() 10 秒后超时

java - Android:使线程每秒运行的标准方法

android - 为什么我的 BroadcastReceiver 收不到来自其他应用程序的广播?

java - 有没有办法输出所有可用gradle/maven导入的类

android - Android Studio:互联网连接被拒绝错误

java - 在gradle中为Heroku创建webapp-runner.jar

Android Studio如何在代码中获取versionNameSuffix

java - Android中的Gradle错误

android - 重用线程

kotlin - 无法在 Android Studio 北极狐上访问 'com.android.build.gradle.internal.dsl.Lockable' | 2020.3.1 金丝雀 12