如何同时使用Realm.io和Dagger(或任何需要注释处理的多个依赖项)



我正试图在我的android应用程序中同时使用Realm.io和Dagger,但我似乎遇到了META-INF/services/javax.annotation.processing.Processor文件的冲突问题。

我已经尝试将以下内容添加到我的build.gradle文件中:

packagingOptions {
    pickFirst 'META-INF/services/javax.annotation.processing.Processor'
}

我也在exclude中尝试过,但我遇到了一些错误,比如注释处理器没有在两个项目中运行。

我一直遇到的错误是标准的Module adapter for class could not be loaded.

我认为正在发生的事情是,由于没有保留两个AnnotationProcessors,其中一个或另一个包的处理器不会发生,但我可能会偏离目标。

你的AnnotationProcessors不应该在你的compile依赖范围内,它们应该在provided中,或者,如果你使用的是android apt,则在apt中。

Realm似乎没有像应该的那样分离出注释处理器,因此需要留在编译类路径中,但dagger编译器可以移动到提供的。

这最终会看起来像这样:

compile 'com.squareup.dagger:dagger:1.2.2'
provided 'com.squareup.dagger:dagger-compiler:1.2.2'
compile 'io.realm:realm-android:0.87.1'

提供的(或apt)作用域使依赖项可供编译器使用,但不将它们包含在最终产品中,而最终产品并不需要它们。您遇到的冲突是在dex进程中,但在这些范围内,这些类永远不会走那么远。

这还有一个额外的好处,那就是缩小你最终APK的大小。

最新更新