1

我正在使用android studio 3的最新測試版(目前爲beta 4),我似乎無法得到它來生成所需的匕首類。DaggerApplicationComponent未編譯

從我身邊我創建了一個空的項目。然後我重新命名活動以匹配匕首筆記,YourActivity。請參閱「注射活動對象」 https://google.github.io/dagger/android.html,這說明這一點:

@Subcomponent(modules = ...) 
public interface YourActivitySubcomponent extends AndroidInjector<YourActivity> { 
    @Subcomponent.Builder 
    public abstract class Builder extends AndroidInjector.Builder<YourActivity> {} 
} 

@Module(subcomponents = YourActivitySubcomponent.class) 
abstract class YourActivityModule { 
    @Binds 
    @IntoMap 
    @ActivityKey(YourActivity.class) 
    abstract AndroidInjector.Factory<? extends Activity> 
    bindYourActivityInjectorFactory(YourActivitySubcomponent.Builder builder); 
} 

@Component(modules = {..., YourActivityModule.class}) 
interface YourApplicationComponent {} 

@ActivityScope 
@ContributesAndroidInjector(modules = { /* modules to install into the subcomponent */ }) 
abstract YourActivity contributeYourActivityInjector(); 

public class YourApplication extends Application implements HasActivityInjector { 
    @Inject DispatchingAndroidInjector<Activity> dispatchingActivityInjector; 

    @Override 
    public void onCreate() { 
    super.onCreate(); 
    DaggerYourApplicationComponent.create() 
     .inject(this); 
    } 

    @Override 
    public AndroidInjector<Activity> activityInjector() { 
    return dispatchingActivityInjector; 
    } 
} 

//the renamed activity 
public class YourActivity extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
    //added this line 
    AndroidInjection.inject(this); 

    super.onCreate(savedInstanceState); 
    } 
} 

我還添加了從該網頁下面的gradle這個構建的應用程序文件:

dependencies { 
    compile 'com.google.dagger:dagger-android:2.11' 
    compile 'com.google.dagger:dagger-android-support:2.11' // if you use the support libraries 
    annotationProcessor 'com.google.dagger:dagger-android-processor:2.11' 
} 

,因爲我還沒有看到任何事情我試着更新編譯成執行與仍然沒有運氣,如果你很好奇,看起來像:

dependencies { 
    implementation 'com.google.dagger:dagger-android:2.11' 
    implementation 'com.google.dagger:dagger-android-support:2.11' // if you use the support libraries 
    annotationProcessor 'com.google.dagger:dagger-android-processor:2.11' 
} 

而且,我已經找到了默認設置,我可以打開默認Build - >Compiler - >Annotation Processors啓用它。我在創建新項目之前做了這個。

經過這一切,似乎沒有任何工作。這在android studio 3.x中被破壞了嗎?如果不是,你是如何得到它的工作?

感謝, 凱利

回答

2

啊哈哈!我發現了這個問題。看來我需要另一個annotationProcessor線爲gradle這個app文件

annotationProcessor 'com.google.dagger:dagger-compiler:2.11'

雖然他們的例子完全不是那麼回事吧,至少我現在看到DaggerYourApplicationComponent

全gradle這個部分:

dependencies { 
    compile 'com.google.dagger:dagger-android:2.11' 
    compile 'com.google.dagger:dagger-android-support:2.11' // if you use the support libraries 
    annotationProcessor 'com.google.dagger:dagger-android-processor:2.11' 
    annotationProcessor 'com.google.dagger:dagger-compiler:2.11' 
} 

注意:我還沒有嘗試用implementation代替compile,但我很高興這工作。

希望這也可以幫助其他人

0

匕首就像編譯時的依賴注入工具,一旦需要運行的應用程序。如果沒有錯誤,它會自動創建。

+0

當我嘗試構建時,每次出現錯誤都是因爲找不到'DaggerYourApplicationComponent'。並且如果註釋掉編碼然後編譯。它建立。之後我會在'DaggerYourApplicationComponent'這一行發表評論,看看它無法找到它並且無法構建。 – KellyTheDev

+0

清理項目文件後,我的ApplicationComponent也會刪除並給出錯誤。但是當我的所有提供者和其他人都是正確的時,它會在第一次構建之後創建 – mbakgun

+0

這就是我發現的@mbakgun – KellyTheDev

0

可能已經太晚了。但implementation也匕首2.11

implementation 'com.google.dagger:dagger-android:2.11' 
implementation 'com.google.dagger:dagger-android-support:2.11' 
annotationProcessor 'com.google.dagger:dagger-android-processor:2.11' 
annotationProcessor 'com.google.dagger:dagger-compiler:2.11' 

我已經使用過Android Studio 3.0的β-2做了一個簡單的Hello World項目實施匕首2.11工作。希望這可以幫助初學者(像我)有一個良好的開端,因爲谷歌文檔不提供就可以了明確的指示

MyDaggerExample

1

我開始看到問題,當我升級到3.0.0搖籃也。對我來說,解決方案是將執行匕首行更改爲api:

api 'com.google.dagger:dagger-android:2.11'