2016-11-30 31 views
6

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

从我的应用程序的build.gradle

jackOptions { 
    enabled true 
    } 

compileOptions { 
    sourceCompatibility JavaVersion.VERSION_1_8 
    targetCompatibility JavaVersion.VERSION_1_8 
} 

回答

8

我沉迷了2天才想出来。因此,我回过头来发布这里的调查结果,以便节省时间:

这是由bug in Jack that prevents classpaths from working properly造成的。它与杰克运行“进程内”(在与gradle守护进程相同的JVM中)有关。将android.defaultConfig.jackOptions.jackInProcess设置为false确实会超出“先决条件”错误,但会导致其他问题(2个占用系统资源的JVM)& bugs以其他(worse)方式破坏构建。

就目前而言,最好的解决办法似乎是:

  • 等待2.3版本Android的gradle这个插件,它已经为这个事儿了。
  • 同时将Dagger降级到v2.2。
    这是最高版本,似乎避免与杰克的番石榴冲突。

编辑:更新2017年1月14日:
我遇到了杰克几个其他的问题,并得到这么累呢,我切换到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=-Xmx4608Mgradle.properties文件,以便能够德兴进程中发生。现在,我在匕首2.8和我的干净版本只有12秒,良好的RIDDANCE,杰克!

+0

从gradle 2.2更新到2.3对我来说确实有窍门。谢谢 – Gonzalo

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' 
} 
+3

我收到以下错误错误:执行失败的任务“:应用程序:transformJackWithJackForDebug”。 > com.android.jack.ir.JNodeInternalError:java.lang.Exception的:java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkState(ZLjava /郎/字符串; Ljava /郎/对象; Ljava /郎/对象; Ljava /郎/对象;)V –

+0

@Mario这与在classpath番石榴的副本不匹配的问题。我没有注意到的一个可能是Dagger已经比2.0进步了很多,所以'2.8'或'2.x'可能会更好。 –

+0

我使用的是2.8版本 –

0

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

你有你的Android工作室升级到3.0预览1,能够使用Java 8

如果您不能升级(与其他LIB冲突),或者要等待释放版本,您可以尝试此解决方法解决方案: