Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Replace with dagger.android
Search
Yuji Koketsu
October 25, 2017
Programming
0
2.4k
Replace with dagger.android
Yuji Koketsu
October 25, 2017
Tweet
Share
More Decks by Yuji Koketsu
See All by Yuji Koketsu
How to contribute android-gpuimage
kettsun0123
0
620
AutoSizingTextView
kettsun0123
0
220
Android Instant Apps or Progressive Web Apps
kettsun0123
1
450
Other Decks in Programming
See All in Programming
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
400
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
230
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
1.1k
MUSUBIXとは
nahisaho
0
130
Patterns of Patterns
denyspoltorak
0
1.4k
Apache Iceberg V3 and migration to V3
tomtanaka
0
160
CSC307 Lecture 06
javiergs
PRO
0
680
Best-Practices-for-Cortex-Analyst-and-AI-Agent
ryotaroikeda
1
100
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
360° Signals in Angular: Signal Forms with SignalStore & Resources @ngLondon 01/2026
manfredsteyer
PRO
0
120
CSC307 Lecture 08
javiergs
PRO
0
670
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
170
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
How to Think Like a Performance Engineer
csswizardry
28
2.4k
RailsConf 2023
tenderlove
30
1.3k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
170
The untapped power of vector embeddings
frankvandijk
1
1.6k
GitHub's CSS Performance
jonrohan
1032
470k
Done Done
chrislema
186
16k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
820
The Spectacular Lies of Maps
axbom
PRO
1
520
How to Ace a Technical Interview
jacobian
281
24k
What's in a price? How to price your products and services
michaelherold
247
13k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.3k
Transcript
REPLACE WITH DAGGER.ANDROID
HELLO ABOUT ME Yuji Koketsu @kettsun0123 ▸ Android Developer ▸
CyberAgent, Inc ▸ ݩ AbemaTV >> ৽نϝσΟΞ
REPLACE WITH DAGGER.ANDROID What is dagger.android?
WHAT IS DAGGER.ANDROID? DAGGER.ANDROID IS… ▸ Dagger2ͷAndroid֦ுDIϥΠϒϥϦ ▸ v2.10 ▸
core͕ϦϦʔε ▸ v2.11 ▸ @ContributesAndroidInjectorՃ ▸ DaggerApplicationՃ ▸ v2.12 ▸ ࠓ࠷৽൛ʂ https://github.com/google/dagger/releases
WHAT IS DAGGER.ANDROID? class MainActivity : AppCompatActivity() { lateinit var
instance: Hoge override fun onCreate(state: Bundle?) { super.onCreate(state) ... } ... }
WHAT IS DAGGER.ANDROID? class MainActivity : AppCompatActivity() { @Inject lateinit
var instance: Hoge override fun onCreate(state: Bundle?) { AndroidInjection.inject(this) super.onCreate(state) ... } ... }
REPLACE WITH DAGGER.ANDROID dagger.androidͰஔ͖͑Δ
REPLACE WITH DAGGER.ANDROID App MainActivity AppModule class Hoge
REPLACE WITH DAGGER.ANDROID dependencies { // dagger.android implementation "com.google.dagger:dagger-android:2.12" implementation
"com.google.dagger:dagger-android-support:2.12" kapt "com.google.dagger:dagger-android-processor:2.12" }
REPLACE WITH DAGGER.ANDROID AppComponent.kt @Singleton @Component(modules = arrayOf( AppModule::class ))
interface AppComponent { fun inject(app: App) fun activityComponent(): ActivityComponent }
REPLACE WITH DAGGER.ANDROID AppComponent.kt @Singleton @Component(modules = arrayOf( AndroidInjectionModule::class, AppModule::class
)) interface AppComponent : AndroidInjector<App> { @Component.Builder interface Builder { fun application(application: App): Builder fun build(): AppComponent } override fun inject(app: App) }
REPLACE WITH DAGGER.ANDROID ActivityComponent.kt @Subcomponent(modules = arrayOf( ... )) interface
ActivityComponent { fun inject(activity: MainActivity) }
REPLACE WITH DAGGER.ANDROID ActivityComponent.kt @Subcomponent(modules = arrayOf( ... )) interface
ActivityComponent : AndroidInjector<MainActivity> { @Subcomponent.Builder abstract class Builder : AndroidInjector.Builder<MainActivity>() }
REPLACE WITH DAGGER.ANDROID ActivityModule.kt @Module(subcomponents = ActivityComponent::class) internal abstract class
ActivityModule { @Binds @IntoMap @ActivityKey(MainActivity::class) internal abstract fun bindMainInjector( builder: ActivityComponent.Builder ): AndroidInjector.Factory<out Activity> } SubcomponentΛModuleͰbind͢Δ
REPLACE WITH DAGGER.ANDROID AppComponent.kt @Singleton @Component(modules = arrayOf( AndroidInjectionModule::class, AppModule::class
)) interface AppComponent : AndroidInjector<App> { @Component.Builder interface Builder { fun application(application: App): Builder fun build(): AppComponent } override fun inject(app: App) }
REPLACE WITH DAGGER.ANDROID AppComponent.kt @Singleton @Component(modules = arrayOf( AndroidInjectionModule::class, ActivityModule::class,
AppModule::class )) interface AppComponent : AndroidInjector<App> { @Component.Builder interface Builder { fun application(application: App): Builder fun build(): AppComponent } override fun inject(app: App) }
REPLACE WITH DAGGER.ANDROID class App : Application() { val appComponent
: AppComponent by lazy { DaggerAppComponent.builder() .appModule(AppModule(this)) .build() } override fun onCreate() { super.onCreate() ... } ... } App.kt
REPLACE WITH DAGGER.ANDROID App.kt class App : DaggerApplication() { override
fun applicationInjector() = DaggerAppComponent.builder() .application(this) .build() override fun onCreate() { super.onCreate() ... } ... }
REPLACE WITH DAGGER.ANDROID MainActivity.kt class MainActivity : AppCompatActivity() { @Inject
lateinit var instance: Hoge override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) application.appComponent.activityComponent.inject(this) ... } ... }
REPLACE WITH DAGGER.ANDROID MainActivity.kt class MainActivity : AppCompatActivity() { @Inject
lateinit var instance: Hoge override fun onCreate(savedInstanceState: Bundle?) { AndroidInjection.inject(this) super.onCreate(savedInstanceState) ... } ... }
MORE SIMPLE ͬͱγϯϓϧʹॻ͚·͢
MORE SIMPLE @ContributesAndroidInjector Dagger v2.11 ~
MORE SIMPLE ActivityComponent.kt @Subcomponent(modules = ...) interface ActivityComponent : AndroidInjector<MainActivity>
{ @Subcomponent.Builder abstract class Builder : AndroidInjector.Builder<MainActivity>() }
MORE SIMPLE ActivityComponent.kt @Subcomponent(modules = ...) interface ActivityComponent : AndroidInjector<MainActivity>
{ @Subcomponent.Builder abstract class Builder : AndroidInjector.Builder<MainActivity>() } Component࡞Βͳͯ͘ྑ͍
MORE SIMPLE ActivityModule.kt @Module(subcomponents = ActivityComponent::class) internal abstract class ActivityModule
{ @Binds @IntoMap @ActivityKey(MainActivity::class) internal abstract fun bindMainInjector( builder: ActivityComponent.Builder ): AndroidInjector.Factory<out Activity> }
MORE SIMPLE ActivityModule.kt @Module(subcomponents = ActivityComponent::class) internal abstract class ActivityModule
{ @Binds @IntoMap @ActivityKey(MainActivity::class) internal abstract fun bindMainInjector( builder: ActivityComponent.Builder ): AndroidInjector.Factory<out Activity> } Subcomponentͷbindॻ͔ͳ͍͍ͯ͘
MORE SIMPLE ActivityBuilder.kt @Module internal abstract class ActivityBuilder { @ContributesAndroidInjector(modules
= arrayOf(...)) internal abstract fun contributeMainActivityInjector(): MainActivity } ͜Ε͚ͩͰSubcomponent͕Ͱ͖Δ
MORE SIMPLE @ContributesAndroidInjectorͰγϯϓϧʹ
FIN Thanks:)