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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
Beyond the Basics: Signal Forms
manfredsteyer
PRO
0
110
Go Conference mini in Sendai 2026 : Goに新機能を提案し実装されるまでのフロー徹底解説
yamatoya
0
480
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
130
CopilotKit + AG-UIを学ぶ
nearme_tech
PRO
1
110
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
5
910
Claude Code、ちょっとした工夫で開発体験が変わる
tigertora7571
0
190
Head of Engineeringが現場で回した生産性向上施策 2025→2026
gessy0129
0
200
RAGでハマりがちな"Excelの罠"を、データの構造化で突破する
harumiweb
8
2.1k
New in Go 1.26 Implementing go fix in product development
sunecosuri
0
100
モジュラモノリスにおける境界をGoのinternalパッケージで守る
magavel
0
3.3k
AHC061解説
shun_pi
0
270
AIに仕事を丸投げしたら、本当に楽になれるのか
dip_tech
PRO
0
170
Featured
See All Featured
The agentic SEO stack - context over prompts
schlessera
0
670
Leo the Paperboy
mayatellez
4
1.5k
Chasing Engaging Ingredients in Design
codingconduct
0
130
A designer walks into a library…
pauljervisheath
210
24k
How to make the Groovebox
asonas
2
2k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
83
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
400
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
190
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
The Pragmatic Product Professional
lauravandoore
37
7.2k
How to build a perfect <img>
jonoalderson
1
5.2k
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:)