如何在我自己的Android库中使用Android支持库
我的公司有一个android库(SDK),我们将其分发给第三方。它使用了Android支持库的一些功能,特别是(但不限于)如何在我自己的Android库中使用Android支持库,android,android-support-library,Android,Android Support Library,我的公司有一个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编译库,那么第
Android.Support.annotation
和Android.Support.v4.content.LocalBroadcastManager
问题是,如果我们针对(比如)com.android.support:appcompat-v7:27.1.1编译库,而第三方针对(比如)com.android.support:appcompat-v7:28.0.0编译库,那么第三方应用程序将收到警告
如果我们开发的是一个独立的应用程序,那么解决方案是明确的;只需更新所有内容以使用最新(28)版本的支持库。如果我们移动到androidX
,同样的交易
但是,对于一个可能已经过时的可再发行库(第三方可以在发布18个月后使用我们的SDK),我们不能这样做
据我所知,在这里做什么没有指导。我能想到的选择是:
com.android.support
的所有引用。这是非常痛苦的,因为LocalBroadcastmanager
只存在于支持库中,它不是Android本身的一部分,而且我们广泛使用@NonNull
和@Nullable
。它们在防止bug方面非常出色,对Kotlin的支持非常重要,我不想失去它们com.android.support
的所有引用,但对com.android.support:support注释@Nullable
进行豁免。也许这会让警告消失?但是,丢失LocalBroadcastManager
并不是件好事。这样行吗
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"
}
这样,只有支持注释
被排除在实现之外,剩下的就不用管了
我认为一个很好的方法是做两件事:
另外,如果我实现的库使用的支持库版本高于我自己的版本,我认为我从来没有遇到过问题。这可能只是lint中的一个错误。如果实现不匹配,我并不介意,但来自Android studio的警告确实让我有点担心;这让我觉得,如果我的库引用了26版的支持库,而第三方应用引用了28版,那么应用程序可能会崩溃或微妙地崩溃,但是的,我想这可能是OK,它可能会崩溃。这就是警告存在的原因。啊。那么,避免这种风险的唯一方法就是完全避免在您分发给第三方的任何库中引用支持库。竖起大拇指谷歌