我正在尝试同时使用 Realm.io和 Dagger在我的 android 应用程序中,但我似乎遇到了与 META-INF/services/javax.annotation.processing.Processor
文件的冲突问题。
我已经尝试将以下内容添加到我的 build.gradle 文件中:
packagingOptions {
pickFirst 'META-INF/services/javax.annotation.processing.Processor'
}
并尝试使用 exclude
,但我收到错误消息,例如注释处理器未在任何一个项目中运行。
我一直遇到的错误是标准无法加载类的模块适配器。
。
我认为正在发生的事情是,由于两个 AnnotationProcessor 都没有被保留,一个或另一个包的处理器将不会发生,但我可能会偏离。
最佳答案
你的 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'
provided(或 apt)作用域使编译器可以使用依赖项,但不会将它们包含在最终产品中,因为最终产品不需要它们。您遇到的冲突是在 dex 进程中,但在这些范围内,这些类永远不会走那么远。
这还有一个额外的好处,就是可以缩减最终 APK 的大小。
关于android - 如何同时使用 Realm.io 和 Dagger(或任何需要注释处理的多个依赖项)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29110977/