2016-11-30 18 views
6

Khi tôi bật Jack compiler trong Android Studio 2.2, thành phần Dagger 2 không được tạo. Dagger 2 có thể được sử dụng với Jack không? Nếu vậy, làm thế nào tôi sẽ đi về cấu hình ứng dụng của tôi?Các thành phần Dagger 2 không được tạo khi sử dụng Jack

Từ ứng dụng của tôi build.gradle:

jackOptions { 
    enabled true 
    } 

compileOptions { 
    sourceCompatibility JavaVersion.VERSION_1_8 
    targetCompatibility JavaVersion.VERSION_1_8 
} 

Trả lời

8

Tôi bị chìm như 2 ngày để tìm ra điều này. Vì vậy, tôi quay lại để đăng những phát hiện ở đây trong trường hợp nó tiết kiệm thời gian ai đó:

Điều này gây ra bởi một bug in Jack that prevents classpaths from working properly. Nó phải làm với Jack chạy "trong quá trình" (trong cùng một JVM như daemon gradle). Việc đặt android.defaultConfig.jackOptions.jackInProcess thành sai sẽ vượt quá lỗi "Điều kiện tiên quyết" nhưng nó gây ra các sự cố khác (2 JVM mà tài nguyên hệ thống hog) & bugs phá vỡ cách xây dựng theo cách khác (worse).

Cho đến nay, giải pháp tốt nhất có vẻ là:

  • Chờ cho việc phát hành 2.3 của plugin gradle Android, mà đã có sửa chữa cho việc này.
  • Hạ cấp Dagger xuống v2.2, trong thời gian chờ đợi.
    Đây là phiên bản cao nhất có vẻ như tránh xung đột ổi với Jack.

EDIT: Cập nhật 2017/01/14:
tôi chạy vào một số vấn đề khác với Jack và đã quá mệt mỏi của nó mà tôi chuyển sang retrolambda và đá bản thân mình cho không làm trước đây! Ngay bây giờ, Jack dường như chỉ gây ra nhiều vấn đề hơn là giải quyết. Chỉ cần thêm các dòng với dấu cộng và xóa các dòng có dấu trừ và bạn có thể quay trở lại Dagger 2.8 trong khi đợi Jack để nó hoạt động cùng nhau!

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

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

-  jackOptions { 
-   enabled true 
-  } 

Đối retrolambda thậm chí nhanh hơn xây dựng, thêm org.gradle.jvmargs=-Xmx4608M đến file gradle.properties của bạn để Dexing có thể xảy ra trong quá trình. Bây giờ, tôi đang sử dụng Dagger 2.8 và các bản dựng sạch chỉ có 12 giây, RIDDANCE TỐT, JACK!

+0

Cập nhật từ cấp độ 2.2 đến 2.3 đã thực hiện thủ thuật cho tôi. Cảm ơn – Gonzalo

3

Các documentation page on Jack and Jill có hướng dẫn cụ thể để xử lý chú thích "được áp dụng tại thời gian biên dịch nhưng không được bao gồm trong gói ứng dụng của bạn", tư vấn việc sử dụng phạm vi annotationProcessor phụ thuộc. Ví dụ ngẫu nhiên đề cập đến Dagger 2:

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

Tôi nhận được lỗi sau Lỗi: Thực thi không thành công cho công việc ': 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 Đó là vấn đề với các bản sao không phù hợp của Ổi trên đường dẫn lớp. Một khả năng mà tôi đã không xem xét là Dagger đã nâng cấp một chút quá khứ 2.0, vì vậy '2.8' hoặc' 2.x' có thể hoạt động tốt hơn nhiều. –

+0

Tôi đang sử dụng phiên bản 2.8 –

0

Jack hiện không còn được dùng nữa, xem this post.

Bạn phải nâng cấp Android Studio của bạn đến 3,0 xem trước 1, để có thể sử dụng Java 8.

Nếu bạn không thể nâng cấp nó (mâu thuẫn với lib khác), hoặc bạn muốn chờ đợi một thông cáo phiên bản, bạn có thể thử giải pháp này:

Các vấn đề liên quan