2016-07-03 23 views
5

Khi thêm cả hai Dagger 2Android Data Binding vào dự án của tôi, tôi nhận được một số lỗi thời gian xây dựng bên dưới. Có vẻ như đây là một vấn đề đã biết (xem [1] hoặc [2]) khi tôi nhận được cùng một lỗi chính xác. Thật không may tôi đã không thể giải quyết chúng (giống như một số người khác). Có ai đó có một thiết lập làm việc đầy đủ với các phiên bản hiện tại của Dagger 2 và Data Binding, và có thể giúp đỡ?Dagger 2 và xung đột dữ liệu ràng buộc Android

Đây là lỗi:

 
C:\Users\Kai\AndroidStudioProjects\WearCompass\mobile\src\main\java\com\comparilla\wearcompass\ui\navigation\InfoPanelFragment.java:12: error: package com.comparilla.wearcompass.databinding does not exist 
import com.comparilla.wearcompass.databinding.FragmentInfoPanelBinding; 
              ^
C:\Users\Kai\AndroidStudioProjects\WearCompass\mobile\src\main\java\com\comparilla\wearcompass\ui\navigation\InfoPanelViewModel.java:8: error: cannot find symbol 
import com.comparilla.wearcompass.BR; 
           ^
    symbol: class BR 
    location: package com.comparilla.wearcompass 
C:\Users\Kai\AndroidStudioProjects\WearCompass\mobile\src\main\java\com\comparilla\wearcompass\MobileApplication.java:7: error: cannot find symbol 
import com.comparilla.wearcompass.di.components.DaggerMobileApplicationComponent; 
              ^
    symbol: class DaggerMobileApplicationComponent 
    location: package com.comparilla.wearcompass.di.components 
C:\Users\Kai\AndroidStudioProjects\WearCompass\mobile\src\main\java\com\comparilla\wearcompass\di\components\MobileActivityComponent.java:15: error: com.comparilla.wearcompass.common.services.HeadingService cannot be provided without an @Inject constructor or from an @Provides-annotated method. 
    void inject(InfoPanelFragment fragment); 
     ^
     com.comparilla.wearcompass.common.services.HeadingService is injected at 
      com.comparilla.wearcompass.di.modules.ActivityModule.provideInfoPanelViewModel(headingService, …) 
     com.comparilla.wearcompass.ui.navigation.InfoPanelViewModel is injected at 
      com.comparilla.wearcompass.ui.navigation.InfoPanelFragment.mViewModel 
     com.comparilla.wearcompass.ui.navigation.InfoPanelFragment is injected at 
      com.comparilla.wearcompass.di.components.MobileActivityComponent.inject(fragment) 
4 errors 

FAILED 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':mobile:compileDebugJavaWithJavac'. 
> Compilation failed; see the compiler error output for details. 

* Try: 
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 

BUILD FAILED 

build.gradle dự án của tôi:

 
// Top-level build file where you can add configuration options common to all sub-projects/modules. 

buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.1.2' 
     classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 

     // NOTE: Do not place your application dependencies here; they belong 
     // in the individual module build.gradle files 
    } 
} 

allprojects { 
    repositories { 
     jcenter() 
    } 
} 

task clean(type: Delete) { 
    delete rootProject.buildDir 
} 

Và build.gradle ứng dụng:

 
apply plugin: 'com.android.application' 
apply plugin: 'com.neenbedankt.android-apt' 

android { 
    compileSdkVersion 24 
    buildToolsVersion "23.0.3" 

    dataBinding { 
     enabled = true 
    } 
    defaultConfig { 
     applicationId "com.comparilla.wearcompass" 
     minSdkVersion 21 
     targetSdkVersion 24 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    wearApp project(':wear') 
    testCompile 'junit:junit:4.12' 

    // to enable BuildConfig.DEBUG in the common library 
    // see https://stackoverflow.com/a/29163361/166229 
    releaseCompile project(path: ':common', configuration: 'release') 
    debugCompile project(path: ':common', configuration: 'debug') 

    compile 'com.android.support:appcompat-v7:24.0.0' 
    compile 'com.google.android.gms:play-services-maps:9.0.2' 
    compile 'com.android.support:design:24.0.0' 
    compile 'com.android.support:preference-v14:24.0.0' 

    compile 'com.google.dagger:dagger:2.5' 
    apt 'com.google.dagger:dagger-compiler:2.5' 
    provided 'javax.annotation:jsr250-api:1.0' 
} 

Tôi cũng đã cố gắng để provided thay vì apt trong apt 'com.google.dagger:dagger-compiler:2.5', không thành công. Ngoài ra nhận xét ra apply plugin: 'com.neenbedankt.android-apt' không giúp (như đề xuất trong các tài nguyên được cung cấp).

Trả lời

5

Tôi có Dagger 2 và DataBinding được định cấu hình trong cùng một dự án và nó hoạt động mà không có bất kỳ sự cố nào.

Bạn gặp lỗi trong cấu hình Dagger 2. Bạn không thể tạo HeadingService bạn đang cố gắng tiêm vì bạn chưa cung cấp chú thích với chú thích @Provides và cả lớp không có chú thích @Inject trên hàm tạo.

+1

Bạn nói đúng. Có vẻ như có gì đó sai với thuốc tiêm của tôi. Tôi đã quá tập trung vào lỗi liên kết đó và một số báo cáo lỗi cũ hơn, rằng tôi đã bỏ qua nguyên nhân thực sự. Cảm ơn vì đã mở mắt ra! – Zardoz

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