DaggerApplicationComponent 未编译

DaggerApplicationComponent not compiled

我正在使用 android studio 3 的最新测试版(目前是测试版 4),但我似乎无法生成 类 所需的匕首。

我创建了一个空项目。然后我重命名 activity 以匹配匕首笔记 YourActivity。请参阅 https://google.github.io/dagger/android.html 中的 "Injecting Activity objects",其中显示:

@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 中损坏的吗?如果不是,你是如何让它工作的?

谢谢, 凯莉

Dagger 之类的编译时依赖注入工具需要一次 运行 应用。然后如果没有错误就会自动创建。

啊哈!我发现了这个问题。 gradle 应用程序文件

看来我需要另一个 annotationProcessor

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,但我很高兴这能奏效。

希望这对其他人也有帮助

可能为时已晚。但是 implementation 也适用于 dagger 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 beta-2 制作了一个简单的 hello world 项目来实现 dagger 2.11。希望这可以帮助初学者(像我一样)有一个好的开始,因为 google 文档没有提供明确的说明

MyDaggerExample

我升级到 gradle 3.0.0 时也开始遇到问题。对我来说,解决方案是将实施匕首线更改为 api:

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

在 gradle 中为 dagger 添加下面给出的所有 5 个库的依赖项

implementation 'com.google.dagger:dagger:2.11'
annotationProcessor "com.google.dagger:dagger-compiler: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'

并添加存储库 mavenCenteral()

allprojects {
repositories {
    google()
    jcenter()
    mavenCentral()

您可能忘记将 apply plugin: 'kotlin-kapt' 添加到应用级别 build.gradle

// dependency injection
implementation "com.google.dagger:dagger:$dagger2_version"
kapt "com.google.dagger:dagger-compiler:$dagger2_version"
kapt "com.google.dagger:dagger-android-processor:$dagger2_version"
annotationProcessor "com.google.dagger:dagger-compiler:$dagger2_version"

将实现和注释处理器更改为 kapt 可能会对您有所帮助。

@Singleton
@Component(modules = [AndroidSupportInjectionModule::class])
interface AppComponent : AndroidInjector<BaseApplication?> {
@Component.Builder
interface Builder {
    @BindsInstance
    fun application(application: Application?): Builder?
    fun build(): AppComponent?
    }
}

并且来自您的申请 class

class BaseApplication : DaggerApplication() {
override fun applicationInjector(): AppComponent? {
    return DaggerAppComponent.builder().application(this)?.build()
    //        return null;
   }

}

也用变化

implementation '*emphasized text*com.google.dagger:dagger:2.15'
annotationProcessor 'com.google.dagger:dagger-compiler:2.15'

kapt  'com.google.dagger:dagger:2.15'
kapt  'com.google.dagger:dagger-compiler:2.15'

谢谢。

详细的解决方法在这里:

app-level build.gradledependencies 块中,添加以下行:

     //dagger2
     api 'com.google.dagger:dagger:2.24'
     api 'com.google.dagger:dagger-android:2.24'
     api 'com.google.dagger:dagger-android-support:2.24'

     annotationProcessor 'com.google.dagger:dagger-compiler:2.24'
     kapt 'com.google.dagger:dagger-compiler:2.24'

     annotationProcessor 'com.google.dagger:dagger-android-processor:2.24'
     kapt 'com.google.dagger:dagger-android-processor:2.24'

     compileOnly 'javax.annotation:jsr250-api:1.0'
     implementation 'javax.inject:javax.inject:1'

android 应用级 build.gradle

kapt {
        generateStubs = true
    }

应用级别build.gradle顶部,按照完全低于顺序执行此操作.

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'

最后,您需要按照下面的屏幕截图配置注释过程。您可以这样做 File>Other Settings>Settings for New Projects>搜索"Annotation processor"

之后,从菜单 Build > Rebuild 执行。你完成了!

测试:

@Component
public interface ApplicationComponent {

}

现在,您可以使用在编译时为您的 ApplicationComponent 接口生成的 DaggerApplicationComponent

public class MyApplication extends Application {

    ApplicationComponent applicationComponent = DaggerApplicationComponent.create();


}

您只需要 运行 "Rebuild" 项目并修复所有编译错误(如果有)。