クラスにインジェクトを追加するとこのエラーが発生し、コンパイルエラーが発生します。削除した場合
@Inject static ApiService mApiService;
それはうまく機能しています
そして、私は最初にマージ2アプリケーションがdagger2を使用し、2番目のアプリケーションがbutterknifeであり、両方のディレクトリ構造がdiffernetであり、両方のアプリケーションが相互に依存して正常に動作するが、コードアプリケーションをコンパイルしてDaggerAppComponentを与えないため、2つのアプリケーションクラスを使用していますエラー!
クエリの解決にご協力ください
私は以下の構造に従っています
@ActivityScope
@Component(dependencies = AppComponent.class)
public interface ActivityComponent extends AppComponent {
void inject(SignInActivity activity);
}
@Singleton
@Component(modules = {ApplicationModule.class, ApiModule.class})
public interface AppComponent {
Context appContext();
Config config();
ApiService apiService();
}
@Module
public class ActivityModule {
private final Activity mActivity;
public ActivityModule(Activity activity){
mActivity = activity;
}
@Provides
public Context activityContext(){
return mActivity;
}
}
@Module
public class ApiModule {
@Provides
@Singleton
public ApiService apiService(){
OkHttpClient client = new OkHttpClient().newBuilder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.build();
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES,false);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
return new Retrofit.Builder()
.baseUrl(Config.API_URL)
.addConverterFactory(JacksonConverterFactory.create(mapper))
.client(client)
.build()
.create(ApiService.class);
}
}
@Module
public class ApplicationModule {
private final App mApp;
public ApplicationModule(App app) {
mApp = app;
}
@Provides
@Singleton
public Context appContext() {
return mApp;
}
@Provides
@Singleton
public Config config() {
return new Config(mApp);
}
}
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface ActivityScope {
}
public class App extends BrowserApp {
private AppComponent mAppComponent;
@Override
public void onCreate() {
super.onCreate();
mAppComponent = DaggerAppComponent.builder().applicationModule(new ApplicationModule(this)).build();
}
public AppComponent getAppAppComponent() {
return mAppComponent;
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
私の場合、私は試しました:
私の場合に私を助けた唯一のことは、コンソールを開くことでした "build"、 "Toggle View"(コンソールの左側でハンマーの下)をクリックしますおよびその画面に表示されるエラーを修正。
私のようなこの問題の解決策を探している人々を助けるために、アプリのbuild.gradle
モジュール(既存のdagger2
依存関係)
// Dagger 2
implementation "com.google.dagger:dagger-Android-support:2.11"
implementation "com.google.dagger:dagger:2.11"
annotationProcessor "com.google.dagger:dagger-compiler:2.11"
シンボルクラスDaggerAppComponentが見つからない場合:\ app\build\generatedフォルダーに移動して削除し、プロジェクトを再構築します。
この問題がありました。私の場合、すべてのコンポーネントクラスの上に@Singeltonを置くのを忘れていました。
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
...
}
私の場合、サブモジュールにdagger2依存関係を含めていたため、DaggerAppComponent
は生成されませんでした。そこから依存関係を削除し、メインアプリモジュールで問題を解決しました。
これを試しましたか?
@ActivityScope
@Component(modules = ActivityModule.class, dependencies =
AppComponent.class)
public interface ActivityComponent extends AppComponent {
void inject(SignInActivity activity);
}
私の場合、SomeModuleに次のようなものをKotlinモジュールに追加しました。
@SomeScope
@Provides
internal fun providesSomeService(activity: MainActivity): SomeServiceProvider {
return SomeServiceProviderImpl(activity)
}
それを削除して別のエラーを取得し、修正しました。そのため、Gitを使用して、何が間違っているのかを理解してください。 Kotlinでは、@Binds
および@Provides
異なるモジュールへのメソッド。
私は以下にgradle.propertiesに追加しました:-
-Pandroid.incrementalJavaCompile=false
それは私のために働いた