ダガー2を使用してAndroidxフラグメントを注入したい。
public class MainActivity extends AppCompatActivity implements HasSupportFragmentInjector
{
@Inject Reposetory reposetory;
@Inject DispatchingAndroidInjector<androidx.fragment.app.Fragment> dispatchingAndroidInjector;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public AndroidInjector<androidx.fragment.app.Fragment> supportFragmentInjector()
{
return dispatchingAndroidInjector;
}
}
問題は、プロジェクトをビルドしたいときにこのエラーが発生することです:
error: cannot find symbol class MapBuilder
そして、DispatchingAndroidInjectorでandroidx.fragment.app.FragmentをFragmentに変更すると、このエラーは発生しなくなります。
Androidxはまだサポートされていませんが、jetifierを有効にすると問題が解決する可能性があります。
gradle.properties
に次のコードを追加するだけです
Android.useAndroidX=true
Android.enableJetifier=true
詳細については、次の問題も参照してください。
AndroidXの短剣サポートが欠落していました。バージョン2.21以降に追加されます
したがって、次のように使用できます-
implementation 'com.google.dagger:dagger:2.21'
implementation 'com.google.dagger:dagger-Android:2.21'
implementation 'com.google.dagger:dagger-Android-support:2.21'
kapt "com.google.dagger:dagger-compiler:2.21"
kapt "com.google.dagger:dagger-Android-processor:2.21"
これとは別に、初めて使用してサポートからAndroidXに移行する場合は、gradle.properties
@Saeed Masoumiが述べたように。以下を追加する必要があります-
Android.useAndroidX=true
Android.enableJetifier=true
Jetifierは、実行時にsupportライブラリからAndroidXパッケージに移行するのに役立ちます時間。そのための最良の答えはここで見つけることができます- https://stackoverflow.com/a/52002285/842607
前に提案したように、以下のコードをgradle.propertiesに追加します
Android.useAndroidX = true
Android.enableJetifier = true
そして、フラグメントに注入しようとしている場合は、AndroidInjection.inject(this)
をAndroidSupportInjection.inject(this)
に置き換える必要があります
次は私のために働いた:
最初に、サポートライブラリの短剣にgradle依存関係を追加します。
implementation "com.google.dagger:dagger-Android-support:2.23.2"
次に、androidx.fragmentの子であるフラグメントに、次の方法で注入します。
AndroidSupportInjection.inject(this)
jetifierがsupport packagesをandroidxパッケージに変更しない場合jetifier
ツールを here からダウンロードし、次のコマンドを使用してAndroid-dagger-support.aarファイルを手動で変換できます。
./jetifier-standalone -i dagger-Android-support-<version>.aar -o <output-name>
次に、ライブラリをプロジェクトに追加します。これは、変換後のHasSupportFragmentクラスです
import androidx.fragment.app.Fragment;
import dagger.Android.AndroidInjector;
public interface HasSupportFragmentInjector {
AndroidInjector<Fragment> supportFragmentInjector();
}
どういうわけか、jetifierツールはAndroidStudioのライブラリを変換していませんでした。手動でやらなければなりませんでした。