SDK和使用SDK构建的应用程序之间的JAR/AAR依赖关系管理



对于我们开发的SDK,当SDK项目和客户端应用程序(使用SDK构建)使用相同的第三方库(例如,来自Square的Otto、Android Annotations等)时,我们正在寻找解决依赖冲突的正确方法,这些库可能不一定是第三方程序库的完全相同版本。

我注意到gradle提供了这样的设置:

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

虽然这种方法是干净的,但我看到了一个缺点,即SDK开发人员需要通知SDK用户他们在项目中使用的所有库,因此这些库不会被"隐藏"。

另一种选择是使用像jarjar这样的工具来重新打包JAR库。虽然我从未使用过这个工具,但它看起来确实很简单,但每次有新版本的库可用时都必须这样做,这可能也不是一个好方法。

任何指示都会非常有帮助。

SDK开发人员需要通知SDK用户他们在项目中使用的所有库,因此这些库不会被"隐藏"

不是。集成您的SDK的开发人员可以使用Gradle来确定哪些是可传递的依赖项并进行调整。

另一种选择是使用像jarjar这样的工具来重新打包JAR库。虽然我从未使用过这个工具,但它看起来确实很简单,但每次有新版本的库可用时都必须这样做,这可能也不是一个好方法。

AFAIK,jarjar只适用于JAR。并不是所有的Android依赖项都是JAR,正如您在问题标题中所指出的那样。对于AAR,AFAIK,您必须创建自己的aaraar工具,该工具可以处理将所有资源、资产等更改为新名称的问题,这样它们就不会与原始AAR冲突。这可能很困难。