我正在编写一个依赖于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
可用,还是我可以忽略该错误?