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 文档没有提供明确的说明
我升级到 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.gradle
内 dependencies
块中,添加以下行:
//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 {
}
现在,您可以使用在编译时为您的 Applicatio
nComponent 接口生成的 DaggerApplicationComponent
。
public class MyApplication extends Application {
ApplicationComponent applicationComponent = DaggerApplicationComponent.create();
}
您只需要 运行 "Rebuild" 项目并修复所有编译错误(如果有)。
我正在使用 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 文档没有提供明确的说明
我升级到 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.gradle
内 dependencies
块中,添加以下行:
//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 {
}
现在,您可以使用在编译时为您的 Applicatio
nComponent 接口生成的 DaggerApplicationComponent
。
public class MyApplication extends Application {
ApplicationComponent applicationComponent = DaggerApplicationComponent.create();
}
您只需要 运行 "Rebuild" 项目并修复所有编译错误(如果有)。