Slide 1

Slide 1 text

%SPJE,BJHJΧϯϑΝϨϯεΞϓϦͷ ྺ࢙͔ΒΈΔ ΞϓϦΞʔΩςΫνϟͷ ͜Ε·Ͱͱ͜Ε͔Β ,B[VLJ$IJHJUB DIJHJDIBO "The Android robot is reproduced or modified from work created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License." DroidKaigi2021

Slide 2

Slide 2 text

Speaker ,B[VLJ$IJHJUB chigichan24 "OESPJEBQQMJDBUJPOEFWFMPQFS *OUFSFTUFE "QQMJDBUJPO"SDIJUFDUVSF 4ZTUFN%FTJHO %JTUSJCVUFE4ZTUFN 1BTU UBMLPO%SPJE,BJHJ ܧଓతʹػೳ։ൃΛਐΊͳ͕Βߦ͏ϚϧνϞδϡʔϧԽ %SPJE,BJHJ ”Twemoji” ©Twitter, Inc and other contributors (Licensed under CC-BY 4.0) https://twemoji.twitter.com/

Slide 3

Slide 3 text

Break the Ice 2%SPJE,BJHJΧϯϑΝϨϯεΞϓϦ͕͋Δͷ஌ͬͯ·͔ͨ͠ʁ ͦΜͳ΋ͷ͕͋ͬͨͷ͔ʂ ࠓ͸͡Ίͯ஌Γ·ͨ͠ ΋ͪΖΜ஌ͬͯΔΑ Πϯετʔϧͯ͠ΔΑ ίϯτϦϏϡʔτͯ͠ΔΑ ࢲ͕99ը໘ͷ࡞ऀͰ͢ ഑৴αΠτ΍5XJUUFSͰίϝϯτͯ͠Ͷʙ ”Twemoji” ©Twitter, Inc and other contributors (Licensed under CC-BY 4.0) https://twemoji.twitter.com/

Slide 4

Slide 4 text

࣌఺ͷεΫϦʔϯγϣοτɾಈըͰ͢

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

Androiod iOS ࣌఺ͷεΫϦʔϯγϣοτͰ͢

Slide 8

Slide 8 text

2021 2015

Slide 9

Slide 9 text

എܠͱൃදͰ ໨ࢦ͢ΰʔϧ ֤೥ͷ ηογϣϯ ৘ใऔಘը໘ ࣮૷ ೥ͷ %,BJHJΞϓϦ ͔Βඥղ͘ ະདྷͷ σϑΝΫτ Section 1 Section 2 Section 3 Agenda

Slide 10

Slide 10 text

എܠͱൃදͰ ໨ࢦ͢ΰʔϧ ֤೥ͷ ηογϣϯ ৘ใऔಘը໘ ࣮૷ ೥ͷ %,BJHJΞϓϦ ͔Βඥղ͘ ະདྷͷ σϑΝΫτ Section 1 Section 2 Section 3 Agenda

Slide 11

Slide 11 text

(Section1) Background and purpose of this presentation ͜ͷηΫγϣϯͷ໨త ϓϨθϯશମͷഎܠɾ໨తɾ ΰʔϧΛڞ༗͢Δɻ ͜Μͳʹ΋มԽ͍ͯ͠Δͷ͔ʂͷ ڻ͖Λڞ༗͢Δɻ

Slide 12

Slide 12 text

(Section1) Background & Goal 2021 2015

Slide 13

Slide 13 text

(Section1) Background & Goal 2016 2021 VS

Slide 14

Slide 14 text

2016 2021 In Google I/O 2017, the Android team announced first-class support for Kotlin. Main Language JAVA Kotlin Supported Platform Android Android iOS web Main Libraries Jetpack Compose rxjava1 Android-Orma Dagger2 Kotlin Coroutines & Flows Hilt

Slide 15

Slide 15 text

2016 2021 In Google I/O 2017, the Android team announced first-class support for Kotlin. Main Language JAVA Kotlin Supported Platform Android Android iOS web Main Libraries Jetpack Compose rxjava1 Android-Orma Dagger2 Kotlin Coroutines & Flows Hilt ΊͪΌͪ͘Ό มԽ͍ͯ͠Δ

Slide 16

Slide 16 text

(Section1) Background & Goal ΧϯϑΝϨϯεΞϓϦͷྺ࢙Λඥղ͍ͯ೔ʑͷ։ൃͷώϯτʹ͠Α͏ ະདྷͷ"OESPJEΞϓϦ։ൃͷσϑΝΫτΛײ͡Α͏

Slide 17

Slide 17 text

(Section1) Background & Goal ΧϯϑΝϨϯεΞϓϦͷྺ࢙Λඥղ͍ͯ೔ʑͷ։ൃͷώϯτʹ͠Α͏ ະདྷͷ"OESPJEΞϓϦ։ൃͷσϑΝΫτΛײ͡Α͏ ࣌୅͕มԽ͢Δத ࣮૷ͷτϨϯυ ϥΠϒϥϦ ΞʔΩςΫνϟ͸ Ͳ͏มΘͬͨͷ͔Λ஌Δ

Slide 18

Slide 18 text

(Section1) Background & Goal ΧϯϑΝϨϯεΞϓϦͷྺ࢙Λඥղ͍ͯ೔ʑͷ։ൃͷώϯτʹ͠Α͏ ະདྷͷ"OESPJEΞϓϦ։ൃͷσϑΝΫτΛײ͡Α͏ ࣌୅͕มԽ͢Δத ࣮૷ͷτϨϯυ ϥΠϒϥϦ ΞʔΩςΫνϟ͸ Ͳ͏มΘͬͨͷ͔Λ஌Δ ௕ظؒϝϯς͞Ε͍ͯΔ ػೳͷ࣮૷ஔ͖׵͑ ϦϑΝΫλϦϯά ͷ ಓඪΛ୳Δ

Slide 19

Slide 19 text

(Section1) Background & Goal ΧϯϑΝϨϯεΞϓϦͷྺ࢙Λඥղ͍ͯ೔ʑͷ։ൃͷώϯτʹ͠Α͏ ະདྷͷ"OESPJEΞϓϦ։ൃͷσϑΝΫτΛײ͡Α͏ ࣌୅͕มԽ͢Δத ࣮૷ͷτϨϯυ ϥΠϒϥϦ ΞʔΩςΫνϟ͸ Ͳ͏มΘͬͨͷ͔Λ஌Δ ௕ظؒϝϯς͞Ε͍ͯΔ ػೳͷ࣮૷ஔ͖׵͑ ϦϑΝΫλϦϯά ͷ ಓඪΛ୳Δ ະདྷͷ "OESPJEΞϓϦ։ൃʹ ඞཁʹͳΔ஌ࣝ ΞʔΩςΫνϟΛ ײ͡Δ

Slide 20

Slide 20 text

എܠͱൃදͰ ໨ࢦ͢ΰʔϧ ֤೥ͷ ηογϣϯ ৘ใऔಘը໘ ࣮૷ ೥ͷ %,BJHJΞϓϦ ͔Βඥղ͘ ະདྷͷ σϑΝΫτ Section 1 Section 2 Section 3 Agenda

Slide 21

Slide 21 text

എܠͱൃදͰ ໨ࢦ͢ΰʔϧ ֤೥ͷ ηογϣϯ ৘ใऔಘը໘ ࣮૷ ೥ͷ %,BJHJΞϓϦ ͔Βඥղ͘ ະདྷͷ σϑΝΫτ Section 1 Section 2 Section 3 Agenda

Slide 22

Slide 22 text

(Section2) Implementation difference of each years ͜ͷηΫγϣϯͷ໨త ֤೥ͷ࣮૷Λ؆୯ʹཧղ͠ɺ ࠩ෼Λ஌Δɻ ͜Μͳʹ΋มԽ͍ͯ͠Δͷ͔ʂͷ ڻ͖Λڞ༗͢Δɻ

Slide 23

Slide 23 text

(Section2) Implementation Diff ҎԼͷ؍఺͔Β֤೥ͷηογϣϯৄࡉϖʔδͷ࣮૷Λൺֱͯ͠ΈΑ͏ ओཁϥΠϒϥϦ ΞʔΩςΫνϟ ઃܭํ਑ͳͲ ࣌୅എܠ ֤छTUBUT

Slide 24

Slide 24 text

2015

Slide 25

Slide 25 text

TUBUT 1SJWBUF ਓ +BWB"OESPJEPOMZ ΞʔΩςΫνϟ .7$ͬΆ͍ ࣌୅എܠ %SPJE,BJHJ͕Ͱ͖ͨ೥ɻ "OESPJEYܥ͕͡Θ͡Θͱਁಁ "35͕σϑΥϧτͷϥϯλΠϜʹɻ ϚςϦΞϧσβΠϯͷొ৔ɻ ओͳϥΠϒϥϦ 4VQQPSUMJCSBSZ 'SBHNFOU "DUJWJUZ QSJWBUFͳͷͰϥΠϒϥϦৄࡉ͸Θ͔Γ·ͤΜ 2015 !NIJEBLB͞Μ͔Βͷ఻ঝʹΑͬͯ͜ͷ೥ͷࢿྉΛ࡞੒Ͱ͖·ͨ͠ɻେײँ🙇🙇

Slide 26

Slide 26 text

2015 ύοέʔδ͸ػೳɾը໘͝ͱͱ͍͏ΑΓ΋ɺ ໾ׂʹؔ͢ΔϨΠϠ͝ͱ "DUJWJUZ'SBHNFOU΋ඇৗʹ؆ܿ

Slide 27

Slide 27 text

2015 ύοέʔδ͸ػೳɾը໘͝ͱͱ͍͏ΑΓ΋ɺ ໾ׂʹؔ͢ΔϨΠϠ͝ͱ "DUJWJUZ'SBHNFOU΋ඇৗʹ؆ܿ γϯϓϧͳ6*ͱͦΕΛ࣮ݱ͢Δ γϯϓϧͳΞʔΩςΫνϟ

Slide 28

Slide 28 text

2016

Slide 29

Slide 29 text

2016 TUBUT 044 ਓ +BWB"OESPJEPOMZ ΞʔΩςΫνϟ .7$ ࣌୅എܠ (PPHMF*0Ͱ%BUB#JOEJOH͕ൃදɻ "OESPJEYܥͷ࣌୅ ύʔϛογϣϯपΓ͕Ξοϓσʔτ %P[FϞʔυͷొ৔ ओͳϥΠϒϥϦ 3Y+BWB %BHHFS "OESPJE0SNB 0L)UUQ 3FUSPGJU 4UFUIP %BUB#JOEJOH

Slide 30

Slide 30 text

2016 Activity Fragment xml DAO Model ActivityNavigator DataBinding Orma API Retrofit + OkHttp Observable(RxJava1) Call startActivityॲཧΛ୲͏ callback Call

Slide 31

Slide 31 text

2016 Activity Fragment xml DAO Model ActivityNavigator DataBinding Orma API Retrofit + OkHttp Observable(RxJava1) Call startActivityॲཧΛ୲͏ callback Call Model View Controller

Slide 32

Slide 32 text

2016 Activity Fragment xml DAO Model ActivityNavigator DataBinding Orma API Retrofit + OkHttp Observable(RxJava1) Call startActivityॲཧΛ୲͏ callback Call Model View Controller ංେԽ ෳࡶԽ

Slide 33

Slide 33 text

2016 Dagger2ʹΑΔInjectionͷ༷ࢠ

Slide 34

Slide 34 text

2016 Dagger2ʹΑΔInjectionͷ༷ࢠ ΞʔΩςΫνϟʹΑΔ໾ׂ෼ׂ $POUSPMMFSɾ.PEFMͷංେԽ

Slide 35

Slide 35 text

2017

Slide 36

Slide 36 text

2017 TUBUT 044 ਓ +BWB,PUMJO "OESPJEPOMZ ΞʔΩςΫνϟ .77. 3FQPTJUPSZQBUUFSO ࣌୅എܠ ,PUMJO͕GJSTUTVQQPSUMBOHVBHFͱൃදɻ "OESPJEYܥͷ࣌୅ NVMUJXJOEPXNPEFͷొ৔ ओͳϥΠϒϥϦ 3Y+BWB %BHHFS "OESPJE0SNB 0L)UUQ 3FUSPGJU 4UFUIP %BUB#JOEJOH 1FSNJTTJPO%JTQBUDIFS

Slide 37

Slide 37 text

2017 Model Single/Maybe/Completable (RxJava2) Activity Fragment xml DataBinding LocalDataSource Orma RemoteDataSource Retrofit + OkHttp Repository ViewModel call call call

Slide 38

Slide 38 text

2017 Model Single/Maybe/Completable (RxJava2) Activity Fragment xml DataBinding LocalDataSource Orma RemoteDataSource Retrofit + OkHttp Repository ViewModel call call call Model View ViewModel Repository

Slide 39

Slide 39 text

2017 Model Single/Maybe/Completable (RxJava2) Activity Fragment xml DataBinding LocalDataSource Orma RemoteDataSource Retrofit + OkHttp Repository ViewModel call call call Model View ViewModel Repository ੍ޚ೉

Slide 40

Slide 40 text

2017

Slide 41

Slide 41 text

2017 खಈͰ։์͠ͳ͍ͱԿ͕ى͖Δ͔Θ͔Βͳ͍ Jetpack (AAC) ViewModel ͕·ͩଘࡏ͠ͳ͍

Slide 42

Slide 42 text

"OESPJEΞϓϦઃܭύλʔϯೖ໳ ୈষʮ044ʹ͓͚Δઃܭऀͷ໾ׂʯ ʢখ੢༟հ!LPOJGBSʣ 2017 ͋ΘͤͯಡΈ͍ͨ

Slide 43

Slide 43 text

"OESPJEΞϓϦઃܭύλʔϯೖ໳ ୈষʮ044ʹ͓͚Δઃܭऀͷ໾ׂʯ ʢখ੢༟հ!LPOJGBSʣ 2017 ͋ΘͤͯಡΈ͍ͨ .77.ʹΑΔΞϓϩʔν ϥΠϑαΠΫϧϋϯυϧͷ೉͠͞

Slide 44

Slide 44 text

2018

Slide 45

Slide 45 text

2018 TUBUT 044 ਓ ,PUMJO"OESPJEPOMZ ΞʔΩςΫνϟ .77. 3FQPTJUPSZQBUUFSO ࣌୅എܠ "OESPJEYܥͷ࣌୅ QJDUVSFJOQJDUVSFͷαϙʔτ 'MVUUFS౳ʹΑΔϚϧνϓϥοτϑΥʔϜ ओͳϥΠϒϥϦ 3Y+BWB %BHHFS 3PPN 0L)UUQ 3FUSPGJU (SPVQJF %BUB#JOEJOH "OESPJE ,59

Slide 46

Slide 46 text

2018 Model Single/Maybe/Completable/Flowable (RxJava2) Activity Fragment xml DataBinding Database Room API Retrofit + OkHttp Repository ViewModel call call call LiveData

Slide 47

Slide 47 text

2018 Model Single/Maybe/Completable/Flowable (RxJava2) Activity Fragment xml DataBinding Database Room API Retrofit + OkHttp Repository ViewModel call call call LiveData data View ViewModel Repository

Slide 48

Slide 48 text

2018 Model Single/Maybe/Completable/Flowable (RxJava2) Activity Fragment xml DataBinding Database Room API Retrofit + OkHttp Repository ViewModel call call call LiveData data View ViewModel Repository ,PUMJOʹΑΔදݱͷγϯϓϧԽ ""$ͷ୆಄ 7JFX.PEFMͷංେԽɾ 7JFXͷෳࡶԽ

Slide 49

Slide 49 text

2019

Slide 50

Slide 50 text

2019 TUBUT 044 ਓ ,PUMJOɾ4XJGU"OESPJEɾJ04 ΞʔΩςΫνϟ 'MVY3FQPTJUPSZ.VMUJ.PEVMF ࣌୅എܠ ,PUMJO$PSPVUJOFT͕੮ר "OESPJEYܥͷ࣌୅ ϊονελΠϧͷσΟεϓϨΠ ओͳϥΠϒϥϦ %BHHFS ,PUMJO$PSPVUJOFT ,UPS 0L)UUQ 4UFUIP (SPVQJF %BUB#JOEJOH 1JDBTP

Slide 51

Slide 51 text

2019 Dispatcher Database Room API Ktor-client ActionCreator xml Store Fragment Repository suspend call DataBinding BroadcastChannel suspend call suspend call suspend call LiveData call

Slide 52

Slide 52 text

Dispatcher Database Room API Ktor-client ActionCreator xml Store Fragment Repository suspend call DataBinding BroadcastChannel suspend call suspend call suspend call LiveData Flux call data Repository 2019

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

'MVYʹΑΔ7JFX؅ཧͷ৽͍͠ Ξϓϩʔν ϞδϡʔϧԽʹΑΔ໾ׂɾ ґଘؔ܎ͷ໌֬Խ

Slide 55

Slide 55 text

2020

Slide 56

Slide 56 text

2020 TUBUT 044 ਓ ,PUMJOɾ4XJGU"OESPJEɾJ04 ΞʔΩςΫνϟ .77.3FQPTJUPSZ.VMUJ.PEVMF ࣌୅എܠ +FUQBDL$PNQPTFBMQIBͰ੝Γ্͕Δɻ "OESPJEY Yܥͷ࣌୅ δΣενϟφϏήʔγϣϯͷରԠ ओͳϥΠϒϥϦ %BHHFS ,PUMJO$PSPVUJOFT'MPXT ,UPS 0L)UUQ 4UFUIP (SPVQJF %BUB#JOEJOH $PJM

Slide 57

Slide 57 text

2020 Model Coroutines Flow Activity Fragment xml DataBinding Database Room API Ktor-Client Repository ViewModel call Suspend call Suspend call LiveData

Slide 58

Slide 58 text

2020 Model Coroutines Flow Activity Fragment xml DataBinding Database Room API Ktor-Client Repository ViewModel call Suspend call Suspend call LiveData data View ViewModel Repository

Slide 59

Slide 59 text

No content

Slide 60

Slide 60 text

"OESPJE%FWFMPQFSTʹهࡌ͞ΕΔ ਪ঑ΞʔΩςΫνϟ΁ͷ௥ै 6J.PEFMΛ༻͍ͨ7JFX΁ͷ ঢ়ଶߋ৽ͷ໌֬Խ

Slide 61

Slide 61 text

എܠͱൃදͰ ໨ࢦ͢ΰʔϧ ֤೥ͷ ηογϣϯ ৘ใऔಘը໘ ࣮૷ ೥ͷ %,BJHJΞϓϦ ͔Βඥղ͘ ະདྷͷ σϑΝΫτ Section 1 Section 2 Section 3 Agenda

Slide 62

Slide 62 text

എܠͱൃදͰ ໨ࢦ͢ΰʔϧ ֤೥ͷ ηογϣϯ ৘ใऔಘը໘ ࣮૷ ೥ͷ %,BJHJΞϓϦ ͔Βඥղ͘ ະདྷͷ σϑΝΫτ Section 1 Section 2 Section 3 Agenda

Slide 63

Slide 63 text

(Section3) Learn future de facto for Android app development from conference app 2021. ͜ͷηΫγϣϯͷ໨త ະདྷͷΞʔΩςΫνϟσϑΝΫτΛ DPOGFSFODFBQQ͔Βײ͡Δ +FUQBDL$PNQPTFͱͷ޲͖߹͍ํɾ ϚϧνϓϥοτϑΥʔϜͰͷ ڞ௨Խʹ͍ͭͯߟ͑Δ

Slide 64

Slide 64 text

2021

Slide 65

Slide 65 text

2021 TUBUT 044 ਓ ,PUMJOɾ4XJGU"OESPJEɾJ04 ΞʔΩςΫνϟ .77..7*.VMUJNPEVMF ࣌୅എܠ ,..ʹΑΔϚϧνϓϥοτϑΥʔϜ "OESPJEͷ࣌୅ .BUFSJBM:PV ओͳϥΠϒϥϦ )JMU ,PUMJO$PSPVUJOFT'MPXT ,UPS %BUB4UPSF +FUQBDL$PNQPTF

Slide 66

Slide 66 text

2021 $PNQPTFͷར༻ʹΑΔ 6*هड़ෳࡶԽ΁ͷ௅ઓ ,..ʹΑΔ"OESPJEɾJ04 ϩδοΫڞ௨Խ

Slide 67

Slide 67 text

2021 Model Coroutines Flow Activity Fragment Jetpack Compose Database DataStore API Ktor-Client Repository ViewModel call Suspend call Suspend call flow

Slide 68

Slide 68 text

2021 Model Coroutines Flow Activity Fragment Jetpack Compose Database API Ktor-Client Repository ViewModel call Suspend call Suspend call flow View DataStore

Slide 69

Slide 69 text

2021 ViewModel Screen(Statefull) Screen(Steteless) Screen Data Data Event Event Event State Effect

Slide 70

Slide 70 text

2021 Model Coroutines Flow Activity Fragment Jetpack Compose Database DataStore API Ktor-Client Repository ViewModel call Suspend call Suspend call flow

Slide 71

Slide 71 text

2021 Model Coroutines Flow Activity Fragment Jetpack Compose Database API Ktor-Client Repository ViewModel call Suspend call Suspend call flow Data (Android/iOS) DataStore

Slide 72

Slide 72 text

2021 Data Compose Android iOS ViewModel Wrapper SwiftUI call flow call flow ͲͪΒͷϓϥοτϑΥʔϜͰ΋ಈ͘Α͏ͳٕज़બఆ

Slide 73

Slide 73 text

Conclusion

Slide 74

Slide 74 text

Conclusion 2021 2015 Dagger2 Hilt xml Compose rxjava1 rxjava2 coroutines orma room DataStore Picasso Glide Coil

Slide 75

Slide 75 text

ΧϯϑΝϨϯεΞϓϦͷྺ࢙Λඥղ͍ͯ೔ʑͷ։ൃͷώϯτʹ͠Α͏ 7JFXͷෳࡶੑʹཱͪ޲͔͏ͨΊʹ༷ʑͳΞϓϩʔν͕औΒΕ͖ͯͨ ϨΠϠؒΛͭͳ͙ TUSFBNͷϥΠϒϥϦ͸සൟʹมԽ͖ͯͨ͠ Conclusion Կ͕Կʹஔ͖׵Θͬͨͷ͔Λ৻ॏʹோΊΔ͜ͱ͕େ੾

Slide 76

Slide 76 text

ΧϯϑΝϨϯεΞϓϦͷྺ࢙Λඥղ͍ͯ೔ʑͷ։ൃͷώϯτʹ͠Α͏ ະདྷͷ"OESPJEΞϓϦ։ൃͷσϑΝΫτΛײ͡Α͏ 7JFXͷෳࡶੑʹཱͪ޲͔͏ͨΊʹ༷ʑͳΞϓϩʔν͕औΒΕ͖ͯͨ ϨΠϠؒΛͭͳ͙ TUSFBNͷϥΠϒϥϦ͸සൟʹมԽ͖ͯͨ͠ $PNQPTFʹΑΔ 6*࡞੒ ,..ʹΑΔϩδοΫڞ௨Խ Conclusion Կ͕Կʹஔ͖׵Θͬͨͷ͔Λ৻ॏʹோΊΔ͜ͱ͕େ੾ ՝୊΋·ͩ͋Δ

Slide 77

Slide 77 text

Thank you ࣭໰͸ΦϑΟεΞϫʔʹ͓ͯئ͍͠·͢ʂ

Slide 78

Slide 78 text

Bibliography

Slide 79

Slide 79 text

[1] DroidKaigi, “DroidKaigi公式フィードアプリ” https://play.google.com/store/apps/details?id=io.github.droidkaigi.feeder [2] konifar, “DroidKaigi2016 Repository” https://github.com/konifar/droidkaigi2016 [3] DroidKaigi, “DroidKaigi2017 Repository” https://github.com/DroidKaigi/conference-app-2017 [4] DroidKaigi, “DroidKaigi2018 Repository” https://github.com/DroidKaigi/conference-app-2018 [5] DroidKaigi, “DroidKaigi2019 Repository” https://github.com/DroidKaigi/conference-app-2019 [6] DroidKaigi, “DroidKaigi2020 Repository” https://github.com/DroidKaigi/conference-app-2020 [7] DroidKaigi, “DroidKaigi2021 Repository” https://github.com/DroidKaigi/conference-app-2021 [8] ⽇⾼正博,⼩⻄裕介,藤原聖,吉岡毅,今井智章, “Androidアプリ設計パターン⼊⾨” https://peaks.cc/books/architecture_patterns [9] Johannes, “The good and bad of modern app architecture” https://droidkaigi.jp/2019/timetable/70668 [10] mhidaka, “mhidakaさんのtweets” https://twitter.com/mhidaka/status/1441264050332061699 [11] konifar, “DroidKaigi2018-flutter Repository” https://github.com/konifar/droidkaigi2018-flutter [12] chigichan24, “DroidKaigi2019のコードを読み解く” https://speakerdeck.com/chigichan24/read-droidkaigi2019-app-source-code [13] Aakira, “flux with kotlin” https://speakerdeck.com/aakira/flux-with-kotlin-abema-dev-con-2016 [14] 釘宮慎之介,横幕圭真, “チームで育てるAndroidアプリ設計” https://peaks.cc/books/architecture_with_team [15] KenzoNirasawa, “iOSエンジニアがKMPで⼤規模アプリのロジック共通化をしてうまくできている話” https://speakerdeck.com/nirazo/iosdc2021 [16] Wikipedia, “Android version history” https://en.wikipedia.org/wiki/Android_version_history [17] chigichan24, “継続的に機能開発を進めながら⾏うマルチモジュール化” https://speakerdeck.com/chigichan24/ji-sok-de-niji-neng-kai-fa-wojin-menagaraxing-umarutimoziyuruhua [18] Google Developers, “アプリアーキテクチャガイド” https://developer.android.com/jetpack/guide [19] Google Developers, “開発者基調講演 (Google I/O ’17)” https://www.youtube.com/watch?v=EtQ8Le8-zyo