匕首2“匕首”前缀组件不能编译? 自动生成的类

我试图在Android上使用Dagger 2。 我以前有工作,我有一个appModule注入到应用程序中的特定类的依赖项。 我的问题是,我得到错误

Error:(14, 55) error: cannot find symbol class DaggerAppComponent 

试图导入。 这是一个自动生成的类

下面是我的build.gradle文件中的Dagger特定依赖关系

  compile 'com.google.dagger:dagger-compiler:2.0.2' compile 'com.google.dagger:dagger:2.0.2' provided 'javax.annotation:jsr250-api:1.0' 

我曾尝试清理和重build应用程序无数次,但类不会生成。 我也尝试过使用

  compile 'org.glassfish:javax.annotation:10.0-b28' 

对于我的注释,但Iam仍然没有运气? 如果有人可以帮我出身份证的欣赏。 目前对我来说究竟有什么困难? 谢谢

编辑:组件代码这是工作之前,我只是添加了1个额外的类注入?

 @Singleton @Component(modules = AppModule.class) public interface AppComponent { void inject(RegHelper reghelper); void inject(headerFooterRecViewAdapter headadapter); void inject(SectionListExampleActivity seclistactivity); } 

Solutions Collecting From Web of "匕首2“匕首”前缀组件不能编译? 自动生成的类"

请加

 apt 'com.google.dagger:dagger-compiler:2.x' 

到您的应用程序build.gradle文件

在Android Studio 2.3中设置一个独立的项目,我更新了默认的gradle文件,如下所示,以获得生成的组件文件。 添加的行有注释// dagger2 addition

PROJECT build.gradle

 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.1' // dagger2 addition classpath 'com.android.tools.build:gradle:1.0.0' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.+' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() // dagger2 addition mavenCentral() maven{ url 'https://oss.sonatype.org/content/repositories/snapshots/' } } } task clean(type: Delete) { delete rootProject.buildDir } 

APP MODULE build.gradle

 apply plugin: 'com.android.application' apply plugin: 'com.neenbedankt.android-apt' // dagger2 addition android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "com.demo.dagger2demo" minSdkVersion 15 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.3.0' compile 'com.android.support.constraint:constraint-layout:1.0.2' testCompile 'junit:junit:4.12' // dagger2 addition compile 'com.google.dagger:dagger:2.+' apt "com.google.dagger:dagger-compiler:2.+" } 

这(当前)最新的匕首依赖关系为我做了诡计。

 `dependencies{ ... compile 'com.google.dagger:dagger:2.11' compile 'com.google.dagger:dagger-android-support:2.11' annotationProcessor "com.google.dagger:dagger-compiler:2.11" }` 

你需要安装这个插件https://bitbucket.org/hvisser/android-apt为了Android Studio看到Dagger组件。

我在以下应用程序类的Android Studio 2.2中遇到了同样的问题:

 public class NetApp extends Application { private NetComponent mNetComponent; @Override public void onCreate() { super.onCreate(); // Dagger%COMPONENT_NAME% mNetComponent = DaggerNetComponent.builder() // list of modules that are part of this component need to be created here too .appModule(new AppModule(this)) // This also corresponds to the name of your module: %component_name%Module .netModule(new NetModule("https://api.github.com")) .build(); // If a Dagger 2 component does not have any constructor arguments for any of its modules, // then we can use .create() as a shortcut instead: // mNetComponent = com.codepath.dagger.components.DaggerNetComponent.create(); } public NetComponent getNetComponent() { return mNetComponent; } } 

我为匕首2使用下面的gradle声明:

 //Dagger 2 // apt command comes from the android-apt plugin apt 'com.google.dagger:dagger-compiler:2.7' compile 'com.google.dagger:dagger:2.7' provided 'javax.annotation:jsr250-api:1.0' 

我可以通过重build完整的项目(有错误)来解决问题,然后添加之前缺less的DaggerNetComponent的导入。

只需将@Module添加到Api类并重build项目。

希望你们一切顺利。 我面临着同样的问题,并花了很多时间在堆栈溢出。 最后我经历了这个 ,能够find解决scheme。 简而言之,您必须对模块级别的Gradle文件进行一些更改。 请删除

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

在文件的顶部。 并replace

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

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

之后,重build你的项目,你将能够导入你的Dagger前缀类。 Hopw它会帮助你。

我有一个与Dagger 2类似的问题。我有一个AppComponent和一个ActivityComponent(是一个子组件)。 只要我在AppComponent中添加一个新的inject()函数,我会得到上述错误。

除了'找不到符号'的错误之外还有更多的错误,但是他们非常模糊,我不能debugging我的问题。 在挖掘和研究stackoverflow和不同的教程后,我意识到我正在使用Dagger不正确。 特别是我的AppComponent和ActivityComponent被设置的方式。

我是假设我可以注入我的'活动'或'片段'与我的AppComponent和ActivityComponent。 这个结果是错误的,至less我发现这不是使用Dagger的正确方法。

我的解决scheme

AppComponent

 @Singleton @Component(modules = {AppModule.class}) public interface AppComponent { void inject(MyApp application); void inject(ContextHelper contextHelper); // for exports MyApp application(); PrefsHelper prefsHelper(); } 

应用模块

 @Module public class AppModule { private final MyApp application; public AppModule(MyApp application) { this.application = application; } @Provides @Singleton public MyApp application() { return this.application; } @Provides @Singleton public PrefsHelper providePrefsHelper() { PrefsHelper prefsHelper = new PrefsHelper(application); return prefsHelper; } } 

ActivityComponent

 @ActivityScope @Component (dependencies = {AppComponent.class}, modules = {ActivityModule.class}) public interface ActivityComponent { void inject(MainActivity activity); void inject(OtherActivity activity); void inject(SomeFragment fragment); } 

ActivityModule

 @Module public class ActivityModule { private final MyActivity activity; public ActivityModule(MyActivity activity) { this.activity = activity; } @Provides @ActivityScope public ContextHelper provideContextHelper(MyApp application) { // My ContextHelper depends on certain things from AppModule // So I call appComponent.inject(contextHelper) AppComponent appComponent = application.getAppComponent(); ContextHelper contextHelper = new ContextHelper(activity); appComponent.inject(contextHelper); return contextHelper; } } 

应用

 public class MyApp extends Application { private AppComponent appComponent; @Override public void onCreate() { super.onCreate(); initializeDepInj(); } private void initializeDepInj() { appComponent = DaggerAppComponent.builder() .appModule(new AppModule(this)) .build(); appComponent.inject(this); } public LockAppComponent getAppComponent() { return appComponent; } } 

活动

 public class MainActivity extends AppCompatActivity { // I get it from ActivityModule @Inject ContextHelper contextHelper; // I get it from AppModule @Inject PrefsHelper prefsHelper; ActivityComponent component; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setupInjection(); } protected void setupInjection() { MyApp application = (MyApp) getApplication(); component = DaggerActivityComponent.builder() .appComponent(application.getAppComponent()) .activityModule(new ActivityModule(this)) .build(); component.inject(this); // I was also doing the following snippet // but it's not the correct way since the ActivityComponent depends // on AppComponent and therefore ActivityComponent is the only // component that I should inject() with and I'll still get classes // that are provided by the AppComponent/AppModule // application.getAppComponent().inject(this); // this is unneccessary } public ContextHelper getContextHelper() { return contextHelper; } } 

我不知道它是否直接解决你的问题,但至less应该清楚如何正确使用匕首。

希望能帮助到你。

将以下内容添加到您的类build.gradle

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'