使用Jack时未生成Dagger 2组件

时间:2016-11-30 19:54:01

标签: android android-studio dagger-2

当我在Android Studio 2.2中启用Jack compiler时,不会生成Dagger 2组件。 Dagger 2可以和杰克一起使用吗?如果是这样,我将如何配置我的应用程序?

从我的应用程序Win7 x64 Developer

build.gradle

3 个答案:

答案 0 :(得分:8)

我沉迷了2天才搞清楚这一点。所以我回过头来发布调查结果,以免节省时间:

这是由bug in Jack that prevents classpaths from working properly引起的。这与杰克跑步"进程中有关" (与gradle守护程序在同一JVM中)。将android.defaultConfig.jackOptions.jackInProcess设置为false确实超出了"前提条件"错误但它会导致其他问题(2个JVM占用系统资源)& bugs以其他(worse)方式破坏构建。

目前,最佳解决方案似乎是:

  • 等待Android gradle插件的2.3版本,该插件已经有了解决方案。
  • 在此期间将Dagger降级为v2.2 它是最高版本似乎可以避免与杰克的番石榴冲突。

编辑:更新1/14/2017:
我和杰克遇到了几个其他的问题并且厌倦了这个问题,我转而使用了retrolambda并踢了自己,因为没有早点做这个!现在,杰克似乎只会导致比解决更多的问题。只需添加带有加号的行并删除带有减号的行,然后您可以返回Dagger 2.8,同时等待杰克让它一起行动!

+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上,我的 clean builds 只有12秒, GOOD RIDDANCE,JACK!

答案 1 :(得分:3)

documentation page on Jack and Jill具有特定于注释处理器的指令“将在编译时应用但不包含在您的APK中”,建议使用annotationProcessor依赖范围。这个例子巧合地提到了Dagger 2:

dependencies {
    compile 'com.google.dagger:dagger:2.0'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.0'
}

答案 2 :(得分:0)

杰克现已弃用,请参阅this post

您必须将Android Studio升级到3.0预览版1,才能使用Java 8。

如果您无法升级(与其他lib冲突),或者您想等待发布版本,则可以尝试以下解决方法: