我目前正在开发一个SDK,该SDK可在Android和iOS平台上使用。
对于Android,我们在Gradle文件中列出依赖项,并使用Maven提供SDK(因此我们的依赖项在.pom文件中列出)。
对于iOS,我们使用cocoapods处理依赖项。
问题是: * 我们的SDK使用版本X的依赖项 * 我们的客户之一可能使用相同的依赖项,但是版本为Y * 另一个客户也可能使用相同的依赖项,但是版本为Z
因此,这导致我们的SDK在其中一个客户端(如果不是两个客户端)上可能会出现问题,因为我们确保它与依赖项X一起工作,但不与Y和Z一起工作。
目前,旧代码只是导入了引起此问题的库源代码并进行了命名空间处理,以模拟我们不使用相同库。
但是在我看来,这不是一个适当的解决方案:我们没有最新的修复程序,更新很痛苦,客户端有两倍的库而不是一个。
因此,目前,我正在尝试考虑一个潜在的好解决方案,但是在Google上找不到我想要的东西(也许我没有使用正确的关键字 :/)。
我想到的是为每个依赖项提供版本范围的支持。有点像“如果这个方法在这里,请执行它,否则,请使用上一个版本的那个方法”(就像iOS上的选择器respondTo)。然后,客户端应该能够在支持范围内使用任何版本的依赖项。
但是,我不知道这是否是正确的方式? 还有其他解决方案吗?
谢谢 :)
对于Android,我们在Gradle文件中列出依赖项,并使用Maven提供SDK(因此我们的依赖项在.pom文件中列出)。
对于iOS,我们使用cocoapods处理依赖项。
问题是: * 我们的SDK使用版本X的依赖项 * 我们的客户之一可能使用相同的依赖项,但是版本为Y * 另一个客户也可能使用相同的依赖项,但是版本为Z
因此,这导致我们的SDK在其中一个客户端(如果不是两个客户端)上可能会出现问题,因为我们确保它与依赖项X一起工作,但不与Y和Z一起工作。
目前,旧代码只是导入了引起此问题的库源代码并进行了命名空间处理,以模拟我们不使用相同库。
但是在我看来,这不是一个适当的解决方案:我们没有最新的修复程序,更新很痛苦,客户端有两倍的库而不是一个。
因此,目前,我正在尝试考虑一个潜在的好解决方案,但是在Google上找不到我想要的东西(也许我没有使用正确的关键字 :/)。
我想到的是为每个依赖项提供版本范围的支持。有点像“如果这个方法在这里,请执行它,否则,请使用上一个版本的那个方法”(就像iOS上的选择器respondTo)。然后,客户端应该能够在支持范围内使用任何版本的依赖项。
但是,我不知道这是否是正确的方式? 还有其他解决方案吗?
谢谢 :)
code
更改为与版本无关,你的库仍然需要明确指出它依赖于哪些其他库。如果你不指定版本,最新版本将被默认使用(至少在Cocoapods中如此)。你不能在依赖项中提及同一库的多个版本,除非这些版本明确设计用于同时使用。 - Swapnil Luktuke依赖项
版本。正如您所说,您可以更改基本代码以支持您计划创建单独版本的所有依赖项版本。然后,各种版本的sdk之间唯一的区别将是pom/pod文件中指定依赖项特定版本的内容。您将需要维护一个矩阵,其中包含所有依赖项版本组合的组合,以供客户选择正确的sdk版本。 - Swapnil Luktuke