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

时间:2015-03-17 22:32:56

标签: android gradle android-gradle dagger realm

我试图在我的Android应用中同时使用Realm.ioDagger,但我似乎遇到了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都没有被保留,一个或另一个包的处理器不会发生,但我可能会离开。

1 个答案:

答案 0 :(得分:2)

您的AnnotationProcessors不应位于compile依赖范围内,它们应位于provided中,或者如果您使用android-apt,则apt

Realm看起来并不像他们应该那样分离出他们的注释处理器,因此需要留在编译类路径中,但是匕首编译器可以移动到提供。

这最终会看起来像这样:

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的大小。