android - 当 dagger 不自动生成组件代码时对 gradle 文件进行故障排除
问题描述
更新:链接到项目-> https://drive.google.com/open?id=1D8mYZL3Pb8FezPp5FOKA20-Um5kTRYxH
我一直从 Dagger 开始,并按照本教程直到步骤 5.4:https ://www.vogella.com/tutorials/Dagger/article.html#special-treatment-of-fields-in-dagger
我添加了以下依赖项:
api 'com.google.dagger:dagger:2.20'
api 'com.google.dagger:dagger-android:2.20'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.20'
annotationProcessor 'com.google.dagger:dagger-compiler:2.20'
compileOnly 'javax.annotation:jsr250-api:1.0'
但 IDE 无法解析“DaggerMyApplicationComponent”(在 onCreate() 中)。似乎 Dagger 无法生成代码。
我的应用程序.java
import android.app.Activity;
import android.app.Application;
import javax.inject.Inject;
import dagger.android.DispatchingAndroidInjector;
import dagger.android.HasActivityInjector;
public class MyApplication extends Application implements HasActivityInjector {
@Inject
DispatchingAndroidInjector<Activity> dispatchingAndroidInjector;
@Override
public void onCreate() {
super.onCreate();
DaggerMyApplicationComponent.create().inject(this);
}
@Override
public DispatchingAndroidInjector<Activity> activityInjector() {
return dispatchingAndroidInjector;
}
}
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.parassidhu.daggerkumar">
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
MyApplicationModule.java:
import dagger.Module;
import dagger.android.ContributesAndroidInjector;
@Module
public abstract class MyApplicationModule {
@ContributesAndroidInjector
abstract MainActivity contributeActivityInjector();
}
MyApplicationComponent.java:
import javax.inject.Singleton;
import dagger.Component;
import dagger.android.AndroidInjectionModule;
import dagger.android.AndroidInjector;
@Singleton
@Component(modules = {AndroidInjectionModule.class, MyApplicationModule.class})
public interface MyApplicationComponent extends AndroidInjector<MyApplication> {
}
请提出什么可能是错的。我已经尝试过几次 Make Project、Clean、Rebuild、Invalidate 和 Restart,但没有任何帮助。
解决方案
正如评论中所讨论的,从 gradle 中删除所有不必要的 kotlin 依赖项和插件。如果您的项目中没有 kotlin 代码,那么将您的模块称为 kotlin 模块是没有意义的。Dagger 认为它应该生成 kotlin 代码,但它没有 kotlin 编译器来执行此操作。因此,要么将整个代码更改为 kotlin 并使用 kotlin 依赖项,要么坚持使用 java 并删除所有 kotlin 依赖项。
推荐阅读
- angular - 使用材料滑块在折线图(highcharts)上选择带有工具提示的动态值
- sql - 如何编写 SQL 查询以将两个不同的日期列与日期维度表连接起来
- python - 将嵌套字典列表转换为数据框内的集合
- php - PHP - 数组中的数组中的数组,等等
- mysql - 一张mysql表的一列相邻行之间的时间差
- java - PDFBox:将图像从 JAR 资源加载到 PDF
- javascript - HTTP DELETE 的 RESTful API 不检查 null
- c - 我在 for 循环中做错了什么?
- java - 如何在 Spring 数据 r2dbc 中替换 @PrePersist
- javascript - Jquery从另一个链接设置href