2016-11-30 13 views
6

Po włączeniu Jack compiler w systemie Android Studio 2.2 nie jest generowany komponent Dagger 2. Czy Dagger 2 może być używany z Jackiem? Jeśli tak, to w jaki sposób powinienem skonfigurować konfigurację mojej aplikacji?Sztylet Składniki 2 nie zostały wygenerowane podczas używania Jacka

z mojej aplikacji na build.gradle:

jackOptions { 
    enabled true 
    } 

compileOptions { 
    sourceCompatibility JavaVersion.VERSION_1_8 
    targetCompatibility JavaVersion.VERSION_1_8 
} 

Odpowiedz

8

Zatapiałem się jak 2 dni, aby to zrozumieć. Więc krążę z powrotem, aby opublikować wyniki tutaj, na wypadek gdyby ktoś zaoszczędził czas:

Jest to spowodowane przez bug in Jack that prevents classpaths from working properly. Ma to związek z uruchomieniem przez Jacka "procesu" (w tej samej maszynie JVM, co demon gradle). Ustawienie wartości false na "android.defaultConfig.jackOptions.jackInProcess" wykracza poza błąd "warunków wstępnych", ale powoduje inne problemy (2 maszyny JVM, które hogują zasoby systemowe). & bugs które łamią kompilację w inny sposób (worse).

Na razie najlepszym rozwiązaniem wydaje się być:

  • Poczekaj na wersji 2.3 Android Gradle wtyczki, która ma już na to poprawkę.
  • Zmniejsz Sztylet do wersji 2.2, w międzyczasie.
    Jest to najwyższa wersja, która wydaje się unikać konfliktu Guava z Jackiem.

EDIT: Aktualizacja 14.01.2017:
wpadłem na kilka innych problemów z Jackiem i dostał tak zmęczony, że przeszedłem do retrolambda i kopnął się do nie robi to wcześniej! W tej chwili Jack wydaje się po prostu powodować więcej problemów niż rozwiązuje. Po prostu dodaj linie z plusem i usuń linie za pomocą minus i możesz wrócić do Dagger 2.8, czekając, aż Jack zrobi to razem!

+plugins { 
+ id "me.tatarka.retrolambda" version "3.4.0" 
+} 

apply plugin: 'com.android.application' 
+apply plugin: 'me.tatarka.retrolambda' 

-  jackOptions { 
-   enabled true 
-  } 

Dla jeszcze szybszego retrolambda buduje, dodać org.gradle.jvmargs=-Xmx4608M do pliku gradle.properties tak że Dexing może się zdarzyć w trakcie procesu. Teraz jestem w Dagger 2.8 i moje czyste kompilacje są tylko 12 sekund, GOOD RIDDANCE, JACK!

+0

Uaktualnienie z wersji 2.2 do 2.3 było dla mnie problemem. Dzięki – Gonzalo

3

documentation page on Jack and Jill zawiera instrukcje dotyczące procesorów dopiskiem „mają być stosowane w czasie kompilacji, ale nie powinna być uwzględniana w APK”, doradzając wykorzystania zakresu annotationProcessor zależności. Przykład przypadkowo wspomina Dagger 2:

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

Otrzymuję następujący błąd Błąd: Wykonanie nie powiodło się dla zadania ": 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 To jest problem z niedopasowanymi kopiami Guawy na ścieżce klas. Jedną z możliwości, o której nie wspomniałem, jest to, że Dagger osiągnął nieco ponad 2.0, więc '2.8' lub' 2.x' może działać znacznie lepiej. –

+0

Używam wersji 2.8 –

0

Jack jest teraz przestarzały, patrz this post.

Musisz zaktualizować Androida 3.0 do podglądu Studio 1, aby móc używać Java 8.

Jeśli nie można uaktualnić go (konflikt z innymi lib), lub chcesz czekać na uwolnienie wersja, można spróbować tego rozwiązania rozwiązania:

Powiązane problemy