2017-06-20 80 views
4

匕首2.10我曾經是能夠通過我已經使用AndroidInjector的活動和一切都很好做DaggerAppComponent沒有創建

sAppComponent = DaggerAppComponent.builder() 
      .appModule(new AppModule(this)) 
      .sessionModule(new SessionModule()) 
      .netModule(new NetModule()) 
      .dataModule(new DataModule()) 
      .build(); 

創建應用程序組件。 現在我切換到2.11,我無法找到創建應用程序組件的方式。 在google tutorial我看到:

DaggerYourApplicationComponent.create() 
    .inject(this); 

在應用程序的OnCreate添加。 在我的情況下,DaggerYourApplicationComponent = DaggerAppComponent。問題是DaggerAppComponent類不再被創建。

我:

public class App extends android.support.multidex.MultiDexApplication implements HasActivityInjector { 
    @Inject DispatchingAndroidInjector<Activity> mDispatchingActivityInjector; 
    @Override 
    public void onCreate() { 
     super.onCreate(); 

     sAppComponent = DaggerAppComponent.create().inject(this); //here the error 

和:

@Singleton 
@Component(modules = { 
     AppModule.class, 
     MainActivityModule.class, 
     ... 
}) 
public interface AppComponent { 
     void inject(App app); 
     ... 
} 

中的build.gradle文件我有:

def daggerVer = 2.11 
compile "com.google.dagger:dagger:$daggerVer" 
compile "com.google.dagger:dagger-android-support:$daggerVer" 
annotationProcessor "com.google.dagger:dagger-android-processor:$daggerVer" 
+0

在清單中,並在註冊應用程序類? –

+0

是的,應用程序工作正常與版本2.10 – kingston

+0

而不是嘗試'DaggerAppComponent.builder()。創建(this).inject(this)'。 – azizbekian

回答

12

好抱歉的噪音。我愚蠢的錯誤:當我切換到2.11我複製從google tutorial其中依賴性的build.gradle部分:

annotationProcessor "com.google.dagger:dagger-compiler:$daggerVer" 

不是一個原因,我不知道上市。 下面列出的所有的依賴工程:

def daggerVer = 2.12 // or latest version 

implementation "com.google.dagger:dagger:$daggerVer" 
implementation "com.google.dagger:dagger-android-support:$daggerVer" 
annotationProcessor "com.google.dagger:dagger-android-processor:$daggerVer" 
annotationProcessor "com.google.dagger:dagger-compiler:$daggerVer" 

如果您正在使用科特林

apply plugin: 'kotlin-kapt' 

dependencies { 
    implementation "com.google.dagger:dagger:$daggerVer" 
    implementation "com.google.dagger:dagger-android-support:$daggerVer" 
    kapt "com.google.dagger:dagger-android-processor:$daggerVer" 
    kapt "com.google.dagger:dagger-compiler:$daggerVer" 
} 
+0

這樣做並拒絕看到它。乾淨,cleanBuildCache,沒有任何工作。 – JPM

+0

@JPM你使用kotlin嗎? – kingston

+0

是使用匕首。原來,這是由於Inject字段仍然顯示字段爲私人。我添加了JvmField註釋,然後就消失了。 – JPM

3

科特林,我們必須添加kapt編譯器插件使用匕首2

在您的應用程序中,添加此插件

apply plugin: 'kotlin-kapt' 

並添加依賴關係如下

dependencies 
{ 
    implementation "com.google.dagger:dagger:$latest_version" 
    kapt "com.google.dagger:dagger-compiler:$latest_version" 
    implementation "com.google.dagger:dagger-android:$latest_version" 
    kapt "com.google.dagger:dagger-android-processor:$latest_version" 
    implementation "com.google.dagger:dagger-android-support:$latest_version" 
    kapt "com.google.dagger:dagger-android-support:2.12" 
} 

見科特林 Documentation