Slide 1

Slide 1 text

)JMU͸%*ΛͲ͏΍ͬͯ΍͍ͬͯΔͷ͔ Radiotalk Tech Talk #2 Android 2021/05/19 Ryo Makiyama

Slide 2

Slide 2 text

w ຀ࢁྎ w 3BEJPUBMLגࣜձࣾ w "OESPJEΤϯδχΞ w!@SNBLJZBNB wSNBLJZBNB ࣗݾ঺հ

Slide 3

Slide 3 text

࿩͢͜ͱ • Hiltͷ؆୯ͳઆ໌ • Hiltͷੜ੒ίʔυ • Ͳ͏΍ͬͯDI͍ͯ͠Δ͔ • جૅ෦෼ͷΈ • DIʹ͍ͭͯͷઆ໌ • Daggerͷجຊ • Hilt΁ͷҠߦํ๏ ࿩͞ͳ͍͜ͱ

Slide 4

Slide 4 text

🎉

Slide 5

Slide 5 text

💪

Slide 6

Slide 6 text

)JMUͷجૅ

Slide 7

Slide 7 text

ґଘؔ܎Λ௥Ճ // build.gradle buildscript { … dependencies { … classpath "com.google.dagger:hilt-android-gradle-plugin:2.35.1" } } // app/build.gradle apply plugin: 'kotlin-kapt' apply plugin: 'dagger.hilt.android.plugin' android { … } dependencies { … implementation "com.google.dagger:hilt-android:2.35.1" kapt “com.google.dagger:hilt-android-compiler:2.35.1" }

Slide 8

Slide 8 text

)JMUΞϓϦέʔγϣϯ @HiltAndroidApp class SampleApp : Application() {

Slide 9

Slide 9 text

όΠϯσΟϯάΛΦϒδΣΫτάϥϑʹొ࿥ class Hoge @Inject constructor() interface Piyo class PiyoImpl : Piyo @Module @InstallIn(SingletonComponent :: class) object PiyoModule { @Provides fun providePiyo(): Piyo { return PiyoImpl() } }

Slide 10

Slide 10 text

"DUJWJUZʹґଘؔ܎Λ஫ೖ @AndroidEntryPoint class MainActivity : AppCompatActivity() { @Inject lateinit var hoge: Hoge @Inject lateinit var piyo: Piyo … }

Slide 11

Slide 11 text

ͨͬͨ͜Ε͚ͩʜ🎉

Slide 12

Slide 12 text

)JMUҎલʢ%BHHFSʣͷ՝୊ • ίϯϙʔωϯτ/αϒίϯϙʔωϯτͷઃܭ • ͦΕͧΕͷείʔϓͷׂΓ౰ͯ • ϓϩδΣΫτຖͷઃܭͷֶशίετ

Slide 13

Slide 13 text

)JMU͕ղܾͨ͜͠ͱ • ίϯϙʔωϯτ/είʔϓͷඪ४Խ • ϘΠϥʔϓϨʔτͷ࡟ݮ • ઃఆͷ؆ૉԽʹΑΔֶशίετͷ࡟ݮ

Slide 14

Slide 14 text

)JMU͕ղܾͨ͜͠ͱ • ίϯϙʔωϯτ/είʔϓͷඪ४Խ • ϘΠϥʔϓϨʔτͷ࡟ݮ • ֶशίετͷ࡟ݮ ͦͷҰํͰʜ

Slide 15

Slide 15 text

)JMU͕ղܾͨ͜͠ͱ • ίϯϙʔωϯτ/είʔϓͷඪ४Խ • ϘΠϥʔϓϨʔτͷ࡟ݮ • ֶशίετͷ࡟ݮ Ͳ͏΍ͬͯ΍͍ͬͯΔͷ🤔

Slide 16

Slide 16 text

ੜ੒͞ΕͨίʔυΛݟͯΈΔ👀

Slide 17

Slide 17 text

ੜ੒͞Εͨίʔυ܈ • Hilt_SampleApp • DaggerSampleApp_HiltComponents_SingletonC • SampleApp_HiltComponents • SampleApp_GeneratedInjector • Hilt_MainActivity • MainActivity_GeneratedInjector • MainActivity_MembersInjector • Hoge_Factory • PiyoModule_ProvidePiyoFactory ˞લड़ͨ͠)JMUͷجૅͰॻ͍ͨίʔυʹΑΔੜ੒Λϕʔεͱ͍ͯ͠·͢ɻ

Slide 18

Slide 18 text

public abstract class Hilt_SampleApp extends Application implements GeneratedComponentManagerHolder { private final ApplicationComponentManager componentManager = new ApplicationComponentManager(new ComponentSupplier() { @Override public Object get() { return DaggerSampleApp_HiltComponents_SingletonC.builder() .applicationContextModule(new ApplicationContextModule(Hilt_SampleApp.this)) .build(); } }); @Override public final ApplicationComponentManager componentManager() { return componentManager; } @Override public final Object generatedComponent() { return this.componentManager().generatedComponent(); } @CallSuper @Override public void onCreate() { ((SampleApp_GeneratedInjector) generatedComponent()).injectSampleApp(UnsafeCasts.unsafeCast(this)); super.onCreate(); } }

Slide 19

Slide 19 text

public abstract class Hilt_SampleApp extends Application implements GeneratedComponentManagerHolder { private final ApplicationComponentManager componentManager = new ApplicationComponentManager(new ComponentSupplier() { @Override public Object get() { return DaggerSampleApp_HiltComponents_SingletonC.builder() .applicationContextModule(new ApplicationContextModule(Hilt_SampleApp.this)) .build(); } }); @Override public final ApplicationComponentManager componentManager() { return componentManager; } @Override public final Object generatedComponent() { return this.componentManager().generatedComponent(); } @CallSuper @Override public void onCreate() { ((SampleApp_GeneratedInjector) generatedComponent()).injectSampleApp(UnsafeCasts.unsafeCast(this)); super.onCreate(); } }

Slide 20

Slide 20 text

public abstract class Hilt_SampleApp extends Application implements GeneratedComponentManagerHolder { private final ApplicationComponentManager componentManager = new ApplicationComponentManager(new ComponentSupplier() { @Override public Object get() { return DaggerSampleApp_HiltComponents_SingletonC.builder() .applicationContextModule(new ApplicationContextModule(Hilt_SampleApp.this)) .build(); } }); @Override public final ApplicationComponentManager componentManager() { return componentManager; } @Override public final Object generatedComponent() { return this.componentManager().generatedComponent(); } @CallSuper @Override public void onCreate() { ((SampleApp_GeneratedInjector) generatedComponent()).injectSampleApp(UnsafeCasts.unsafeCast(this)); super.onCreate(); } } "QQMJDBUJPOϨϕϧͷίϯϙʔωϯτΛੜ੒ɾอ࣋

Slide 21

Slide 21 text

public abstract class Hilt_SampleApp extends Application implements GeneratedComponentManagerHolder { private final ApplicationComponentManager componentManager = new ApplicationComponentManager(new ComponentSupplier() { @Override public Object get() { return DaggerSampleApp_HiltComponents_SingletonC.builder() .applicationContextModule(new ApplicationContextModule(Hilt_SampleApp.this)) .build(); } }); @Override public final ApplicationComponentManager componentManager() { return componentManager; } @Override public final Object generatedComponent() { return this.componentManager().generatedComponent(); } @CallSuper @Override public void onCreate() { ((SampleApp_GeneratedInjector) generatedComponent()).injectSampleApp(UnsafeCasts.unsafeCast(this)); super.onCreate(); } } )JMU͕4BNQMF"QQʹ"QQMJDBUJPOϨϕϧͷ ίϯϙʔωϯτͷґଘؔ܎ΛఏڙͰ͖ΔΑ͏ʹ͍ͯ͠Δ

Slide 22

Slide 22 text

public abstract class Hilt_SampleApp extends Application implements GeneratedComponentManagerHolder { private final ApplicationComponentManager componentManager = new ApplicationComponentManager(new ComponentSupplier() { @Override public Object get() { return DaggerSampleApp_HiltComponents_SingletonC.builder() .applicationContextModule(new ApplicationContextModule(Hilt_SampleApp.this)) .build(); } }); @Override public final ApplicationComponentManager componentManager() { return componentManager; } @Override public final Object generatedComponent() { return this.componentManager().generatedComponent(); } @CallSuper @Override public void onCreate() { ((SampleApp_GeneratedInjector) generatedComponent()).injectSampleApp(UnsafeCasts.unsafeCast(this)); super.onCreate(); } } "QQMJDBUJPOϨϕϧͷίϯϙʔωϯτ

Slide 23

Slide 23 text

public final class DaggerSampleApp_HiltComponents_SingletonC extends SampleApp_HiltComponents.SingletonC { … public static Builder builder() {…} @Override public void injectSampleApp(SampleApp sampleApp) {…} @Override public ActivityRetainedComponentBuilder retainedComponentBuilder() {…} @Override public ServiceComponentBuilder serviceComponentBuilder() {…} public static final class Builder {…} private final class ActivityRetainedCBuilder implements SampleApp_HiltComponents.ActivityRetainedC.Builder {…} private final class ActivityRetainedCImpl extends SampleApp_HiltComponents.ActivityRetainedC {…} private final class ServiceCBuilder implements SampleApp_HiltComponents.ServiceC.Builder {…} private final class ServiceCImpl extends SampleApp_HiltComponents.ServiceC {…} }

Slide 24

Slide 24 text

public final class DaggerSampleApp_HiltComponents_SingletonC extends SampleApp_HiltComponents.SingletonC { … public static Builder builder() {…} @Override public void injectSampleApp(SampleApp sampleApp) {…} @Override public ActivityRetainedComponentBuilder retainedComponentBuilder() {…} @Override public ServiceComponentBuilder serviceComponentBuilder() {…} public static final class Builder {…} private final class ActivityRetainedCBuilder implements SampleApp_HiltComponents.ActivityRetainedC.Builder {…} private final class ActivityRetainedCImpl extends SampleApp_HiltComponents.ActivityRetainedC {…} private final class ServiceCBuilder implements SampleApp_HiltComponents.ServiceC.Builder {…} private final class ServiceCImpl extends SampleApp_HiltComponents.ServiceC {…} } ࣗ਎ͷϏϧμʔΫϥε "DUJWJUZ3FUBJOFE$PNQPOFOUͷ࣮૷ͱ ͦͷϏϧμʔΫϥε 4FSWJDF$PNQPOFOUͷ࣮૷ͱ ͦͷϏϧμʔΫϥε

Slide 25

Slide 25 text

public final class DaggerSampleApp_HiltComponents_SingletonC extends SampleApp_HiltComponents.SingletonC { … public static Builder builder() {…} @Override public void injectSampleApp(SampleApp sampleApp) {…} @Override public ActivityRetainedComponentBuilder retainedComponentBuilder() {…} @Override public ServiceComponentBuilder serviceComponentBuilder() {…} public static final class Builder {…} private final class ActivityRetainedCBuilder implements SampleApp_HiltComponents.ActivityRetainedC.Builder {…} private final class ActivityRetainedCImpl extends SampleApp_HiltComponents.ActivityRetainedC {…} private final class ServiceCBuilder implements SampleApp_HiltComponents.ServiceC.Builder {…} private final class ServiceCImpl extends SampleApp_HiltComponents.ServiceC {…} }

Slide 26

Slide 26 text

public final class DaggerSampleApp_HiltComponents_SingletonC extends SampleApp_HiltComponents.SingletonC { … private final class ActivityRetainedCImpl extends SampleApp_HiltComponents.ActivityRetainedC { … @Override public ActivityComponentBuilder activityComponentBuilder() {…} @Override public ActivityRetainedLifecycle getActivityRetainedLifecycle() {…} private final class ActivityCBuilder implements SampleApp_HiltComponents.ActivityC.Builder {…} private final class ActivityCImpl extends SampleApp_HiltComponents.ActivityC {…} private final class ViewModelCBuilder implements SampleApp_HiltComponents.ViewModelC.Builder {…} private final class ViewModelCImpl extends SampleApp_HiltComponents.ViewModelC {…} … }

Slide 27

Slide 27 text

public final class DaggerSampleApp_HiltComponents_SingletonC extends SampleApp_HiltComponents.SingletonC { … private final class ActivityRetainedCImpl extends SampleApp_HiltComponents.ActivityRetainedC { … @Override public ActivityComponentBuilder activityComponentBuilder() {…} @Override public ActivityRetainedLifecycle getActivityRetainedLifecycle() {…} private final class ActivityCBuilder implements SampleApp_HiltComponents.ActivityC.Builder {…} private final class ActivityCImpl extends SampleApp_HiltComponents.ActivityC {…} private final class ViewModelCBuilder implements SampleApp_HiltComponents.ViewModelC.Builder {…} private final class ViewModelCImpl extends SampleApp_HiltComponents.ViewModelC {…} … } "DUJWJUZ$PNQPOFOUͷ࣮૷ͱ ͦͷϏϧμʔΫϥε 7JFX.PEFM$PNQPOFOUͷ࣮૷ͱ ͦͷϏϧμʔΫϥε

Slide 28

Slide 28 text

public final class DaggerSampleApp_HiltComponents_SingletonC extends SampleApp_HiltComponents.SingletonC { … private final class ActivityRetainedCImpl extends SampleApp_HiltComponents.ActivityRetainedC { … @Override public ActivityComponentBuilder activityComponentBuilder() {…} @Override public ActivityRetainedLifecycle getActivityRetainedLifecycle() {…} private final class ActivityCBuilder implements SampleApp_HiltComponents.ActivityC.Builder {…} private final class ActivityCImpl extends SampleApp_HiltComponents.ActivityC {…} private final class ViewModelCBuilder implements SampleApp_HiltComponents.ViewModelC.Builder {…} private final class ViewModelCImpl extends SampleApp_HiltComponents.ViewModelC {…} … } IUUQTEFWFMPQFSBOESPJEDPNUSBJOJOHEFQFOEFODZJOKFDUJPOIJMUBOESPJE

Slide 29

Slide 29 text

public final class DaggerSampleApp_HiltComponents_SingletonC extends SampleApp_HiltComponents.SingletonC { … public static Builder builder() {…} @Override public void injectSampleApp(SampleApp sampleApp) {…} @Override public ActivityRetainedComponentBuilder retainedComponentBuilder() {…} @Override public ServiceComponentBuilder serviceComponentBuilder() {…} public static final class Builder {…} private final class ActivityRetainedCBuilder implements SampleApp_HiltComponents.ActivityRetainedC.Builder {…} private final class ActivityRetainedCImpl extends SampleApp_HiltComponents.ActivityRetainedC {…} private final class ServiceCBuilder implements SampleApp_HiltComponents.ServiceC.Builder {…} private final class ServiceCImpl extends SampleApp_HiltComponents.ServiceC {…} }

Slide 30

Slide 30 text

public final class SampleApp_HiltComponents { … @Component( modules = { ApplicationContextModule.class, PiyoModule.class, ActivityRetainedCBuilderModule.class, ServiceCBuilderModule.class } ) @Singleton public abstract static class SingletonC implements SampleApp_GeneratedInjector, HiltWrapper_ActivityRetainedComponentManager_ActivityRetainedComponentBuilderEntryPoint, ServiceComponentManager.ServiceComponentBuilderEntryPoint, SingletonComponent, GeneratedComponent { } … } $PNQPOFOUͷఆ͕ٛ·ͱ·͍ͬͯΔΫϥε

Slide 31

Slide 31 text

public final class SampleApp_HiltComponents { … @Component( modules = { ApplicationContextModule.class, PiyoModule.class, ActivityRetainedCBuilderModule.class, ServiceCBuilderModule.class } ) @Singleton public abstract static class SingletonC implements SampleApp_GeneratedInjector, HiltWrapper_ActivityRetainedComponentManager_ActivityRetainedComponentBuilderEntryPoint, ServiceComponentManager.ServiceComponentBuilderEntryPoint, SingletonComponent, GeneratedComponent { } … } །Ұͷ$PNQPOFOU @Module @InstallIn(SingletonComponent :: class) object PiyoModule { @Provides fun providePiyo(): Piyo { return PiyoImpl() } }

Slide 32

Slide 32 text

public final class SampleApp_HiltComponents { … @Subcomponent( modules = { HiltWrapper_ActivityRetainedComponentManager_LifecycleModule.class, ActivityCBuilderModule.class, ViewModelCBuilderModule.class } ) @ActivityRetainedScoped public abstract static class ActivityRetainedC implements ActivityRetainedComponent, ActivityComponentManager.ActivityComponentBuilderEntryPoint, HiltWrapper_ActivityRetainedComponentManager_ActivityRetainedLifecycleEntryPoint, GeneratedComponent { @Subcomponent.Builder abstract interface Builder extends ActivityRetainedComponentBuilder { } } … } 4JOHMFUPO$Ҏ֎͸4VCDPNQPOFOU IUUQTEFWFMPQFSBOESPJEDPNUSBJOJOHEFQFOEFODZJOKFDUJPOIJMUBOESPJE

Slide 33

Slide 33 text

͜͜·ͰΛ੔ཧ🍵 • Hilt_AppName͕ى఺ʹͳΓґଘؔ܎ΛఏڙͰ͖ΔΑ͏ʹͳΔ • AppName_HiltComponents͸ඪ४Խ͞Εͨ 
 DaggerͷίϯϙʔωϯτΛఆٛ • DaggerAppName_HiltComponents_SingletonC͸ 
 ίϯϙʔωϯτ܈ͷ࣮૷Ϋϥε

Slide 34

Slide 34 text

ੜ੒͞Εͨίʔυ܈ • Hilt_SampleApp • DaggerSampleApp_HiltComponents_SingletonC • SampleApp_HiltComponents • SampleApp_GeneratedInjector • Hilt_MainActivity • MainActivity_GeneratedInjector • MainActivity_MembersInjector • Hoge_Factory • PiyoModule_ProvidePiyoFactory ˞લड़ͨ͠)JMUͷجૅͰॻ͍ͨίʔυʹΑΔੜ੒Λϕʔεͱ͍ͯ͠·͢ɻ

Slide 35

Slide 35 text

"DUJWJUZ΁ͷґଘؔ܎ͷ஫ೖ·Ͱ

Slide 36

Slide 36 text

public abstract class Hilt_MainActivity extends AppCompatActivity implements GeneratedComponentManagerHolder { private volatile ActivityComponentManager componentManager; … @Override public final Object generatedComponent() { return this.componentManager().generatedComponent(); } … protected void inject() { if (!injected) { injected = true; ((MainActivity_GeneratedInjector) this.generatedComponent()).injectMainActivity(UnsafeCasts.unsafeCast(this)); } } @Override public ViewModelProvider.Factory getDefaultViewModelProviderFactory() { return DefaultViewModelFactories.getActivityFactory(this, super.getDefaultViewModelProviderFactory()); } }

Slide 37

Slide 37 text

public abstract class Hilt_MainActivity extends AppCompatActivity implements GeneratedComponentManagerHolder { private volatile ActivityComponentManager componentManager; … @Override public final Object generatedComponent() { return this.componentManager().generatedComponent(); } … protected void inject() { if (!injected) { injected = true; ((MainActivity_GeneratedInjector) this.generatedComponent()).injectMainActivity(UnsafeCasts.unsafeCast(this)); } } @Override public ViewModelProvider.Factory getDefaultViewModelProviderFactory() { return DefaultViewModelFactories.getActivityFactory(this, super.getDefaultViewModelProviderFactory()); } }

Slide 38

Slide 38 text

public abstract class Hilt_MainActivity extends AppCompatActivity implements GeneratedComponentManagerHolder { private volatile ActivityComponentManager componentManager; … @Override public final Object generatedComponent() { return this.componentManager().generatedComponent(); } … protected void inject() { if (!injected) { injected = true; ((MainActivity_GeneratedInjector) this.generatedComponent()).injectMainActivity(UnsafeCasts.unsafeCast(this)); } } @Override public ViewModelProvider.Factory getDefaultViewModelProviderFactory() { return DefaultViewModelFactories.getActivityFactory(this, super.getDefaultViewModelProviderFactory()); } } // package dagger.hilt.android.internal.managers public class ActivityComponentManager implements GeneratedComponentManager { … @Override public Object generatedComponent() { if (component == null) { synchronized (componentLock) { if (component == null) { component = createComponent(); } } } return component; } … }

Slide 39

Slide 39 text

public abstract class Hilt_MainActivity extends AppCompatActivity implements GeneratedComponentManagerHolder { private volatile ActivityComponentManager componentManager; … @Override public final Object generatedComponent() { return this.componentManager().generatedComponent(); } … protected void inject() { if (!injected) { injected = true; ((MainActivity_GeneratedInjector) this.generatedComponent()).injectMainActivity(UnsafeCasts.unsafeCast(this)); } } @Override public ViewModelProvider.Factory getDefaultViewModelProviderFactory() { return DefaultViewModelFactories.getActivityFactory(this, super.getDefaultViewModelProviderFactory()); } } )JMU͕.BJO"DUJWJUZʹ"DUJWJUZϨϕϧͷ ίϯϙʔωϯτͷґଘؔ܎ΛఏڙͰ͖ΔΑ͏ʹ͍ͯ͠Δ

Slide 40

Slide 40 text

public final class DaggerSampleApp_HiltComponents_SingletonC extends SampleApp_HiltComponents.SingletonC { … private final class ActivityCImpl extends SampleApp_HiltComponents.ActivityC { … @Override public void injectMainActivity(MainActivity mainActivity) { injectMainActivity2(mainActivity); } … private MainActivity injectMainActivity2(MainActivity instance) { MainActivity_MembersInjector.injectHoge(instance, new Hoge()); MainActivity_MembersInjector.injectPiyo(instance, PiyoModule_ProvidePiyoFactory.providePiyo()); return instance; } … } }

Slide 41

Slide 41 text

public final class DaggerSampleApp_HiltComponents_SingletonC extends SampleApp_HiltComponents.SingletonC { … private final class ActivityCImpl extends SampleApp_HiltComponents.ActivityC { … @Override public void injectMainActivity(MainActivity mainActivity) { injectMainActivity2(mainActivity); } … private MainActivity injectMainActivity2(MainActivity instance) { MainActivity_MembersInjector.injectHoge(instance, new Hoge()); MainActivity_MembersInjector.injectPiyo(instance, PiyoModule_ProvidePiyoFactory.providePiyo()); return instance; } … } } @OriginatingElement( topLevelClass = MainActivity.class ) @GeneratedEntryPoint @InstallIn(ActivityComponent.class) public interface MainActivity_GeneratedInjector { void injectMainActivity(MainActivity mainActivity); }

Slide 42

Slide 42 text

public final class DaggerSampleApp_HiltComponents_SingletonC extends SampleApp_HiltComponents.SingletonC { … private final class ActivityCImpl extends SampleApp_HiltComponents.ActivityC { … @Override public void injectMainActivity(MainActivity mainActivity) { injectMainActivity2(mainActivity); } … private MainActivity injectMainActivity2(MainActivity instance) { MainActivity_MembersInjector.injectHoge(instance, new Hoge()); MainActivity_MembersInjector.injectPiyo(instance, PiyoModule_ProvidePiyoFactory.providePiyo()); return instance; } … } }

Slide 43

Slide 43 text

public final class DaggerSampleApp_HiltComponents_SingletonC extends SampleApp_HiltComponents.SingletonC { … private final class ActivityCImpl extends SampleApp_HiltComponents.ActivityC { … @Override public void injectMainActivity(MainActivity mainActivity) { injectMainActivity2(mainActivity); } … private MainActivity injectMainActivity2(MainActivity instance) { MainActivity_MembersInjector.injectHoge(instance, new Hoge()); MainActivity_MembersInjector.injectPiyo(instance, PiyoModule_ProvidePiyoFactory.providePiyo()); return instance; } … } } public final class PiyoModule_ProvidePiyoFactory implements Factory { … public static Piyo providePiyo() { return Preconditions.checkNotNullFromProvides(PiyoModule.INSTANCE.providePiyo()); } … }

Slide 44

Slide 44 text

public final class DaggerSampleApp_HiltComponents_SingletonC extends SampleApp_HiltComponents.SingletonC { … private final class ActivityCImpl extends SampleApp_HiltComponents.ActivityC { … @Override public void injectMainActivity(MainActivity mainActivity) { injectMainActivity2(mainActivity); } … private MainActivity injectMainActivity2(MainActivity instance) { MainActivity_MembersInjector.injectHoge(instance, new Hoge()); MainActivity_MembersInjector.injectPiyo(instance, PiyoModule_ProvidePiyoFactory.providePiyo()); return instance; } … } } public final class PiyoModule_ProvidePiyoFactory implements Factory { … public static Piyo providePiyo() { return Preconditions.checkNotNullFromProvides(PiyoModule.INSTANCE.providePiyo()); } … } @Module @InstallIn(SingletonComponent :: class) object PiyoModule { @Provides fun providePiyo(): Piyo { return PiyoImpl() } }

Slide 45

Slide 45 text

public final class MainActivity_MembersInjector implements MembersInjector { … @InjectedFieldSignature("com.rmakiyama.daggerhiltstudy.MainActivity.hoge") public static void injectHoge(MainActivity instance, Hoge hoge) { instance.hoge = hoge; } @InjectedFieldSignature("com.rmakiyama.daggerhiltstudy.MainActivity.piyo") public static void injectPiyo(MainActivity instance, Piyo piyo) { instance.piyo = piyo; } } .BJO"DUJWJUZ΁ϑΟʔϧυΠϯδΣΫγϣϯ

Slide 46

Slide 46 text

"DUJWJUZʹґଘؔ܎͕஫ೖ͞Εͨ🎉 @AndroidEntryPoint class MainActivity : AppCompatActivity() { @Inject lateinit var hoge: Hoge @Inject lateinit var piyo: Piyo … }

Slide 47

Slide 47 text

#POVTUSBDL🚀

Slide 48

Slide 48 text

1JZPΛ4JOHMFUPOείʔϓʹͯ͠ΈΔ @Module @InstallIn(SingletonComponent :: class) object PiyoModule { @Provides @Singleton fun providePiyo(): Piyo { return PiyoImpl() } }

Slide 49

Slide 49 text

public final class DaggerSampleApp_HiltComponents_SingletonC extends SampleApp_HiltComponents.SingletonC { … private volatile Object piyo = new MemoizedSentinel(); private Piyo piyo() { Object local = piyo; if (local instanceof MemoizedSentinel) { synchronized (local) { local = piyo; if (local instanceof MemoizedSentinel) { local = PiyoModule_ProvidePiyoFactory.providePiyo(); piyo = DoubleCheck.reentrantCheck(piyo, local); } } } return (Piyo) local; } … private final class ActivityCImpl extends SampleApp_HiltComponents.ActivityC { … private MainActivity injectMainActivity2(MainActivity instance) { MainActivity_MembersInjector.injectHoge(instance, new Hoge()); MainActivity_MembersInjector.injectPiyo(instance, DaggerSampleApp_HiltComponents_SingletonC.this.piyo()); return instance; } … } } 4JOHMFUPO$PNQPOFOUͰΠϯελϯεΛ؅ཧ

Slide 50

Slide 50 text

·ͱΊ • Hilt͸ίϯϙʔωϯτ֊૚Λඪ४Խͨ͠ • ಺෦Ͱͷॲཧ͸Dagger2ͱ͋·ΓมΘΒͳ͍ • ίϯϙʔωϯτઃܭͰ೰·ͳ͍ͷͰཧղ͠΍͍͢ • ͜ΕͰ͋ͳͨ΋ੜ੒ίʔυ͕ಡΊΔʂ • Ͳ͏΍ͬͯ΍͍ͬͯΔ͔Λཧղ͢Δͱ҆৺

Slide 51

Slide 51 text

"QQFOEJY

Slide 52

Slide 52 text

-JOLT • https: // developer.android.com/training/dependency-injection/ hilt-android • https: // developer.android.com/training/dependency-injection/ dagger-android • https: // dagger.dev/hilt/ • https: // zenn.dev/rmakiyama/articles/ed007c13e498fc • https: // github.com/rmakiyama/DaggerHiltStudy • https: // qiita.com/takahirom/items/46053e031041405e2a9e