2016-11-30 7 views
6

Когда я включаю Jack compiler в Android Studio 2.2, компонент Dagger 2 не генерируется. Можно ли использовать кинжал 2 с Джеком? Если да, то как мне настроить конфигурацию приложения?Компоненты Dagger 2 не генерируются при использовании Jack

Из моего приложения 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. Это связано с тем, что Джек работает «in-process» (в той же JVM, что и демоном градации). Установка android.defaultConfig.jackOptions.jackInProcess на false выходит за пределы ошибки «Предпосылки», но вызывает другие проблемы (2 JVMs, которые поддерживают системные ресурсы) & bugs, которые ломают сборку в других (worse) способами.

В настоящее время, самое лучшее решение, кажется:

  • Дождитесь выхода Android Gradle плагин, который уже имеет починку для этого 2.3.
  • Даунгрейд Кинжал до v2.2, тем временем.
    Это самая высокая версия, которая, кажется, избегает конфликта с Гуавой с Джеком.

EDIT: обновление 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 и мои чистые сборки всего 12 секунд, GOOD RIDDANCE, JACK!

+0

Обновление от градации 2.2 до 2.3 сделало трюк для меня. благодаря – Gonzalo

3

documentation page on Jack and Jill содержит инструкции, специфичные для процессоров аннотаций «которые будут применяться во время компиляции, но не должны быть включены в ваш APK», советуя использовать рамки в annotationProcessor зависимости. В примере, совпадающем с примером, упоминается Кинжал 2:

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

Я получаю следующее сообщение об ошибке Ошибка: Выполнение выполнено для задачи ': app: transformJackWithJackForDebug'. > com.android.jack.ir.JNodeInternalError: java.lang.Exception: java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState (ZLjava/lang/String; Ljava/lang/Object; Ljava/lang/Object; Ljava/lang/Object;) V –

+0

@Mario Это проблема с несогласованными копиями Guava на пути к классам. Одна из возможностей, которую я не изучил, заключается в том, что Dagger продвинулся совсем немного до 2.0, поэтому '2.8' или' 2.x' могут работать намного лучше. –

+0

Я использую версию 2.8 –

0

Джек теперь устарел, см. this post.

Вы должны обновить Android Studio до 3.0 Preview 1, чтобы иметь возможность использовать Java 8.

Если вы не можете обновить его (конфликт с другими Lib), или вы хотите ждать релиза версии, вы можете попробовать это решение:

 Смежные вопросы

  • Нет связанных вопросов^_^