Sim*_*non 5 sdk dependencies android ios
我目前正在开发一个可在Android和iOS平台上使用的SDK.
对于Android,我们在Gradle文件中列出依赖项,并使用Maven提供SDK(因此我们的依赖项列在.pom文件中).
对于iOS,我们使用cocoapods来处理dependendies.
问题如下:*我们的SDK在版本X中使用依赖关系*我们的客户端之一可能使用相同的依赖关系但在版本Y*另一个客户端也可能在版本Z中使用完全相同的依赖关系
因此,这导致我们的SDK可能在我们的一个客户端(如果不是两个)上被破坏,因为我们确保它适用于依赖关系X,而不是Y和Z.
目前,遗留代码只是导入了导致此问题的库的源代码并将其命名为,这样就模拟了我们不使用相同的库.
但在我看来,这不是一个适当的解决方案:我们没有最新的修复,更新是痛苦的,客户端有两倍的库而不是一个.
所以,就目前而言,我正在考虑一个潜在的好解决方案,但无法在Google上找到我想要的东西(也许我没有使用正确的关键字:/).
我在想的是为每个依赖项提供一系列版本的支持.有点像"如果此方法在这里,执行它,否则,使用以前版本的方法"(如iOS上的选择器响应).然后,客户端应该能够在支持范围内的条件下使用任何版本的依赖项.
但是,我不知道这是不是正确的方法?还有其他解决方案吗?
谢谢 :)
对于 android,有两种可能的解决方案,一种是基于构建工具的解决方案,另一种是基于架构的解决方案:
1.-如果您使用 maven 构建库,则可以使用“provided”作用域强制您的库从运行它的容器中获取依赖项。这样,依赖关系就可以由使用您的库的应用程序提供。请注意,如果依赖项差异很大,这对您没有帮助。
2.-抽象来救援!您可以将项目细分为主库和插件库。主库将向用户展示每个类的一个方法,这将是他们将从应用程序中调用的方法。在主库内部,所有类都将以间接形式导入每个外部 SDK 或依赖项,这是一个通用包装器,可以是抽象类或接口,并以这种方式使用它们。例如,也许您正在提供增强的 Facebook 登录 UI。然后,您将引用 facebookLoginInterface 并调用它,而不是直接在视图中引用 facebook SDK。然后,您将有一个辅助项目 facebookLogin41,您将在其中使用 facebook sdk 4.1 实现 facebookLoginInterface,还有第二个项目 facebookLogin418,您将在其中使用 facebook sdk 4.1.8 实现相同的接口。然后,实现某种提供逻辑,例如依赖注入框架(Roboguice 提供程序是一个很好的例子)、maven 依赖范围(例如提供)等,以使库实例成为 facebookLoginInterface。最后,客户端只需导入主库和所需的辅助项目并使用主库即可。
| 归档时间: |
|
| 查看次数: |
403 次 |
| 最近记录: |