如何使android库项目依赖于另一个库而不会有冲突?

时间:2015-01-13 00:38:13

标签: java android android-gradle build.gradle

我正在建立一个图书馆,并希望将Volley用于它的网络方面。我可以打包Volley jar并释放.aar,将源复制到我的项目中并释放.jar(blah),或者使用Gradle做一些依赖魔法。

无论哪种方式,我猜我会发生冲突,如果任何试图使用我的库的应用程序也有通过.jar或gradle的Volley依赖。

这样做的正确方法是什么?

我更愿意不仅要求用户删除他们自己的Volley依赖项,以避免多个事物定义它的dexexception,因为这似乎是这些错误的最常见解决方案。

由于

2 个答案:

答案 0 :(得分:3)

如果您与传递依赖项发生冲突,可以将其排除,或者不在项目中定义它并使用库项目中的那个。

摇篮

dependencies {
    compile("org.gradle.test.excludes:api:1.0") {
        exclude module: 'shared'
    }
}

的Maven

  <dependencies>
    <dependency>
      <groupId>sample.ProjectA</groupId>
      <artifactId>Project-A</artifactId>
      <version>1.0</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>  <!-- declare the exclusion here -->
          <groupId>sample.ProjectB</groupId>
          <artifactId>Project-B</artifactId>
        </exclusion>
      </exclusions> 
    </dependency>
  </dependencies>

参考:

Gradle http://www.gradle.org/docs/current/userguide/dependency_management.html

Maven http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

答案 1 :(得分:1)

由于没有出版官方文物,因此排球很难。您可以对库项目执行的操作是将Volley定义为provided依赖项。这将根据Volley代码编译您的源代码,但不会将Volley代码与您的AAR打包。它看起来像这样:

dependencies {
    //If you have source
    provided project(':volley')
    //If you have a jar
    provided files('path/to/volley.jar')
}

这并不理想,因为它会要求使用你的库的人声明一个Volley依赖。由于没有官方工件,他们所拥有的Volley版本可能与您编译的内容不兼容。