发布版本上的领域冲突/ClassCastException

Realm Conflict / ClassCastException on release builds

在实时构建中使用

compile 'io.realm:realm-android:0.87.4'

(compile 'com.jakewharton:butterknife:6.1.0')

我收到任务 ':app:compileReleaseJavaWithJavac' 的执行失败。

Caused by: java.lang.ClassCastException: com.sun.tools.javac.code.Symbol$VarSymbol cannot be cast to javax.lang.model.element.TypeElement
at io.realm.processor.RealmProcessor.process(RealmProcessor.java:131)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:793)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:722)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.access00(JavacProcessingEnvironment.java:97)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1029)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1163)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1108)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:824)

可能是什么问题?依赖冲突?我们正在使用:

 packagingOptions {
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/services/javax.annotation.processing.Processor'
}

我们还应该在这里添加什么吗?

==== 编辑 1 ====

控制台也给出了这个输出(下面的所有内容,以及可能的解决方案):

Error:java.lang.RuntimeException: java.lang.ClassCastException: com.sun.tools.javac.code.Symbol$VarSymbol cannot be cast to javax.lang.model.element.TypeElement

此意外错误的可能原因包括:

在损坏的 Gradle 进程的情况下,您还可以尝试关闭 IDE 然后杀死所有 Java 进程.

==== 编辑 2 ====

问题依然存在...

您的 butterknife & realm 库版本依赖项可能存在问题。

compile 'io.realm:realm-android:0.81.1'
compile 'com.jakewharton:butterknife:7.0.1'

有关详细信息,请阅读下面的内容 link issue github

注意:-如果没有解决,请检查您使用的注释导入。

经过一个下午疯狂的试错,终于找到了。有人添加了错误导入的@Nullable 注释。

import javax.annotation.Nullable;

而且,只有在发布(导出)APK 时才会导致问题。

只需删除 Nullable 注释或将导入更改为:

import android.support.annotation.Nullable;

已解决问题。

我通过安装 Java 8 找到它。比 IDE 给你一个特定的错误,而不是上面问题中发布的一般堆栈跟踪。

尝试使用我们的 AAR 发行版而不是 JAR 来查看它是否修复了它。你可以在这里看到如何:https://realm.io/news/android-installation-change/

最新版本为0.87.4