我试图在我的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都没有被保留,一个或另一个包的处理器不会发生,但我可能会离开。
答案 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的大小。