android - 使用 Jack 时未生成 Dagger 2 组件

标签 android android-studio dagger-2

当我启用 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/

相关文章:

android - 我无法在 android 的 ListView 中显示数组列表

android - 如何将 Activity 注入(inject)到正在注入(inject) Activity 的对象中?

android - 无法解析 : com. google.android :flexbox:0. 2.1

java - Dagger2 允许注入(inject)为空

java - 使用 Dagger 和 AWS Lambda 进行单元测试

java - OpenCV - 在视频和图像上查找黑板边缘

android - 带有 onTouchListener 的复选框

android - 支持使用 token 对同一帐户进行多次登录

Android - 重启后打开系列 Activity

android - 升级到 Android Studio 3.1 后无法加载类 'com.android.builder.Version'