- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的公司有一个 android 库(一个 SDK),我们分发给第三方。它使用了 Android 支持库的一些功能——特别是(但不限于)android.support.annotation
和 android.support.v4.content.LocalBroadcastManager
问题是,如果我们针对(比如)com.android.support:appcompat-v7:27.1.1
编译我们的库,而第三方针对(比如)com 进行编译。 android.support:appcompat-v7:28.0.0
然后第三方应用程序收到 All com.android.support libraries must use the exact same version specification警告。
如果我们正在开发一个独立的应用程序,那么修复就很明确了;只需更新所有内容即可使用最新 (28) 版本的支持库。如果我们要迁移到 androidX
,也是一样。
但是,对于可能已过时的可再分发库(第三方可以在其发布 18 个月后使用我们的 SDK),我们不能这样做。
据我所知,这里没有关于做什么的指导。我能想到的选项:
什么都不做。第三方可以忽略该警告。这是我们过去一直在做的事情,看起来确实不错,但我不喜欢运送会向我们的客户发出警告的东西的想法。
从我们的 SDK 中删除对 com.android.support
的所有引用。这是非常痛苦的,因为 LocalBroadcastmanager
只存在于支持库中,它不是 Android 本身的一部分,而且我们使用 @NonNull
和 @Nullable
广泛。它们非常擅长防止错误,对 Kotlin 支持很重要,我不想失去它们。
从我们的 SDK 中删除对 com.android.support
的所有引用,但为 豁免
。也许这会使警告消失?不过,丢失 com.android.support:support-annotations
@NullableLocalBroadcastManager
并不是一件好事。这样还可以吗?
始终发布针对最新支持库编译的 SDK,并积极插入第三方进行更新。像这样插入第三方感觉不太好,这也意味着如果我们在 9 个月内没有发布,我们将不得不发布临时版本以跟上 Android 支持库的更新。
并行发布针对不同支持库编译的 SDK 的不同版本,第三方可以从中选择他们想要的版本。这是很多工作(我们要回溯多少个版本?)而且我想这会很困惑。
放弃并只支持 iOS(笑)
无论如何 - 如前所述,我一直无法找到有关如何处理此类事情的任何指导。任何反馈将不胜感激
最佳答案
选项 7 怎么样?
您的实现并不总是与用户的实现相匹配,这只是生活中的一个事实(?)。
我遇到了有些过时的库(使用支持 25.1.3 或其他),并且我遇到了这个错误。但是有一个非常简单的修复方法。您只需稍微修改一下实现:
implementation ("com.my:project:project-name:1.0.0") {
exclude group: "com.android.support"
}
它应该是不言自明的,但这只是告诉 Gradle 忽略库的支持实现并改用应用程序的实现。
这有一个潜在的问题,如果用户没有实现您使用的支持库之一,他们将无法构建,直到他们自己实现它。但这也很容易解决:
implementation ("com.my:project:project-name:1.0.0") {
exclude group: "com.android.support" module: "support-annotations"
}
那样的话,只有 support-annotations
被排除在实现中,其余的都保持不变。
我认为解决这个问题的一个好方法是做两件事:
PS,如果我实现的库使用的支持库版本高于我自己的,我认为我从来没有遇到过问题。这可能只是 lint 中的一个错误。
关于android - 如何在我自己的 Android 库中使用 Android 支持库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52693065/
我是一名优秀的程序员,十分优秀!