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

标签 android gradle android-gradle-plugin dagger realm

我正在尝试同时使用 Realm.ioDagger在我的 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/

相关文章:

android - 如何修复Android Studio Gradle

java - 如何修复 gradle 构建错误配置根项目时出现问题?

java - 如何从 Gradle 中的构建脚本依赖项导入类

android - 如何自定义产品 flavor 的 APK 文件名?

android - 任务 ':app:compileDebugAidl' : aidl is missing 执行失败

Android 底部导航 Activity 在 onCreate 中给出空指针异常

java - 线程退出并出现未捕获的异常 : NO stack trace

android - Listview Widget 不会自动更新

使用 Eclipse 的安卓图形用户界面

android - Gradle 构建运行无限时间