以javax.inject作为依赖项发布Android库是否有效?

时间:2019-07-13 18:48:21

标签: android dagger-2 dagger android-lint javax-inject

我正在编写一个依赖于javax.inject的JVM库的Android库。对于大多数Android库,默认的Android linter似乎不允许javax.inject作为(传递)依赖项,但对于Dagger和Guice却将其列入白名单。我可以编写具有javax.inject依赖项的Android库吗?如果需要,我需要了解哪些注意事项?

我正在编写这两个库:一个依赖JVM库的纯JVM库(即JAR)和Android库(即AAR)。

我希望我的JVM库支持Dagger。该库非常简单,我认为不需要提供@Component或其他任何东西;只是@Inject构造函数应该可以解决问题。

因此,我不想让非Dagger使用者负担任何额外的变形等工作,并以为自己很聪明,所以在JVM库的build.gradle文件中只包含了javax.inject,而不是Dagger本身:

implementation "javax.inject:javax.inject:1"

因此Dagger用户只能按自己认为合适的方式注入JVM库的对象,而非Dagger用户则永远不会知道它们之间的区别(因为javax.inject库只是一些注释)。在带有Dagger的测试应用程序中,这似乎可以正常工作。

但是!在使用JVM库的Android库中(并为其提供了一些与Android相关的便利),运行lint会导致错误:“错误:库中的包引用无效; Android中不包含javax.inject。”因为我知道Dagger已经使用了该库,所以我很困惑,因此我搜索了lint错误并发现了Android linter specifically whitelists Dagger

为什么默认的linter不允许所有其他库使用javax.inject? Dagger和Guice是否正在做一些特殊的事情来确保javax.inject可用,还是我可以忽略该错误?

0 个答案:

没有答案