当我启用 Jack compiler在 Android Studio 2.2 中 Dagger 2未生成组件。 Dagger 2 可以和 Jack 一起使用吗?如果是这样,我将如何配置我的应用程序?
从我的应用程序的build.gradle
:
jackOptions {
enabled true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
最佳答案
我花了 2 天时间才弄清楚这个问题。所以我转回来在这里发布调查结果,以防它节省一些人的时间:
这是由 bug in Jack that prevents classpaths from working properly 引起的.它与 Jack 运行“进程内”(在与 gradle 守护进程相同的 JVM 中)有关。将 android.defaultConfig.jackOptions.jackInProcess
设置为 false 确实超出了“先决条件”错误,但它会导致其他问题(2 个占用系统资源的 JVM)& bugs以其他 ( worse) 方式破坏构建。
目前,最好的解决方案似乎是:
- 等待 Android gradle 插件的 2.3 版本发布,它已经修复了这个问题。
- 同时将 Dagger 降级到 v2.2。
这是最高版本,似乎避免了与 Jack 的 Guava 冲突。
编辑:2017 年 1 月 14 日更新:
我遇到了 Jack 的其他几个问题并且厌倦了它以至于我切换到 retrolambda 并且因为没有早点这样做而踢自己!现在, jack 似乎造成的问题多于解决的问题。只需添加带加号的行并删除带减号的行,您就可以返回 Dagger 2.8,同时等待 Jack 一起行动!
+plugins {
+ id "me.tatarka.retrolambda" version "3.4.0"
+}
apply plugin: 'com.android.application'
+apply plugin: 'me.tatarka.retrolambda'
- jackOptions {
- enabled true
- }
要获得更快的 retrolambda 构建,请将 org.gradle.jvmargs=-Xmx4608M
添加到您的 gradle.properties
文件中,以便在进程中进行 dexing。现在,我使用的是 Dagger 2.8,我的干净构建只有 12 秒,GOOD RIDDANCE,JACK!
关于android - 使用 Jack 时未生成 Dagger 2 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40897009/