JAR/AAR SDK 与使用 SDK 构建的应用程序之间的依赖关系管理
JAR/AAR dependency management between SDK and app built using SDK
对于我们开发的 SDK,当 SDK 项目和客户端应用程序(使用 SDK 构建)使用相同的第 3 方库(例如,来自 Square 的 Otto,Android 注释等)可能不一定与第 3 方库的版本完全相同。
我注意到 gradle 提供了这样的设置:
dependencies {
compile("org.gradle.test.excludes:api:1.0") {
exclude module: 'shared'
}
}
虽然这种方法很干净,但我看到了一个缺点,即 SDK 开发人员需要告知 SDK 用户他们在项目中使用的所有库,因此不会保留这些库 "hidden"。
另一种方法是使用 jarjar 之类的工具重新打包 JAR 库。虽然我从未使用过这个工具,但它看起来确实很简单,但每次有新版本的库可用时都必须这样做,也可能不是一个好方法。
任何指点都会很有帮助。
the SDK developer needs to inform the SDK users all the libraries they are using in their project and hence the libraries' are no kept "hidden"
不是真的。集成您SDK的开发者可以use Gradle to determine what the transitive dependencies are进行调整
The other alternative is to use a tool like jarjar to repackage the JAR libraries. While I never used this tool, it does appear simple, but having to do this every time a new version of the library is available, may not be a good approach either.
据我所知,jarjar 仅适用于 JAR。正如您在问题标题中指出的那样,并非所有 Android 依赖项都是 JAR。对于 AAR,AFAIK,您必须创建自己的 aaraar
工具来处理将所有资源、资产等更改为新名称,这样它们就不会与原始 AAR 冲突。这可能很难。
对于我们开发的 SDK,当 SDK 项目和客户端应用程序(使用 SDK 构建)使用相同的第 3 方库(例如,来自 Square 的 Otto,Android 注释等)可能不一定与第 3 方库的版本完全相同。
我注意到 gradle 提供了这样的设置:
dependencies {
compile("org.gradle.test.excludes:api:1.0") {
exclude module: 'shared'
}
}
虽然这种方法很干净,但我看到了一个缺点,即 SDK 开发人员需要告知 SDK 用户他们在项目中使用的所有库,因此不会保留这些库 "hidden"。
另一种方法是使用 jarjar 之类的工具重新打包 JAR 库。虽然我从未使用过这个工具,但它看起来确实很简单,但每次有新版本的库可用时都必须这样做,也可能不是一个好方法。
任何指点都会很有帮助。
the SDK developer needs to inform the SDK users all the libraries they are using in their project and hence the libraries' are no kept "hidden"
不是真的。集成您SDK的开发者可以use Gradle to determine what the transitive dependencies are进行调整
The other alternative is to use a tool like jarjar to repackage the JAR libraries. While I never used this tool, it does appear simple, but having to do this every time a new version of the library is available, may not be a good approach either.
据我所知,jarjar 仅适用于 JAR。正如您在问题标题中指出的那样,并非所有 Android 依赖项都是 JAR。对于 AAR,AFAIK,您必须创建自己的 aaraar
工具来处理将所有资源、资产等更改为新名称,这样它们就不会与原始 AAR 冲突。这可能很难。