CINXE.COM
<!doctype html><html lang="en"><head><title data-rh="true">5 years of Kotlin on Android — the extended interviews | by Android Developers | Android Developers | Aug, 2022 | Medium | Android Developers</title><meta data-rh="true" charset="utf-8"/><meta data-rh="true" name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,maximum-scale=1"/><meta data-rh="true" name="theme-color" content="#000000"/><meta data-rh="true" name="twitter:app:name:iphone" content="Medium"/><meta data-rh="true" name="twitter:app:id:iphone" content="828256236"/><meta data-rh="true" property="al:ios:app_name" content="Medium"/><meta data-rh="true" property="al:ios:app_store_id" content="828256236"/><meta data-rh="true" property="al:android:package" content="com.medium.reader"/><meta data-rh="true" property="fb:app_id" content="542599432471018"/><meta data-rh="true" property="og:site_name" content="Medium"/><meta data-rh="true" property="og:type" content="article"/><meta data-rh="true" property="article:published_time" content="2022-08-17T19:00:59.536Z"/><meta data-rh="true" name="title" content="5 years of Kotlin on Android — the extended interviews | by Android Developers | Android Developers | Aug, 2022 | Medium | Android Developers"/><meta data-rh="true" property="og:title" content="5 years of Kotlin on Android — the extended interviews"/><meta data-rh="true" property="al:android:url" content="medium://p/a7dcd17480a9"/><meta data-rh="true" property="al:ios:url" content="medium://p/a7dcd17480a9"/><meta data-rh="true" property="al:android:app_name" content="Medium"/><meta data-rh="true" name="description" content="We’ve published a celebration post on our blog to recognize the 5 year anniversary of official support for Kotlin on Android. In the making of that post, I had the chance to interview some great…"/><meta data-rh="true" property="og:description" content="We’ve published a celebration post on our blog to recognize the 5 year anniversary of official support for Kotlin on Android."/><meta data-rh="true" property="og:url" content="https://medium.com/androiddevelopers/5-years-of-kotlin-on-android-the-extra-bits-a7dcd17480a9"/><meta data-rh="true" property="al:web:url" content="https://medium.com/androiddevelopers/5-years-of-kotlin-on-android-the-extra-bits-a7dcd17480a9"/><meta data-rh="true" property="og:image" content="https://miro.medium.com/v2/resize:fit:1200/1*CDq4uk7-5PeQkTQpgug8Rw.png"/><meta data-rh="true" property="article:author" content="https://medium.com/@AndroidDev"/><meta data-rh="true" name="author" content="Android Developers"/><meta data-rh="true" name="robots" content="index,noarchive,follow,max-image-preview:large"/><meta data-rh="true" name="referrer" content="unsafe-url"/><meta data-rh="true" property="twitter:title" content="5 years of Kotlin on Android — the extended interviews"/><meta data-rh="true" name="twitter:site" content="@androiddev"/><meta data-rh="true" name="twitter:app:url:iphone" content="medium://p/a7dcd17480a9"/><meta data-rh="true" property="twitter:description" content="We’ve published a celebration post on our blog to recognize the 5 year anniversary of official support for Kotlin on Android."/><meta data-rh="true" name="twitter:image:src" content="https://miro.medium.com/v2/resize:fit:1200/1*CDq4uk7-5PeQkTQpgug8Rw.png"/><meta data-rh="true" name="twitter:card" content="summary_large_image"/><meta data-rh="true" name="twitter:creator" content="@AndroidDev"/><meta data-rh="true" name="twitter:label1" content="Reading time"/><meta data-rh="true" name="twitter:data1" content="9 min read"/><link data-rh="true" rel="icon" href="https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19"/><link data-rh="true" rel="search" type="application/opensearchdescription+xml" title="Medium" href="/osd.xml"/><link data-rh="true" rel="apple-touch-icon" sizes="152x152" href="https://miro.medium.com/v2/resize:fill:304:304/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="apple-touch-icon" sizes="120x120" href="https://miro.medium.com/v2/resize:fill:240:240/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="apple-touch-icon" sizes="76x76" href="https://miro.medium.com/v2/resize:fill:152:152/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="apple-touch-icon" sizes="60x60" href="https://miro.medium.com/v2/resize:fill:120:120/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="mask-icon" href="https://miro.medium.com/v2/resize:fill:1000:1000/7*GAOKVe--MXbEJmV9230oOQ.png" color="#171717"/><link data-rh="true" rel="preconnect" href="https://glyph.medium.com" crossOrigin=""/><link data-rh="true" id="glyph_preload_link" rel="preload" as="style" type="text/css" href="https://glyph.medium.com/css/unbound.css"/><link data-rh="true" id="glyph_link" rel="stylesheet" type="text/css" href="https://glyph.medium.com/css/unbound.css"/><link data-rh="true" rel="author" href="https://medium.com/@AndroidDev"/><link data-rh="true" rel="canonical" href="https://medium.com/androiddevelopers/5-years-of-kotlin-on-android-the-extra-bits-a7dcd17480a9"/><link data-rh="true" rel="alternate" href="android-app://com.medium.reader/https/medium.com/p/a7dcd17480a9"/><script data-rh="true" type="application/ld+json">{"@context":"http:\u002F\u002Fschema.org","@type":"NewsArticle","image":["https:\u002F\u002Fmiro.medium.com\u002Fv2\u002Fresize:fit:1200\u002F1*CDq4uk7-5PeQkTQpgug8Rw.png"],"url":"https:\u002F\u002Fmedium.com\u002Fandroiddevelopers\u002F5-years-of-kotlin-on-android-the-extra-bits-a7dcd17480a9","dateCreated":"2022-08-17T17:02:16.692Z","datePublished":"2022-08-17T17:02:16.692Z","dateModified":"2022-08-17T19:01:03.751Z","headline":"5 years of Kotlin on Android — the extended interviews | by Android Developers | Android Developers | Aug, 2022 | Medium | Android Developers","name":"5 years of Kotlin on Android — the extended interviews | by Android Developers | Android Developers | Aug, 2022 | Medium | Android Developers","description":"We’ve published a celebration post on our blog to recognize the 5 year anniversary of official support for Kotlin on Android. In the making of that post, I had the chance to interview some great…","identifier":"a7dcd17480a9","author":{"@type":"Person","name":"Android Developers","url":"https:\u002F\u002Fmedium.com\u002F@AndroidDev"},"creator":["Android Developers"],"publisher":{"@type":"Organization","name":"Android Developers","url":"https:\u002F\u002Fmedium.com\u002Fandroiddevelopers","logo":{"@type":"ImageObject","width":500,"height":60,"url":"https:\u002F\u002Fmiro.medium.com\u002Fv2\u002Fresize:fit:1000\u002F1*5pMw_nx55x_66tk77kutPQ.png"}},"mainEntityOfPage":"https:\u002F\u002Fmedium.com\u002Fandroiddevelopers\u002F5-years-of-kotlin-on-android-the-extra-bits-a7dcd17480a9"}</script><style type="text/css" data-fela-rehydration="572" data-fela-type="STATIC">html{box-sizing:border-box;-webkit-text-size-adjust:100%}*, *:before, *:after{box-sizing:inherit}body{margin:0;padding:0;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;color:rgba(0,0,0,0.8);position:relative;min-height:100vh}h1, h2, h3, h4, h5, h6, dl, dd, ol, ul, menu, figure, blockquote, p, pre, form{margin:0}menu, ol, ul{padding:0;list-style:none;list-style-image:none}main{display:block}a{color:inherit;text-decoration:none}a, button, input{-webkit-tap-highlight-color:transparent}img, svg{vertical-align:middle}button{background:transparent;overflow:visible}button, input, optgroup, select, textarea{margin:0}:root{--reach-tabs:1;--reach-menu-button:1}#speechify-root{font-family:Sohne, sans-serif}div[data-popper-reference-hidden="true"]{visibility:hidden;pointer-events:none}.grecaptcha-badge{visibility:hidden} /*XCode style (c) Angel Garcia <angelgarcia.mail@gmail.com>*/.hljs {background: #fff;color: black; }/* Gray DOCTYPE selectors like WebKit */ .xml .hljs-meta {color: #c0c0c0; }.hljs-comment, .hljs-quote {color: #007400; }.hljs-tag, .hljs-attribute, .hljs-keyword, .hljs-selector-tag, .hljs-literal, .hljs-name {color: #aa0d91; }.hljs-variable, .hljs-template-variable {color: #3F6E74; }.hljs-code, .hljs-string, .hljs-meta .hljs-string {color: #c41a16; }.hljs-regexp, .hljs-link {color: #0E0EFF; }.hljs-title, .hljs-symbol, .hljs-bullet, .hljs-number {color: #1c00cf; }.hljs-section, .hljs-meta {color: #643820; }.hljs-title.class_, .hljs-class .hljs-title, .hljs-type, .hljs-built_in, .hljs-params {color: #5c2699; }.hljs-attr {color: #836C28; }.hljs-subst {color: #000; }.hljs-formula {background-color: #eee;font-style: italic; }.hljs-addition {background-color: #baeeba; }.hljs-deletion {background-color: #ffc8bd; }.hljs-selector-id, .hljs-selector-class {color: #9b703f; }.hljs-doctag, .hljs-strong {font-weight: bold; }.hljs-emphasis {font-style: italic; } </style><style type="text/css" data-fela-rehydration="572" data-fela-type="KEYFRAME">@-webkit-keyframes k1{0%{opacity:0.8}50%{opacity:0.5}100%{opacity:0.8}}@-moz-keyframes k1{0%{opacity:0.8}50%{opacity:0.5}100%{opacity:0.8}}@keyframes k1{0%{opacity:0.8}50%{opacity:0.5}100%{opacity:0.8}}</style><style type="text/css" data-fela-rehydration="572" data-fela-type="RULE">.a{font-family:medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif}.b{font-weight:400}.c{background-color:rgba(255, 255, 255, 1)}.l{display:block}.m{position:sticky}.n{top:0}.o{z-index:500}.p{padding:0 24px}.q{align-items:center}.r{border-bottom:solid 1px #F2F2F2}.y{height:41px}.z{line-height:20px}.ab{display:flex}.ac{height:57px}.ae{flex:1 0 auto}.af{color:inherit}.ag{fill:inherit}.ah{font-size:inherit}.ai{border:inherit}.aj{font-family:inherit}.ak{letter-spacing:inherit}.al{font-weight:inherit}.am{padding:0}.an{margin:0}.ao{cursor:pointer}.ap:disabled{cursor:not-allowed}.aq:disabled{color:#6B6B6B}.ar:disabled{fill:#6B6B6B}.au{width:auto}.av path{fill:#242424}.aw{height:25px}.ax{margin-left:16px}.ay{border:none}.az{border-radius:20px}.ba{width:240px}.bb{background:#F9F9F9}.bc path{fill:#6B6B6B}.be{outline:none}.bf{font-family:sohne, "Helvetica Neue", Helvetica, Arial, sans-serif}.bg{font-size:14px}.bh{width:100%}.bi{padding:10px 20px 10px 0}.bj{background-color:transparent}.bk{color:#242424}.bl::placeholder{color:#6B6B6B}.bm{display:inline-block}.bn{margin-left:12px}.bo{margin-right:12px}.bp{border-radius:4px}.bq{margin-left:24px}.br{height:24px}.bx{background-color:#F9F9F9}.by{border-radius:50%}.bz{height:32px}.ca{width:32px}.cb{justify-content:center}.ch{max-width:680px}.ci{min-width:0}.cj{animation:k1 1.2s ease-in-out infinite}.ck{height:100vh}.cl{margin-bottom:16px}.cm{margin-top:48px}.cn{align-items:flex-start}.co{flex-direction:column}.cp{justify-content:space-between}.cq{margin-bottom:24px}.cw{width:80%}.cx{background-color:#F2F2F2}.dd{height:44px}.de{width:44px}.df{margin:auto 0}.dg{margin-bottom:4px}.dh{height:16px}.di{width:120px}.dj{width:80px}.dp{margin-bottom:8px}.dq{width:96%}.dr{width:98%}.ds{width:81%}.dt{margin-left:8px}.du{color:#6B6B6B}.dv{font-size:13px}.dw{height:100%}.ep{color:#FFFFFF}.eq{fill:#FFFFFF}.er{background:rgba(132, 132, 136, 1)}.es{border-color:rgba(132, 132, 136, 1)}.ew:disabled{cursor:inherit !important}.ex:disabled{opacity:0.3}.ey:disabled:hover{background:rgba(132, 132, 136, 1)}.ez:disabled:hover{border-color:rgba(132, 132, 136, 1)}.fa{border-radius:99em}.fb{border-width:1px}.fc{border-style:solid}.fd{box-sizing:border-box}.fe{text-decoration:none}.ff{text-align:center}.fi{margin-right:32px}.fj{position:relative}.fk{fill:#6B6B6B}.fn{background:transparent}.fo svg{margin-left:4px}.fp svg{fill:#6B6B6B}.fr{box-shadow:inset 0 0 0 1px rgba(0, 0, 0, 0.05)}.fs{position:absolute}.fz{margin:0 24px}.gd{background:rgba(255, 255, 255, 1)}.ge{border:1px solid #F2F2F2}.gf{box-shadow:0 1px 4px #F2F2F2}.gg{max-height:100vh}.gh{overflow-y:auto}.gi{left:0}.gj{top:calc(100vh + 100px)}.gk{bottom:calc(100vh + 100px)}.gl{width:10px}.gm{pointer-events:none}.gn{word-break:break-word}.go{word-wrap:break-word}.gp:after{display:block}.gq:after{content:""}.gr:after{clear:both}.gs{margin-left:auto}.gt{margin-right:auto}.gu{max-width:1999px}.ha{clear:both}.hc{cursor:zoom-in}.hd{z-index:auto}.hf{max-width:100%}.hg{height:auto}.hh{line-height:1.23}.hi{letter-spacing:0}.hj{font-style:normal}.hk{font-weight:700}.ik{font-style:inherit}.iq{align-items:baseline}.ir{width:48px}.is{height:48px}.it{border:2px solid rgba(255, 255, 255, 1)}.iu{z-index:0}.iv{box-shadow:none}.iw{border:1px solid rgba(0, 0, 0, 0.05)}.ix{margin-left:-12px}.iy{width:28px}.iz{height:28px}.ja{z-index:1}.jb{width:24px}.jc{margin-bottom:2px}.jd{flex-wrap:nowrap}.je{font-size:16px}.jf{line-height:24px}.jh{margin:0 8px}.ji{display:inline}.jj{color:rgba(132, 132, 136, 1)}.jk{fill:rgba(132, 132, 136, 1)}.jn{flex:0 0 auto}.jq{flex-wrap:wrap}.jt{white-space:pre-wrap}.ju{margin-right:4px}.jv{overflow:hidden}.jw{max-height:20px}.jx{text-overflow:ellipsis}.jy{display:-webkit-box}.jz{-webkit-line-clamp:1}.ka{-webkit-box-orient:vertical}.kb{word-break:break-all}.kd{padding-left:8px}.ke{padding-right:8px}.lf> *{flex-shrink:0}.lg{overflow-x:scroll}.lh::-webkit-scrollbar{display:none}.li{scrollbar-width:none}.lj{-ms-overflow-style:none}.lk{width:74px}.ll{flex-direction:row}.lm{z-index:2}.lp{-webkit-user-select:none}.lq{border:0}.lr{fill:rgba(117, 117, 117, 1)}.lu{outline:0}.lv{user-select:none}.lw> svg{pointer-events:none}.mf{cursor:progress}.mg{margin-left:4px}.mh{margin-top:0px}.mi{opacity:1}.mj{padding:4px 0}.mm{width:16px}.mo{display:inline-flex}.mu{padding:8px 2px}.mv svg{color:#6B6B6B}.nm{line-height:1.58}.nn{letter-spacing:-0.004em}.no{font-family:source-serif-pro, Georgia, Cambria, "Times New Roman", Times, serif}.oj{margin-bottom:-0.46em}.ok{text-decoration:underline}.ol{line-height:1.18}.om{letter-spacing:-0.022em}.on{font-weight:600}.pd{margin-bottom:-0.31em}.pj{box-shadow:inset 3px 0 0 0 #242424}.pk{padding-left:23px}.pl{margin-left:-20px}.pm{font-style:italic}.pn{padding-left:30px}.po{line-height:40px}.pp{letter-spacing:-0.009em}.pq{font-weight:300}.pr{font-size:28px}.qh{margin-top:32px}.qi{margin-bottom:14px}.qj{padding-top:24px}.qk{padding-bottom:10px}.ql{background-color:#000000}.qm{height:3px}.qn{width:3px}.qo{margin-right:20px}.qp{margin-bottom:26px}.qq{margin-top:6px}.qr{margin-top:8px}.qs{margin-right:8px}.qt{padding:8px 16px}.qu{border-radius:100px}.qv{transition:background 300ms ease}.qx{white-space:nowrap}.qy{border-top:none}.qz{height:52px}.ra{max-height:52px}.rb{box-sizing:content-box}.rc{position:static}.re{max-width:155px}.rp{height:0px}.rq{margin-bottom:40px}.rr{margin-bottom:48px}.sf{border-radius:2px}.sh{height:64px}.si{width:64px}.sj{align-self:flex-end}.sk{flex:1 1 auto}.sq{padding-right:4px}.sr{font-weight:500}.sy{margin-top:16px}.sz{color:rgba(255, 255, 255, 1)}.ta{fill:rgba(255, 255, 255, 1)}.tb{background:rgba(25, 25, 25, 1)}.tc{border-color:rgba(25, 25, 25, 1)}.tf:disabled{opacity:0.1}.tg:disabled:hover{background:rgba(25, 25, 25, 1)}.th:disabled:hover{border-color:rgba(25, 25, 25, 1)}.ud{gap:18px}.ue{fill:rgba(61, 61, 61, 1)}.ug{fill:#242424}.uh{background:0}.ui{border-color:#242424}.uj:disabled:hover{color:#242424}.uk:disabled:hover{fill:#242424}.ul:disabled:hover{border-color:#242424}.uw{border-bottom:solid 1px #E5E5E5}.ux{margin-top:72px}.uy{padding:24px 0}.uz{margin-bottom:0px}.va{margin-right:16px}.as:hover:not(:disabled){color:rgba(25, 25, 25, 1)}.at:hover:not(:disabled){fill:rgba(25, 25, 25, 1)}.et:hover{background:rgba(113, 114, 117, 1)}.eu:hover{border-color:rgba(113, 114, 117, 1)}.ev:hover{cursor:pointer}.fl:hover{color:#242424}.fm:hover{fill:#242424}.fq:hover svg{fill:#242424}.ft:hover{background-color:rgba(0, 0, 0, 0.1)}.jg:hover{text-decoration:underline}.jl:hover:not(:disabled){color:rgba(113, 114, 117, 1)}.jm:hover:not(:disabled){fill:rgba(113, 114, 117, 1)}.lt:hover{fill:rgba(8, 8, 8, 1)}.mk:hover{fill:#000000}.ml:hover p{color:#000000}.mn:hover{color:#000000}.mw:hover svg{color:#000000}.qw:hover{background-color:#F2F2F2}.sg:hover{background-color:none}.td:hover{background:#000000}.te:hover{border-color:#242424}.uf:hover{fill:rgba(25, 25, 25, 1)}.bd:focus-within path{fill:#242424}.he:focus{transform:scale(1.01)}.ls:focus{fill:rgba(8, 8, 8, 1)}.mx:focus svg{color:#000000}.lx:active{border-style:none}</style><style type="text/css" data-fela-rehydration="572" data-fela-type="RULE" media="all and (min-width: 1080px)">.d{display:none}.bw{width:64px}.cg{margin:0 64px}.cv{height:48px}.dc{margin-bottom:52px}.do{margin-bottom:48px}.ef{font-size:14px}.eg{line-height:20px}.em{font-size:13px}.eo{padding:5px 12px}.fh{display:flex}.fy{margin-bottom:68px}.gc{max-width:680px}.gz{margin-top:40px}.if{font-size:42px}.ig{margin-top:1em}.ih{margin-bottom:32px}.ii{line-height:52px}.ij{letter-spacing:-0.011em}.ip{align-items:center}.kr{border-top:solid 1px #F2F2F2}.ks{border-bottom:solid 1px #F2F2F2}.kt{margin:32px 0 0}.ku{padding:3px 8px}.ld> *{margin-right:24px}.le> :last-child{margin-right:0}.me{margin-top:0px}.mt{margin:0}.of{font-size:20px}.og{margin-top:2.14em}.oh{line-height:32px}.oi{letter-spacing:-0.003em}.pa{margin-top:1.72em}.pb{line-height:24px}.pc{letter-spacing:0}.pi{margin-top:0.94em}.pw{margin-top:2.75em}.qb{margin-top:2.11em}.qg{margin-top:2.64em}.rj{display:inline-block}.ro{margin-bottom:104px}.rs{flex-direction:row}.rv{margin-bottom:0}.rw{margin-right:20px}.sl{max-width:500px}.tm{margin-bottom:88px}.tp{margin-bottom:72px}.ua{font-size:24px}.ub{line-height:30px}.uc{letter-spacing:-0.016em}.uq{width:min-width}.uv{padding-top:72px}</style><style type="text/css" data-fela-rehydration="572" data-fela-type="RULE" media="all and (max-width: 1079.98px)">.e{display:none}.md{margin-top:0px}.ri{display:inline-block}</style><style type="text/css" data-fela-rehydration="572" data-fela-type="RULE" media="all and (max-width: 903.98px)">.f{display:none}.mc{margin-top:0px}.rh{display:inline-block}</style><style type="text/css" data-fela-rehydration="572" data-fela-type="RULE" media="all and (max-width: 727.98px)">.g{display:none}.ma{margin-top:0px}.mb{margin-right:0px}.rg{display:inline-block}</style><style type="text/css" data-fela-rehydration="572" data-fela-type="RULE" media="all and (max-width: 551.98px)">.h{display:none}.s{display:flex}.t{justify-content:space-between}.bs{width:24px}.cc{margin:0 24px}.cr{height:40px}.cy{margin-bottom:44px}.dk{margin-bottom:32px}.dx{font-size:13px}.dy{line-height:20px}.eh{padding:0px 8px 1px}.fu{margin-bottom:4px}.gv{margin-top:32px}.hl{font-size:32px}.hm{margin-top:1.01em}.hn{margin-bottom:24px}.ho{line-height:38px}.hp{letter-spacing:-0.014em}.il{align-items:flex-start}.jo{flex-direction:column}.jr{margin-bottom:2px}.kf{margin:24px -24px 0}.kg{padding:0}.kv> *{margin-right:8px}.kw> :last-child{margin-right:24px}.ln{margin-left:0px}.ly{margin-top:0px}.lz{margin-right:0px}.mp{margin:0}.my{border:1px solid #F2F2F2}.mz{border-radius:99em}.na{padding:0px 16px 0px 12px}.nb{height:38px}.nc{align-items:center}.ne svg{margin-right:8px}.np{font-size:18px}.nq{margin-top:1.56em}.nr{line-height:28px}.ns{letter-spacing:-0.003em}.oo{font-size:16px}.op{margin-top:1.23em}.oq{letter-spacing:0}.pe{margin-top:0.67em}.ps{margin-top:1.42em}.px{margin-top:1.57em}.qc{margin-top:2em}.rf{display:inline-block}.rk{margin-bottom:96px}.sd{margin-bottom:20px}.se{margin-right:0}.sp{max-width:100%}.ss{font-size:24px}.st{line-height:30px}.su{letter-spacing:-0.016em}.ti{margin-bottom:64px}.tq{font-size:20px}.tr{line-height:24px}.um{width:100%}.ur{padding-top:48px}.nd:hover{border-color:#E5E5E5}</style><style type="text/css" data-fela-rehydration="572" data-fela-type="RULE" media="all and (min-width: 904px) and (max-width: 1079.98px)">.i{display:none}.bv{width:64px}.cf{margin:0 64px}.cu{height:48px}.db{margin-bottom:52px}.dn{margin-bottom:48px}.ed{font-size:14px}.ee{line-height:20px}.ek{font-size:13px}.el{padding:5px 12px}.fg{display:flex}.fx{margin-bottom:68px}.gb{max-width:680px}.gy{margin-top:40px}.ia{font-size:42px}.ib{margin-top:1em}.ic{margin-bottom:32px}.id{line-height:52px}.ie{letter-spacing:-0.011em}.io{align-items:center}.kn{border-top:solid 1px #F2F2F2}.ko{border-bottom:solid 1px #F2F2F2}.kp{margin:32px 0 0}.kq{padding:3px 8px}.lb> *{margin-right:24px}.lc> :last-child{margin-right:0}.ms{margin:0}.ob{font-size:20px}.oc{margin-top:2.14em}.od{line-height:32px}.oe{letter-spacing:-0.003em}.ox{margin-top:1.72em}.oy{line-height:24px}.oz{letter-spacing:0}.ph{margin-top:0.94em}.pv{margin-top:2.75em}.qa{margin-top:2.11em}.qf{margin-top:2.64em}.rn{margin-bottom:104px}.rt{flex-direction:row}.rx{margin-bottom:0}.ry{margin-right:20px}.sm{max-width:500px}.tl{margin-bottom:88px}.to{margin-bottom:72px}.tx{font-size:24px}.ty{line-height:30px}.tz{letter-spacing:-0.016em}.up{width:min-width}.uu{padding-top:72px}</style><style type="text/css" data-fela-rehydration="572" data-fela-type="RULE" media="all and (min-width: 728px) and (max-width: 903.98px)">.j{display:none}.w{display:flex}.x{justify-content:space-between}.bu{width:64px}.ce{margin:0 48px}.ct{height:48px}.da{margin-bottom:52px}.dm{margin-bottom:48px}.eb{font-size:13px}.ec{line-height:20px}.ej{padding:0px 8px 1px}.fw{margin-bottom:68px}.ga{max-width:680px}.gx{margin-top:40px}.hv{font-size:42px}.hw{margin-top:1em}.hx{margin-bottom:32px}.hy{line-height:52px}.hz{letter-spacing:-0.011em}.in{align-items:center}.kj{border-top:solid 1px #F2F2F2}.kk{border-bottom:solid 1px #F2F2F2}.kl{margin:32px 0 0}.km{padding:3px 8px}.kz> *{margin-right:24px}.la> :last-child{margin-right:0}.mr{margin:0}.nx{font-size:20px}.ny{margin-top:2.14em}.nz{line-height:32px}.oa{letter-spacing:-0.003em}.ou{margin-top:1.72em}.ov{line-height:24px}.ow{letter-spacing:0}.pg{margin-top:0.94em}.pu{margin-top:2.75em}.pz{margin-top:2.11em}.qe{margin-top:2.64em}.rm{margin-bottom:104px}.ru{flex-direction:row}.rz{margin-bottom:0}.sa{margin-right:20px}.sn{max-width:500px}.tk{margin-bottom:88px}.tn{margin-bottom:72px}.tu{font-size:24px}.tv{line-height:30px}.tw{letter-spacing:-0.016em}.uo{width:min-width}.ut{padding-top:72px}</style><style type="text/css" data-fela-rehydration="572" data-fela-type="RULE" media="all and (min-width: 552px) and (max-width: 727.98px)">.k{display:none}.u{display:flex}.v{justify-content:space-between}.bt{width:24px}.cd{margin:0 24px}.cs{height:40px}.cz{margin-bottom:44px}.dl{margin-bottom:32px}.dz{font-size:13px}.ea{line-height:20px}.ei{padding:0px 8px 1px}.fv{margin-bottom:4px}.gw{margin-top:32px}.hq{font-size:32px}.hr{margin-top:1.01em}.hs{margin-bottom:24px}.ht{line-height:38px}.hu{letter-spacing:-0.014em}.im{align-items:flex-start}.jp{flex-direction:column}.js{margin-bottom:2px}.kh{margin:24px 0 0}.ki{padding:0}.kx> *{margin-right:8px}.ky> :last-child{margin-right:8px}.lo{margin-left:0px}.mq{margin:0}.nf{border:1px solid #F2F2F2}.ng{border-radius:99em}.nh{padding:0px 16px 0px 12px}.ni{height:38px}.nj{align-items:center}.nl svg{margin-right:8px}.nt{font-size:18px}.nu{margin-top:1.56em}.nv{line-height:28px}.nw{letter-spacing:-0.003em}.or{font-size:16px}.os{margin-top:1.23em}.ot{letter-spacing:0}.pf{margin-top:0.67em}.pt{margin-top:1.42em}.py{margin-top:1.57em}.qd{margin-top:2em}.rl{margin-bottom:96px}.sb{margin-bottom:20px}.sc{margin-right:0}.so{max-width:100%}.sv{font-size:24px}.sw{line-height:30px}.sx{letter-spacing:-0.016em}.tj{margin-bottom:64px}.ts{font-size:20px}.tt{line-height:24px}.un{width:100%}.us{padding-top:48px}.nk:hover{border-color:#E5E5E5}</style><style type="text/css" data-fela-rehydration="572" data-fela-type="RULE" media="print">.rd{display:none}</style><style type="text/css" data-fela-rehydration="572" data-fela-type="RULE" media="(prefers-reduced-motion: no-preference)">.hb{transition:transform 300ms cubic-bezier(0.2, 0, 0.2, 1)}</style><style type="text/css" data-fela-rehydration="572" data-fela-type="RULE" media="(orientation: landscape) and (max-width: 903.98px)">.kc{max-height:none}</style></head><body><div id="root"><div class="a b c"><div class="d e f g h i j k"></div><script>document.domain = document.domain;</script><div class="l c"><div class="l m n o c"><div class="p q r s t u v w x i d y z"><a class="du ag dv bf ak b am an ao ap aq ar as at s u w i d q dw z" href="https://rsci.app.link/?%24canonical_url=https%3A%2F%2Fmedium.com%2Fp%2Fa7dcd17480a9&%7Efeature=LoOpenInAppButton&%7Echannel=ShowPostUnderCollection&source=---top_nav_layout_nav----------------------------------" rel="noopener follow">Open in app<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" fill="none" viewBox="0 0 10 10" class="dt"><path fill="currentColor" d="M.985 8.485a.375.375 0 1 0 .53.53zM8.75 1.25h.375A.375.375 0 0 0 8.75.875zM8.375 6.5a.375.375 0 1 0 .75 0zM3.5.875a.375.375 0 1 0 0 .75zm-1.985 8.14 7.5-7.5-.53-.53-7.5 7.5zm6.86-7.765V6.5h.75V1.25zM3.5 1.625h5.25v-.75H3.5z"></path></svg></a><div class="ab q"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><button class="bf b dx dy eh dz ea ei eb ec ej ek ee el em eg eo ep eq er es et eu ev ew ex ey ez fa fb fc fd bm fe ff" data-testid="headerSignUpButton">Sign up</button></span></p><div class="ax l"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerSignInButton" rel="noopener follow" href="/m/signin?operation=login&redirect=https%3A%2F%2Fmedium.com%2Fandroiddevelopers%2F5-years-of-kotlin-on-android-the-extra-bits-a7dcd17480a9&source=post_page---top_nav_layout_nav-----------------------global_nav-----------">Sign in</a></span></p></div></div></div><div class="p q r ab ac"><div class="ab q ae"><a class="af ag ah ai aj ak al am an ao ap aq ar as at ab" aria-label="Homepage" data-testid="headerMediumLogo" rel="noopener follow" href="/?source=---top_nav_layout_nav----------------------------------"><svg xmlns="http://www.w3.org/2000/svg" width="719" height="160" fill="none" viewBox="0 0 719 160" class="au av aw"><path fill="#242424" d="m174.104 9.734.215-.047V8.02H130.39L89.6 103.89 48.81 8.021H1.472v1.666l.212.047c8.018 1.81 12.09 4.509 12.09 14.242V137.93c0 9.734-4.087 12.433-12.106 14.243l-.212.047v1.671h32.118v-1.665l-.213-.048c-8.018-1.809-12.089-4.509-12.089-14.242V30.586l52.399 123.305h2.972l53.925-126.743V140.75c-.687 7.688-4.721 10.062-11.982 11.701l-.215.05v1.652h55.948v-1.652l-.215-.05c-7.269-1.639-11.4-4.013-12.087-11.701l-.037-116.774h.037c0-9.733 4.071-12.432 12.087-14.242m25.555 75.488c.915-20.474 8.268-35.252 20.606-35.507 3.806.063 6.998 1.312 9.479 3.714 5.272 5.118 7.751 15.812 7.368 31.793zm-.553 5.77h65.573v-.275c-.186-15.656-4.721-27.834-13.466-36.196-7.559-7.227-18.751-11.203-30.507-11.203h-.263c-6.101 0-13.584 1.48-18.909 4.16-6.061 2.807-11.407 7.003-15.855 12.511-7.161 8.874-11.499 20.866-12.554 34.343q-.05.606-.092 1.212a50 50 0 0 0-.065 1.151 85.807 85.807 0 0 0-.094 5.689c.71 30.524 17.198 54.917 46.483 54.917 25.705 0 40.675-18.791 44.407-44.013l-1.886-.664c-6.557 13.556-18.334 21.771-31.738 20.769-18.297-1.369-32.314-19.922-31.042-42.395m139.722 41.359c-2.151 5.101-6.639 7.908-12.653 7.908s-11.513-4.129-15.418-11.63c-4.197-8.053-6.405-19.436-6.405-32.92 0-28.067 8.729-46.22 22.24-46.22 5.657 0 10.111 2.807 12.236 7.704zm43.499 20.008c-8.019-1.897-12.089-4.722-12.089-14.951V1.309l-48.716 14.353v1.757l.299-.024c6.72-.543 11.278.386 13.925 2.83 2.072 1.915 3.082 4.853 3.082 8.987v18.66c-4.803-3.067-10.516-4.56-17.448-4.56-14.059 0-26.909 5.92-36.176 16.672-9.66 11.205-14.767 26.518-14.767 44.278-.003 31.72 15.612 53.039 38.851 53.039 13.595 0 24.533-7.449 29.54-20.013v16.865h43.711v-1.746zM424.1 19.819c0-9.904-7.468-17.374-17.375-17.374-9.859 0-17.573 7.632-17.573 17.374s7.721 17.374 17.573 17.374c9.907 0 17.375-7.47 17.375-17.374m11.499 132.546c-8.019-1.897-12.089-4.722-12.089-14.951h-.035V43.635l-43.714 12.551v1.705l.263.024c9.458.842 12.047 4.1 12.047 15.152v81.086h43.751v-1.746zm112.013 0c-8.018-1.897-12.089-4.722-12.089-14.951V43.635l-41.621 12.137v1.71l.246.026c7.733.813 9.967 4.257 9.967 15.36v59.279c-2.578 5.102-7.415 8.131-13.274 8.336-9.503 0-14.736-6.419-14.736-18.073V43.638l-43.714 12.55v1.703l.262.024c9.459.84 12.05 4.097 12.05 15.152v50.17a56.3 56.3 0 0 0 .91 10.444l.787 3.423c3.701 13.262 13.398 20.197 28.59 20.197 12.868 0 24.147-7.966 29.115-20.43v17.311h43.714v-1.747zm169.818 1.788v-1.749l-.213-.05c-8.7-2.006-12.089-5.789-12.089-13.49v-63.79c0-19.89-11.171-31.761-29.883-31.761-13.64 0-25.141 7.882-29.569 20.16-3.517-13.01-13.639-20.16-28.606-20.16-13.146 0-23.449 6.938-27.869 18.657V43.643L545.487 55.68v1.715l.263.024c9.345.829 12.047 4.181 12.047 14.95v81.784h40.787v-1.746l-.215-.053c-6.941-1.631-9.181-4.606-9.181-12.239V66.998c1.836-4.289 5.537-9.37 12.853-9.37 9.086 0 13.692 6.296 13.692 18.697v77.828h40.797v-1.746l-.215-.053c-6.94-1.631-9.18-4.606-9.18-12.239V75.066a42 42 0 0 0-.578-7.26c1.947-4.661 5.86-10.177 13.475-10.177 9.214 0 13.691 6.114 13.691 18.696v77.828z"></path></svg></a><div class="ax h"><div class="ab ay az ba bb q bc bd"><div class="bm" aria-hidden="false" aria-describedby="searchResults" aria-labelledby="searchResults"></div><div class="bn bo ab"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M4.092 11.06a6.95 6.95 0 1 1 13.9 0 6.95 6.95 0 0 1-13.9 0m6.95-8.05a8.05 8.05 0 1 0 5.13 14.26l3.75 3.75a.56.56 0 1 0 .79-.79l-3.73-3.73A8.05 8.05 0 0 0 11.042 3z" clip-rule="evenodd"></path></svg></div><input role="combobox" aria-controls="searchResults" aria-expanded="false" aria-label="search" data-testid="headerSearchInput" tabindex="0" class="ay be bf bg z bh bi bj bk bl" placeholder="Search" value=""/></div></div></div><div class="h k w fg fh"><div class="fi ab"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerWriteButton" rel="noopener follow" href="/m/signin?operation=register&redirect=https%3A%2F%2Fmedium.com%2Fnew-story&source=---top_nav_layout_nav-----------------------new_post_topnav-----------"><div class="bf b bg z du fj fk ab q fl fm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24" aria-label="Write"><path fill="currentColor" d="M14 4a.5.5 0 0 0 0-1zm7 6a.5.5 0 0 0-1 0zm-7-7H4v1h10zM3 4v16h1V4zm1 17h16v-1H4zm17-1V10h-1v10zm-1 1a1 1 0 0 0 1-1h-1zM3 20a1 1 0 0 0 1 1v-1zM4 3a1 1 0 0 0-1 1h1z"></path><path stroke="currentColor" d="m17.5 4.5-8.458 8.458a.25.25 0 0 0-.06.098l-.824 2.47a.25.25 0 0 0 .316.316l2.47-.823a.25.25 0 0 0 .098-.06L19.5 6.5m-2-2 2.323-2.323a.25.25 0 0 1 .354 0l1.646 1.646a.25.25 0 0 1 0 .354L19.5 6.5m-2-2 2 2"></path></svg><div class="dt l">Write</div></div></a></span></div></div><div class="k j i d"><div class="fi ab"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerSearchButton" rel="noopener follow" href="/search?source=---top_nav_layout_nav----------------------------------"><div class="bf b bg z du fj fk ab q fl fm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24" aria-label="Search"><path fill="currentColor" fill-rule="evenodd" d="M4.092 11.06a6.95 6.95 0 1 1 13.9 0 6.95 6.95 0 0 1-13.9 0m6.95-8.05a8.05 8.05 0 1 0 5.13 14.26l3.75 3.75a.56.56 0 1 0 .79-.79l-3.73-3.73A8.05 8.05 0 0 0 11.042 3z" clip-rule="evenodd"></path></svg></div></a></div></div><div class="fi h k j"><div class="ab q"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><button class="bf b dx dy eh dz ea ei eb ec ej ek ee el em eg eo ep eq er es et eu ev ew ex ey ez fa fb fc fd bm fe ff" data-testid="headerSignUpButton">Sign up</button></span></p><div class="ax l"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerSignInButton" rel="noopener follow" href="/m/signin?operation=login&redirect=https%3A%2F%2Fmedium.com%2Fandroiddevelopers%2F5-years-of-kotlin-on-android-the-extra-bits-a7dcd17480a9&source=post_page---top_nav_layout_nav-----------------------global_nav-----------">Sign in</a></span></p></div></div></div><div class="l" aria-hidden="false"><button class="ay fn am ab q ao fo fp fq" aria-label="user options menu" data-testid="headerUserIcon"><div class="l fj"><img alt="" class="l fd by bz ca cx" src="https://miro.medium.com/v2/resize:fill:64:64/1*dmbNkD5D-u45r44go_cf0g.png" width="32" height="32" loading="lazy" role="presentation"/><div class="fr by l bz ca fs n ay ft"></div></div></button></div></div></div><div class="l"><div class="fu fv fw fx fy l"><div class="ab cb"><div class="ci bh fz ga gb gc"></div></div><article><div class="l"><div class="l"><span class="l"></span><section><div><div class="fs gi gj gk gl gm"></div><div class="gn go gp gq gr"><div class="ab cb"><div class="ci bh fz ga gb gc"><figure class="gv gw gx gy gz ha gs gt paragraph-image"><div role="button" tabindex="0" class="hb hc fj hd bh he"><div class="gs gt gu"><picture><source srcSet="https://miro.medium.com/v2/resize:fit:640/format:webp/1*CDq4uk7-5PeQkTQpgug8Rw.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*CDq4uk7-5PeQkTQpgug8Rw.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*CDq4uk7-5PeQkTQpgug8Rw.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*CDq4uk7-5PeQkTQpgug8Rw.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*CDq4uk7-5PeQkTQpgug8Rw.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*CDq4uk7-5PeQkTQpgug8Rw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*CDq4uk7-5PeQkTQpgug8Rw.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp"/><source data-testid="og" srcSet="https://miro.medium.com/v2/resize:fit:640/1*CDq4uk7-5PeQkTQpgug8Rw.png 640w, https://miro.medium.com/v2/resize:fit:720/1*CDq4uk7-5PeQkTQpgug8Rw.png 720w, https://miro.medium.com/v2/resize:fit:750/1*CDq4uk7-5PeQkTQpgug8Rw.png 750w, https://miro.medium.com/v2/resize:fit:786/1*CDq4uk7-5PeQkTQpgug8Rw.png 786w, https://miro.medium.com/v2/resize:fit:828/1*CDq4uk7-5PeQkTQpgug8Rw.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*CDq4uk7-5PeQkTQpgug8Rw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*CDq4uk7-5PeQkTQpgug8Rw.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"/><img alt="" class="bh hf hg c" width="700" height="211" loading="eager" role="presentation"/></picture></div></div></figure><div><h1 id="1dd7" class="pw-post-title hh hi hj bf hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij bk" data-testid="storyTitle"><em class="ik">5 years of Kotlin on Android — the extended interviews</em></h1><div><div class="speechify-ignore ab cp"><div class="speechify-ignore bh l"><div class="il im in io ip ab"><div><div class="ab iq"><div><div class="bm" aria-hidden="false"><a rel="noopener follow" href="/@AndroidDev?source=post_page---byline--a7dcd17480a9--------------------------------"><div class="l ir is by it iu"><div class="l fj"><img alt="Android Developers" class="l fd by dd de cx" src="https://miro.medium.com/v2/resize:fill:88:88/1*VglQS9HKgUvUuAX36Np5qQ.png" width="44" height="44" loading="lazy" data-testid="authorPhoto"/><div class="iv by l dd de fs n iw ft"></div></div></div></a></div></div><div class="ix ab fj"><div><div class="bm" aria-hidden="false"><a href="https://medium.com/androiddevelopers?source=post_page---byline--a7dcd17480a9--------------------------------" rel="noopener follow"><div class="l iy iz by it ja"><div class="l fj"><img alt="Android Developers" class="l fd by br jb cx" src="https://miro.medium.com/v2/resize:fill:48:48/1*4Tg6pPzer7cIarYaszIKaQ.png" width="24" height="24" loading="lazy" data-testid="publicationPhoto"/><div class="iv by l br jb fs n iw ft"></div></div></div></a></div></div></div></div></div><div class="bn bh l"><div class="ab"><div style="flex:1"><span class="bf b bg z bk"><div class="jc ab q"><div class="ab q jd"><div class="ab q"><div><div class="bm" aria-hidden="false"><p class="bf b je jf bk"><a class="af ag ah ai aj ak al am an ao ap aq ar jg" data-testid="authorName" rel="noopener follow" href="/@AndroidDev?source=post_page---byline--a7dcd17480a9--------------------------------">Android Developers</a></p></div></div></div><span class="jh ji" aria-hidden="true"><span class="bf b bg z du">·</span></span><p class="bf b je jf du"><span><a class="jj jk ah ai aj ak al am an ao ap aq ar ex jl jm" rel="noopener follow" href="/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fsubscribe%2Fuser%2Fe1f26db83092&operation=register&redirect=https%3A%2F%2Fmedium.com%2Fandroiddevelopers%2F5-years-of-kotlin-on-android-the-extra-bits-a7dcd17480a9&user=Android+Developers&userId=e1f26db83092&source=post_page-e1f26db83092--byline--a7dcd17480a9---------------------post_header-----------">Follow</a></span></p></div></div></span></div></div><div class="l jn"><span class="bf b bg z du"><div class="ab cn jo jp jq"><div class="jr js ab"><div class="bf b bg z du ab jt"><span class="ju l jn">Published in</span><div><div class="l" aria-hidden="false"><a class="af ag ah ai aj ak al am an ao ap aq ar jg ab q" data-testid="publicationName" href="https://medium.com/androiddevelopers?source=post_page---byline--a7dcd17480a9--------------------------------" rel="noopener follow"><p class="bf b bg z jv jw jx jy jz ka kb kc bk">Android Developers</p></a></div></div></div><div class="h k"><span class="jh ji" aria-hidden="true"><span class="bf b bg z du">·</span></span></div></div><span class="bf b bg z du"><div class="ab ae"><span data-testid="storyReadTime">9 min read</span><div class="kd ke l" aria-hidden="true"><span class="l" aria-hidden="true"><span class="bf b bg z du">·</span></span></div><span data-testid="storyPublishDate">Aug 17, 2022</span></div></span></div></span></div></div></div><div class="ab cp kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku"><div class="h k w fg fh q"><div class="lk l"><div class="ab q ll lm"><div class="pw-multi-vote-icon fj ju ln lo lp"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerClapButton" rel="noopener follow" href="/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fvote%2Fandroiddevelopers%2Fa7dcd17480a9&operation=register&redirect=https%3A%2F%2Fmedium.com%2Fandroiddevelopers%2F5-years-of-kotlin-on-android-the-extra-bits-a7dcd17480a9&user=Android+Developers&userId=e1f26db83092&source=---header_actions--a7dcd17480a9---------------------clap_footer-----------"><div><div class="bm" aria-hidden="false"><div class="lq ao lr ls lt lu am lv lw lx lp"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-label="clap"><path fill-rule="evenodd" d="M11.37.828 12 3.282l.63-2.454zM13.916 3.953l1.523-2.112-1.184-.39zM8.589 1.84l1.522 2.112-.337-2.501zM18.523 18.92c-.86.86-1.75 1.246-2.62 1.33a6 6 0 0 0 .407-.372c2.388-2.389 2.86-4.951 1.399-7.623l-.912-1.603-.79-1.672c-.26-.56-.194-.98.203-1.288a.7.7 0 0 1 .546-.132c.283.046.546.231.728.5l2.363 4.157c.976 1.624 1.141 4.237-1.324 6.702m-10.999-.438L3.37 14.328a.828.828 0 0 1 .585-1.408.83.83 0 0 1 .585.242l2.158 2.157a.365.365 0 0 0 .516-.516l-2.157-2.158-1.449-1.449a.826.826 0 0 1 1.167-1.17l3.438 3.44a.363.363 0 0 0 .516 0 .364.364 0 0 0 0-.516L5.293 9.513l-.97-.97a.826.826 0 0 1 0-1.166.84.84 0 0 1 1.167 0l.97.968 3.437 3.436a.36.36 0 0 0 .517 0 .366.366 0 0 0 0-.516L6.977 7.83a.82.82 0 0 1-.241-.584.82.82 0 0 1 .824-.826c.219 0 .43.087.584.242l5.787 5.787a.366.366 0 0 0 .587-.415l-1.117-2.363c-.26-.56-.194-.98.204-1.289a.7.7 0 0 1 .546-.132c.283.046.545.232.727.501l2.193 3.86c1.302 2.38.883 4.59-1.277 6.75-1.156 1.156-2.602 1.627-4.19 1.367-1.418-.236-2.866-1.033-4.079-2.246M10.75 5.971l2.12 2.12c-.41.502-.465 1.17-.128 1.89l.22.465-3.523-3.523a.8.8 0 0 1-.097-.368c0-.22.086-.428.241-.584a.847.847 0 0 1 1.167 0m7.355 1.705c-.31-.461-.746-.758-1.23-.837a1.44 1.44 0 0 0-1.11.275c-.312.24-.505.543-.59.881a1.74 1.74 0 0 0-.906-.465 1.47 1.47 0 0 0-.82.106l-2.182-2.182a1.56 1.56 0 0 0-2.2 0 1.54 1.54 0 0 0-.396.701 1.56 1.56 0 0 0-2.21-.01 1.55 1.55 0 0 0-.416.753c-.624-.624-1.649-.624-2.237-.037a1.557 1.557 0 0 0 0 2.2c-.239.1-.501.238-.715.453a1.56 1.56 0 0 0 0 2.2l.516.515a1.556 1.556 0 0 0-.753 2.615L7.01 19c1.32 1.319 2.909 2.189 4.475 2.449q.482.08.971.08c.85 0 1.653-.198 2.393-.579.231.033.46.054.686.054 1.266 0 2.457-.52 3.505-1.567 2.763-2.763 2.552-5.734 1.439-7.586z" clip-rule="evenodd"></path></svg></div></div></div></a></span></div><div class="pw-multi-vote-count l ly lz ma mb mc md me"><p class="bf b dv z du"><span class="mf">--</span></p></div></div></div><div><div class="bm" aria-hidden="false"><button class="ao lq mi mj ab q fk mk ml" aria-label="responses"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" class="mh"><path d="M18.006 16.803c1.533-1.456 2.234-3.325 2.234-5.321C20.24 7.357 16.709 4 12.191 4S4 7.357 4 11.482c0 4.126 3.674 7.482 8.191 7.482.817 0 1.622-.111 2.393-.327.231.2.48.391.744.559 1.06.693 2.203 1.044 3.399 1.044.224-.008.4-.112.486-.287a.49.49 0 0 0-.042-.518c-.495-.67-.845-1.364-1.04-2.057a4 4 0 0 1-.125-.598zm-3.122 1.055-.067-.223-.315.096a8 8 0 0 1-2.311.338c-4.023 0-7.292-2.955-7.292-6.587 0-3.633 3.269-6.588 7.292-6.588 4.014 0 7.112 2.958 7.112 6.593 0 1.794-.608 3.469-2.027 4.72l-.195.168v.255c0 .056 0 .151.016.295.025.231.081.478.154.733.154.558.398 1.117.722 1.659a5.3 5.3 0 0 1-2.165-.845c-.276-.176-.714-.383-.941-.59z"></path></svg><p class="bf b dv z du"><span class="pw-responses-count mg mh">2</span></p></button></div></div></div><div class="ab q kv kw kx ky kz la lb lc ld le lf lg lh li lj"><div class="mm k j i d"></div><div class="h k"><div><div class="bm" aria-hidden="false"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerBookmarkButton" rel="noopener follow" href="/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fbookmark%2Fp%2Fa7dcd17480a9&operation=register&redirect=https%3A%2F%2Fmedium.com%2Fandroiddevelopers%2F5-years-of-kotlin-on-android-the-extra-bits-a7dcd17480a9&source=---header_actions--a7dcd17480a9---------------------bookmark_footer-----------"><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="none" viewBox="0 0 25 25" class="du mn" aria-label="Add to list bookmark button"><path fill="currentColor" d="M18 2.5a.5.5 0 0 1 1 0V5h2.5a.5.5 0 0 1 0 1H19v2.5a.5.5 0 1 1-1 0V6h-2.5a.5.5 0 0 1 0-1H18zM7 7a1 1 0 0 1 1-1h3.5a.5.5 0 0 0 0-1H8a2 2 0 0 0-2 2v14a.5.5 0 0 0 .805.396L12.5 17l5.695 4.396A.5.5 0 0 0 19 21v-8.5a.5.5 0 0 0-1 0v7.485l-5.195-4.012a.5.5 0 0 0-.61 0L7 19.985z"></path></svg></a></span></div></div></div><div class="fd mo cn"><div class="l ae"><div class="ab cb"><div class="mp mq mr ms mt hf ci bh"><div class="ab"><div class="bm bh" aria-hidden="false"><div><div class="bm" aria-hidden="false"><button aria-label="Listen" data-testid="audioPlayButton" class="af fk ah ai aj ak al mu an ao ap ex mv mw ml mx my mz na nb s nc nd ne nf ng nh ni u nj nk nl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M3 12a9 9 0 1 1 18 0 9 9 0 0 1-18 0m9-10C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2m3.376 10.416-4.599 3.066a.5.5 0 0 1-.777-.416V8.934a.5.5 0 0 1 .777-.416l4.599 3.066a.5.5 0 0 1 0 .832" clip-rule="evenodd"></path></svg><div class="j i d"><p class="bf b bg z du">Listen</p></div></button></div></div></div></div></div></div></div></div><div class="bm" aria-hidden="false" aria-describedby="postFooterSocialMenu" aria-labelledby="postFooterSocialMenu"><div><div class="bm" aria-hidden="false"><button aria-controls="postFooterSocialMenu" aria-expanded="false" aria-label="Share Post" data-testid="headerSocialShareButton" class="af fk ah ai aj ak al mu an ao ap ex mv mw ml mx my mz na nb s nc nd ne nf ng nh ni u nj nk nl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M15.218 4.931a.4.4 0 0 1-.118.132l.012.006a.45.45 0 0 1-.292.074.5.5 0 0 1-.3-.13l-2.02-2.02v7.07c0 .28-.23.5-.5.5s-.5-.22-.5-.5v-7.04l-2 2a.45.45 0 0 1-.57.04h-.02a.4.4 0 0 1-.16-.3.4.4 0 0 1 .1-.32l2.8-2.8a.5.5 0 0 1 .7 0l2.8 2.79a.42.42 0 0 1 .068.498m-.106.138.008.004v-.01zM16 7.063h1.5a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-11c-1.1 0-2-.9-2-2v-10a2 2 0 0 1 2-2H8a.5.5 0 0 1 .35.15.5.5 0 0 1 .15.35.5.5 0 0 1-.15.35.5.5 0 0 1-.35.15H6.4c-.5 0-.9.4-.9.9v10.2a.9.9 0 0 0 .9.9h11.2c.5 0 .9-.4.9-.9v-10.2c0-.5-.4-.9-.9-.9H16a.5.5 0 0 1 0-1" clip-rule="evenodd"></path></svg><div class="j i d"><p class="bf b bg z du">Share</p></div></button></div></div></div></div></div></div></div></div></div><p id="f192" class="pw-post-body-paragraph nm nn hj no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">We’ve published <a class="af ok" href="https://android-developers.googleblog.com/2022/08/celebrating-5-years-of-kotlin-on-android.html" rel="noopener ugc nofollow" target="_blank">a celebration post</a> on our blog to recognize the 5 year anniversary of official support for Kotlin on Android.</p><p id="ea9b" class="pw-post-body-paragraph nm nn hj no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">In the making of that post, I had the chance to interview some great people who were involved in the Kotlin story, and the blog post could only include small bits of what they had to say on the topic. Hence, this post includes some interview material that would otherwise be left on the cutting room floor.</p><h2 id="6b66" class="ol om hj bf on oo op dy oq or os ea ot nx ou ov ow ob ox oy oz of pa pb pc pd bk">Jeffrey van Gogh</h2><p id="b59b" class="pw-post-body-paragraph nm nn hj no b np pe nr ns nt pf nv nw nx pg nz oa ob ph od oe of pi oh oi oj gn bk">Jeffrey leads a team of engineers at Google working on Kotlin tooling, and he was involved in the discussions around the language from the very early days. He’s also a member of the <a class="af ok" href="https://kotlinfoundation.org/" rel="noopener ugc nofollow" target="_blank">Kotlin Foundation</a>, a joint effort between Google and JetBrains which safeguards the evolution of the language.</p><p id="b525" class="pw-post-body-paragraph nm nn hj no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">He recalled this about Google’s initial encounters of Kotlin:</p><blockquote class="pj pk pl"><p id="7e15" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">We started looking at Kotlin about 6.5 years ago for various reasons. Of course we’re all language geeks who want to learn new languages. We also heard from our customers that they’re starting to use Kotlin even without Google officially endorsing it. We played with it for quite a bit and we were like “Hey, this is actually really neat!”</p></blockquote><p id="7b20" class="pw-post-body-paragraph nm nn hj no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">He also expanded on the cooperation between the two companies.</p><blockquote class="pj pk pl"><p id="15d9" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">A few months before I/O 2017 we started talking to the folks at JetBrains about making Kotlin on Android a reality. We wanted to make sure that if we make this a recommended language for Android, it’s supported well. At the same time, JetBrains doesn’t want to see Kotlin becoming only an Android language.</p><p id="ca48" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">Many other languages have a foundation, and we thought that was a good path for us to take as well. We had to figure out what we wanted to put in the Foundation. We tried to protect the things that we really care about protecting, like making sure that the language ages well. But we have a single person in charge of the language design, appointed by the Foundation, so that we are not designing every language feature by committee.</p><p id="f81e" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">I’m on the Kotlin Language Committee where we ensure that every time we have to make a breaking change or deprecate something, we do it with extreme care. We want the language to move forward but also to age well. We meet with JetBrains every couple months, look at the issues, and have deep technical discussions.</p></blockquote><blockquote class="pn"><p id="345c" class="po pp hj bf pq pr ps pt pu pv pw oj du">“The language is still growing and making great progress, adding new features at a good pace, so I think we’re succeeding.”</p></blockquote><h2 id="362f" class="ol om hj bf on oo px dy oq or py ea ot nx pz ov ow ob qa oy oz of qb pb pc pd bk">Egor Tolstoy</h2><p id="9996" class="pw-post-body-paragraph nm nn hj no b np pe nr ns nt pf nv nw nx pg nz oa ob ph od oe of pi oh oi oj gn bk">Egor is the Kotlin Product Lead at JetBrains, and he reflected on the collaboration efforts from JetBrains’ side.</p><blockquote class="pj pk pl"><p id="76e6" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">Development is not the only field of JetBrains and Google collaboration. We work together on product management by sharing research insights and ideas on making the developer experience great. Another crucial joint effort is the Kotlin Foundation, which preserves the Kotlin trademark and works on fostering the growth of Kotlin ecosystem maturity and richness.</p></blockquote><p id="cb26" class="pw-post-body-paragraph nm nn hj no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">He also noted that JetBrains needed to adjust their ways of working to properly support Android developers using Kotlin.</p><blockquote class="pj pk pl"><p id="00f8" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">One of the key principles of the JetBrains’ engineering culture is dogfooding. We use our tools daily and test all the features ourselves. When something works great for our purpose, it usually works great for other people. But we are not mobile developers and don’t usually write Android apps. We had to learn how to gather feedback differently — by listening to the community, conducting product research, and working closely with domain experts from Google.</p></blockquote><h2 id="2d82" class="ol om hj bf on oo op dy oq or os ea ot nx ou ov ow ob ox oy oz of pa pb pc pd bk">Florina Muntenescu</h2><p id="b095" class="pw-post-body-paragraph nm nn hj no b np pe nr ns nt pf nv nw nx pg nz oa ob ph od oe of pi oh oi oj gn bk">I spoke to Florina about Jetpack Compose, and she noted the following about its use of Kotlin and the future of UI on Android:</p><blockquote class="pj pk pl"><p id="1149" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">When we decided to start with Compose, we knew that Kotlin was the language to use, not only as the language in which Compose is written, but also as the only language in which it can be used. We made this long-term bet, even if at that time not all developers were using Kotlin. We trusted that Kotlin adoption would grow with time, and therefore Compose wouldn’t have this problem.</p><p id="b8e8" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">We’re not Compose-first yet, but Compose is the future of UI development on Android. Right now, for developers that are starting to learn Android, we’re already recommending the <a class="af ok" href="https://developer.android.com/courses/android-basics-compose/course" rel="noopener ugc nofollow" target="_blank">Android Basics with Compose course</a>, rather than the Views one.</p></blockquote><blockquote class="pn"><p id="483f" class="po pp hj bf pq pr ps pt pu pv pw oj du">“We’ve been telling developers to move to Kotlin for years. Kotlin is here to stay, and Compose is our bet for the future.”</p></blockquote><p id="d6a2" class="pw-post-body-paragraph nm nn hj no b np qc nr ns nt qd nv nw nx qe nz oa ob qf od oe of qg oh oi oj gn bk">She also described how and why Kotlin makes Compose so great to work with.</p><blockquote class="pj pk pl"><p id="a232" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">What makes Compose really different from the View system is that it’s all based on functions. Functions are a first-class citizen in Kotlin, and composable functions are the core of Compose. This means that composables can easily be reused throughout your application, without having to be tied to a specific class, Activity or Fragment.</p><p id="51c8" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk"><a class="af ok" href="https://developer.android.com/jetpack/compose/kotlin#coroutines" rel="noopener ugc nofollow" target="_blank">Coroutines</a> are used to do asynchronous work in Compose both under the hood and in the APIs that we’re exposing.</p><p id="e683" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">You no longer have to have that overhead of switching between Kotlin and XML. Even when you think about large screens, we no longer need to have that switch to XML. With <a class="af ok" href="https://developer.android.com/jetpack/compose/layouts/adaptive#explicit-layout-changes" rel="noopener ugc nofollow" target="_blank">window size classes</a>, you can easily build all of your UI in Kotlin</p></blockquote><h2 id="82bd" class="ol om hj bf on oo op dy oq or os ea ot nx ou ov ow ob ox oy oz of pa pb pc pd bk">Yigit Boyar</h2><p id="ba0d" class="pw-post-body-paragraph nm nn hj no b np pe nr ns nt pf nv nw nx pg nz oa ob ph od oe of pi oh oi oj gn bk">The next Googler I spoke to is Yigit, who’s been all for Kotlin from the start.</p><blockquote class="pj pk pl"><p id="2f0b" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">I was a huge proponent of Kotlin for a long time, from the very early days. I started writing Kotlin very early. I believe I have the <a class="af ok" href="https://android.googlesource.com/platform/frameworks/data-binding/+/085724fd84795ae1631747443c43f77c08e11a28" rel="noopener ugc nofollow" target="_blank">first commit with Kotlin in AOSP</a> from 2014.</p><p id="f6c1" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">When we started databinding, I initially wanted to write the annotation processor logic in Kotlin, but that was a “no”. But then I pitched that we could use it as a templating engine, and that’s how we started using Kotlin in a very limited fashion.</p></blockquote><blockquote class="pn"><p id="ef3b" class="po pp hj bf pq pr ps pt pu pv pw oj du"><em class="ik">“A bunch of people knew about Kotlin. We talked about it a lot.”</em></p></blockquote><p id="ab68" class="pw-post-body-paragraph nm nn hj no b np qc nr ns nt qd nv nw nx qe nz oa ob qf od oe of qg oh oi oj gn bk">Slowly but surely, he started working Kotlin into Jetpack libraries as well.</p><blockquote class="pj pk pl"><p id="50e2" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">When I started working on Architecture Components, we were able to write the annotation processor of Room in Kotlin, as we don’t ship any of that on the device. The year we shipped Architecture Components was also the same year that we announced Kotlin support.</p><p id="fd5c" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">Google announced Kotlin-first Android development in 2019, but until about March 2020 we weren’t able to use Kotlin in our core libraries. Fast forward to today, now if you want to start a Jetpack Library, you are writing it in Kotlin unless you have a very, very, very good reason not to do that.</p></blockquote><p id="5c6e" class="pw-post-body-paragraph nm nn hj no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">We also touched on the problems of having too many concurrency solutions in Java, and migrating libraries from Java to Kotlin.</p><blockquote class="pj pk pl"><p id="41ac" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk"><a class="af ok" href="https://developer.android.com/topic/libraries/architecture/datastore" rel="noopener ugc nofollow" target="_blank">DataStore</a> is a good example where everything is Kotlin and coroutines. We still have some wrappers for RxJava and Guava to make it usable from Java, but it’s harder to use DataStore without using Kotlin.</p><p id="f4ad" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">In Java you have to use one of the reactive frameworks, but there isn’t a standard one that everyone uses. So what do you do, which one do you support? It’s always been a problem. But we are good today, as everything is in Kotlin. We have coroutines as the recommended concurrency solution, that makes it much easier going forward.</p><p id="6c17" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">Now we are actively rewriting libraries in Kotlin like we did with Room. We still look for a good reason to rewrite an existing library in Kotlin, and we also keep in mind the binary compatibility rules. The last thing we want is to break people just to convert the language from Java to Kotlin.</p></blockquote><p id="ad5c" class="pw-post-body-paragraph nm nn hj no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">Finally, Yigit emphasized that the language has much more to offer than just Android development.</p><blockquote class="pj pk pl"><p id="5e16" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">Even though we are very focused on the Android side, we are really trying to make sure Kotlin is adopted on other platforms, too. For example, Google Cloud has Kotlin support now, which was a huge effort at the time.</p></blockquote><blockquote class="pn"><p id="9fcb" class="po pp hj bf pq pr ps pt pu pv pw oj du"><em class="ik">“Kotlin is very important for Android, but we are not limiting it to Android.”</em></p></blockquote><blockquote class="pj pk pl"><p id="05d5" class="nm nn pm no b np qc nr ns nt qd nv nw nx qe nz oa ob qf od oe of qg oh oi oj gn bk">We want Kotlin to be a top-level language, and that happens only if you have server-side adoption, too, so we are trying to make sure that happens. We’re not short-sighted; we’re not trying to keep it an Android language.</p></blockquote><h2 id="ef6f" class="ol om hj bf on oo op dy oq or os ea ot nx ou ov ow ob ox oy oz of pa pb pc pd bk"><em class="ik">Kevin Bierhoff</em></h2><p id="ecaa" class="pw-post-body-paragraph nm nn hj no b np pe nr ns nt pf nv nw nx pg nz oa ob ph od oe of pi oh oi oj gn bk">I talked to Kevin to learn about how Kotlin is used within Google, both on Android and beyond.</p><blockquote class="pj pk pl"><p id="14c3" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">I lead the Kotlin team in Software Foundations, which is the organization that supports the languages we use across Google’s development. We’ve been working to bring Kotlin to Googlers for the last 4 years.</p><p id="0fac" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">What that means is going through the tools that Google developers use and teaching them about Kotlin. Everything started with making the build system work with Kotlin.</p><p id="9224" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">Static analysis is also a large area, which we’ve invested a lot into over the last decade, as a way for us to enforce properties across the entire codebase. For example, we use it to find bug patterns that we want to eradicate. Often that’s about correctness, but sometimes it’s about security or privacy.</p><p id="2db5" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">The other area we work in is libraries or APIs, going into commonly used infrastructure and making those nice to use with Kotlin. We started with protos, which Googlers ubiquitously use. We designed <a class="af ok" href="https://developers.googleblog.com/2021/11/announcing-kotlin-support-for-protocol.html" rel="noopener ugc nofollow" target="_blank">an API for building protos</a> that takes advantage of Kotlin and provides a nicer experience.</p><p id="4509" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">Another big recurring theme is Kotlin coroutines. There is a lot of infrastructure at Google that’s asynchronous in some way. These have traditionally been coded to work with Java Futures, and we want those to be natively supporting Kotlin coroutines now</p></blockquote><p id="638a" class="pw-post-body-paragraph nm nn hj no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">While we’re celebrating Kotlin on Android today, we are also invested in the language beyond the Android platform.</p><blockquote class="pj pk pl"><p id="538a" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">Initially the effort for Kotlin support within Google came from Android. We didn’t want to just encourage other people to use Kotlin, we wanted to demonstrate that we’re doing it ourselves. There’s always gonna be enthusiasts but a lot of organizations are looking to us to make decisions like whether they should transition to Kotlin.</p><p id="8302" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">At this point, we have a substantial amount of Kotlin code in our monorepo, and at a scale that’s large enough that it’s interesting even for JetBrains, to find bugs that they can’t find on their own. That’s something we want to build on and leverage for the benefit of the Kotlin community.</p></blockquote><h2 id="e97a" class="ol om hj bf on oo op dy oq or os ea ot nx ou ov ow ob ox oy oz of pa pb pc pd bk">Christina Lee</h2><p id="07e1" class="pw-post-body-paragraph nm nn hj no b np pe nr ns nt pf nv nw nx pg nz oa ob ph od oe of pi oh oi oj gn bk">Speaking of the community, my last interview was with Christina, who works as an Android engineer at Pinterest, and she’s a Google Developer Expert for both Kotlin and Android.</p><p id="edd2" class="pw-post-body-paragraph nm nn hj no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">This is how she recalled her first contact with the language.</p><blockquote class="pj pk pl"><p id="d750" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">I walked in on my first day at my new job and someone brought up Kotlin. I couldn’t tell what he was saying because I’ve never heard the word before. I had to go home that night and google it, and suffice to say, we did end up building the app in Kotlin.</p><p id="1d1e" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">When we were debating using Kotlin with Android, we pored over <a class="af ok" href="https://docs.google.com/document/d/1ReS3ep-hjxWA8kZi0YqDbEhCqTt29hG8P44aA9W0DM8/edit?usp=sharing" rel="noopener ugc nofollow" target="_blank">Jake’s document</a>. Back then a lot of people were talking about Kotlin, and that was <strong class="no hk">the</strong> document that everybody went to.</p></blockquote><p id="a486" class="pw-post-body-paragraph nm nn hj no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">We then discussed what it’s like to be a part of the Android and Kotlin communities, and what makes them so great to participate in.</p><blockquote class="pj pk pl"><p id="552f" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">The longer Kotlin has been around, the more I appreciate the community around it and the team building it. The team is so open with the development plan and so open to feedback.</p><p id="63b1" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">One thing about communities that’s really hard to strike a balance for is pushing for things to get better and giving constructive feedback, but not having the community devolve into snark. That’s really hard to do in person; it’s way harder to do online. What I’ve been so impressed with in both the Android community and the Kotlin Community is that that balance seems to be there.</p><p id="53b6" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">The Kotlin Community is really incredible for its ability to both give forthright feedback and remain a positive space.</p></blockquote><p id="079f" class="pw-post-body-paragraph nm nn hj no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">Finally, she summarized the profound impact of the language.</p><blockquote class="pj pk pl"><p id="95ee" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">It sounds silly to say it in the context of a new programming language, but technology can really change people’s lives, and it can really make people happier at work. When we were all making that switch from Java to Kotlin, to hear how many people were positively impacted by it, I found that really powerful because it’s hard to find step functions like that in the workplace.</p><p id="201e" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">We normally focus on “there’s null safety” or “there’s type inference” or all these other technical parts. But when you take a step back, there’s a whole story in there about all of the people who had their passion for coding ignited or reignited because Kotlin is such a wonderful language.</p><p id="4d42" class="nm nn pm no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">And you can’t manufacture that, right? You can’t buy people’s enthusiasm, they have to actually feel that way. It’s just so impressive that the team is able to do what they’re able to do and that the community is as good as it is. It doesn’t always happen. I think it’s a really special thing that we have.</p></blockquote><p id="3049" class="pw-post-body-paragraph nm nn hj no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk">We’d also love to hear your stories of learning and adopting Kotlin for Android development! Share them on social media using the hashtag <strong class="no hk">#Hi5KotlinOnAndroid.</strong></p></div></div></div><div class="ab cb qh qi qj qk" role="separator"><span class="ql by bm qm qn qo"></span><span class="ql by bm qm qn qo"></span><span class="ql by bm qm qn"></span></div><div class="gn go gp gq gr"><div class="ab cb"><div class="ci bh fz ga gb gc"><p id="4742" class="pw-post-body-paragraph nm nn hj no b np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj gn bk"><em class="pm">Java is a trademark or registered trademark of Oracle and/or its affiliates.</em></p></div></div></div></div></section></div></div></article></div><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="qp qq ab jq"><div class="qr ab"><a class="qs ay am ao" rel="noopener follow" href="/tag/kotlin?source=post_page-----a7dcd17480a9--------------------------------"><div class="qt fj cx qu ge qv qw bf b bg z bk qx">Kotlin</div></a></div><div class="qr ab"><a class="qs ay am ao" rel="noopener follow" href="/tag/latest?source=post_page-----a7dcd17480a9--------------------------------"><div class="qt fj cx qu ge qv qw bf b bg z bk qx">Latest</div></a></div></div></div></div><div class="l"></div><footer class="qy qi qz ra rb ab q rc ja c"><div class="l ae"><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="ab cp rd"><div class="ab q ll"><div class="re l"><span class="l rf rg rh e d"><div class="ab q ll lm"><div class="pw-multi-vote-icon fj ju ln lo lp"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="footerClapButton" rel="noopener follow" href="/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fvote%2Fandroiddevelopers%2Fa7dcd17480a9&operation=register&redirect=https%3A%2F%2Fmedium.com%2Fandroiddevelopers%2F5-years-of-kotlin-on-android-the-extra-bits-a7dcd17480a9&user=Android+Developers&userId=e1f26db83092&source=---footer_actions--a7dcd17480a9---------------------clap_footer-----------"><div><div class="bm" aria-hidden="false"><div class="lq ao lr ls lt lu am lv lw lx lp"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-label="clap"><path fill-rule="evenodd" d="M11.37.828 12 3.282l.63-2.454zM13.916 3.953l1.523-2.112-1.184-.39zM8.589 1.84l1.522 2.112-.337-2.501zM18.523 18.92c-.86.86-1.75 1.246-2.62 1.33a6 6 0 0 0 .407-.372c2.388-2.389 2.86-4.951 1.399-7.623l-.912-1.603-.79-1.672c-.26-.56-.194-.98.203-1.288a.7.7 0 0 1 .546-.132c.283.046.546.231.728.5l2.363 4.157c.976 1.624 1.141 4.237-1.324 6.702m-10.999-.438L3.37 14.328a.828.828 0 0 1 .585-1.408.83.83 0 0 1 .585.242l2.158 2.157a.365.365 0 0 0 .516-.516l-2.157-2.158-1.449-1.449a.826.826 0 0 1 1.167-1.17l3.438 3.44a.363.363 0 0 0 .516 0 .364.364 0 0 0 0-.516L5.293 9.513l-.97-.97a.826.826 0 0 1 0-1.166.84.84 0 0 1 1.167 0l.97.968 3.437 3.436a.36.36 0 0 0 .517 0 .366.366 0 0 0 0-.516L6.977 7.83a.82.82 0 0 1-.241-.584.82.82 0 0 1 .824-.826c.219 0 .43.087.584.242l5.787 5.787a.366.366 0 0 0 .587-.415l-1.117-2.363c-.26-.56-.194-.98.204-1.289a.7.7 0 0 1 .546-.132c.283.046.545.232.727.501l2.193 3.86c1.302 2.38.883 4.59-1.277 6.75-1.156 1.156-2.602 1.627-4.19 1.367-1.418-.236-2.866-1.033-4.079-2.246M10.75 5.971l2.12 2.12c-.41.502-.465 1.17-.128 1.89l.22.465-3.523-3.523a.8.8 0 0 1-.097-.368c0-.22.086-.428.241-.584a.847.847 0 0 1 1.167 0m7.355 1.705c-.31-.461-.746-.758-1.23-.837a1.44 1.44 0 0 0-1.11.275c-.312.24-.505.543-.59.881a1.74 1.74 0 0 0-.906-.465 1.47 1.47 0 0 0-.82.106l-2.182-2.182a1.56 1.56 0 0 0-2.2 0 1.54 1.54 0 0 0-.396.701 1.56 1.56 0 0 0-2.21-.01 1.55 1.55 0 0 0-.416.753c-.624-.624-1.649-.624-2.237-.037a1.557 1.557 0 0 0 0 2.2c-.239.1-.501.238-.715.453a1.56 1.56 0 0 0 0 2.2l.516.515a1.556 1.556 0 0 0-.753 2.615L7.01 19c1.32 1.319 2.909 2.189 4.475 2.449q.482.08.971.08c.85 0 1.653-.198 2.393-.579.231.033.46.054.686.054 1.266 0 2.457-.52 3.505-1.567 2.763-2.763 2.552-5.734 1.439-7.586z" clip-rule="evenodd"></path></svg></div></div></div></a></span></div><div class="pw-multi-vote-count l ly lz ma mb mc md me"><p class="bf b dv z du"><span class="mf">--</span></p></div></div></span><span class="l h g f ri rj"><div class="ab q ll lm"><div class="pw-multi-vote-icon fj ju ln lo lp"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="footerClapButton" rel="noopener follow" href="/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fvote%2Fandroiddevelopers%2Fa7dcd17480a9&operation=register&redirect=https%3A%2F%2Fmedium.com%2Fandroiddevelopers%2F5-years-of-kotlin-on-android-the-extra-bits-a7dcd17480a9&user=Android+Developers&userId=e1f26db83092&source=---footer_actions--a7dcd17480a9---------------------clap_footer-----------"><div><div class="bm" aria-hidden="false"><div class="lq ao lr ls lt lu am lv lw lx lp"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-label="clap"><path fill-rule="evenodd" d="M11.37.828 12 3.282l.63-2.454zM13.916 3.953l1.523-2.112-1.184-.39zM8.589 1.84l1.522 2.112-.337-2.501zM18.523 18.92c-.86.86-1.75 1.246-2.62 1.33a6 6 0 0 0 .407-.372c2.388-2.389 2.86-4.951 1.399-7.623l-.912-1.603-.79-1.672c-.26-.56-.194-.98.203-1.288a.7.7 0 0 1 .546-.132c.283.046.546.231.728.5l2.363 4.157c.976 1.624 1.141 4.237-1.324 6.702m-10.999-.438L3.37 14.328a.828.828 0 0 1 .585-1.408.83.83 0 0 1 .585.242l2.158 2.157a.365.365 0 0 0 .516-.516l-2.157-2.158-1.449-1.449a.826.826 0 0 1 1.167-1.17l3.438 3.44a.363.363 0 0 0 .516 0 .364.364 0 0 0 0-.516L5.293 9.513l-.97-.97a.826.826 0 0 1 0-1.166.84.84 0 0 1 1.167 0l.97.968 3.437 3.436a.36.36 0 0 0 .517 0 .366.366 0 0 0 0-.516L6.977 7.83a.82.82 0 0 1-.241-.584.82.82 0 0 1 .824-.826c.219 0 .43.087.584.242l5.787 5.787a.366.366 0 0 0 .587-.415l-1.117-2.363c-.26-.56-.194-.98.204-1.289a.7.7 0 0 1 .546-.132c.283.046.545.232.727.501l2.193 3.86c1.302 2.38.883 4.59-1.277 6.75-1.156 1.156-2.602 1.627-4.19 1.367-1.418-.236-2.866-1.033-4.079-2.246M10.75 5.971l2.12 2.12c-.41.502-.465 1.17-.128 1.89l.22.465-3.523-3.523a.8.8 0 0 1-.097-.368c0-.22.086-.428.241-.584a.847.847 0 0 1 1.167 0m7.355 1.705c-.31-.461-.746-.758-1.23-.837a1.44 1.44 0 0 0-1.11.275c-.312.24-.505.543-.59.881a1.74 1.74 0 0 0-.906-.465 1.47 1.47 0 0 0-.82.106l-2.182-2.182a1.56 1.56 0 0 0-2.2 0 1.54 1.54 0 0 0-.396.701 1.56 1.56 0 0 0-2.21-.01 1.55 1.55 0 0 0-.416.753c-.624-.624-1.649-.624-2.237-.037a1.557 1.557 0 0 0 0 2.2c-.239.1-.501.238-.715.453a1.56 1.56 0 0 0 0 2.2l.516.515a1.556 1.556 0 0 0-.753 2.615L7.01 19c1.32 1.319 2.909 2.189 4.475 2.449q.482.08.971.08c.85 0 1.653-.198 2.393-.579.231.033.46.054.686.054 1.266 0 2.457-.52 3.505-1.567 2.763-2.763 2.552-5.734 1.439-7.586z" clip-rule="evenodd"></path></svg></div></div></div></a></span></div><div class="pw-multi-vote-count l ly lz ma mb mc md me"><p class="bf b dv z du"><span class="mf">--</span></p></div></div></span></div><div class="bq ab"><div><div class="bm" aria-hidden="false"><button class="ao lq mi mj ab q fk mk ml" aria-label="responses"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" class="mh"><path d="M18.006 16.803c1.533-1.456 2.234-3.325 2.234-5.321C20.24 7.357 16.709 4 12.191 4S4 7.357 4 11.482c0 4.126 3.674 7.482 8.191 7.482.817 0 1.622-.111 2.393-.327.231.2.48.391.744.559 1.06.693 2.203 1.044 3.399 1.044.224-.008.4-.112.486-.287a.49.49 0 0 0-.042-.518c-.495-.67-.845-1.364-1.04-2.057a4 4 0 0 1-.125-.598zm-3.122 1.055-.067-.223-.315.096a8 8 0 0 1-2.311.338c-4.023 0-7.292-2.955-7.292-6.587 0-3.633 3.269-6.588 7.292-6.588 4.014 0 7.112 2.958 7.112 6.593 0 1.794-.608 3.469-2.027 4.72l-.195.168v.255c0 .056 0 .151.016.295.025.231.081.478.154.733.154.558.398 1.117.722 1.659a5.3 5.3 0 0 1-2.165-.845c-.276-.176-.714-.383-.941-.59z"></path></svg><p class="bf b bg z du"><span class="pw-responses-count mg mh">2</span></p></button></div></div></div></div><div class="ab q"><div class="qo l jn"><div><div class="bm" aria-hidden="false"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="footerBookmarkButton" rel="noopener follow" href="/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fbookmark%2Fp%2Fa7dcd17480a9&operation=register&redirect=https%3A%2F%2Fmedium.com%2Fandroiddevelopers%2F5-years-of-kotlin-on-android-the-extra-bits-a7dcd17480a9&source=---footer_actions--a7dcd17480a9---------------------bookmark_footer-----------"><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="none" viewBox="0 0 25 25" class="du mn" aria-label="Add to list bookmark button"><path fill="currentColor" d="M18 2.5a.5.5 0 0 1 1 0V5h2.5a.5.5 0 0 1 0 1H19v2.5a.5.5 0 1 1-1 0V6h-2.5a.5.5 0 0 1 0-1H18zM7 7a1 1 0 0 1 1-1h3.5a.5.5 0 0 0 0-1H8a2 2 0 0 0-2 2v14a.5.5 0 0 0 .805.396L12.5 17l5.695 4.396A.5.5 0 0 0 19 21v-8.5a.5.5 0 0 0-1 0v7.485l-5.195-4.012a.5.5 0 0 0-.61 0L7 19.985z"></path></svg></a></span></div></div></div><div class="qo l jn"><div class="bm" aria-hidden="false" aria-describedby="postFooterSocialMenu" aria-labelledby="postFooterSocialMenu"><div><div class="bm" aria-hidden="false"><button aria-controls="postFooterSocialMenu" aria-expanded="false" aria-label="Share Post" data-testid="footerSocialShareButton" class="af fk ah ai aj ak al mu an ao ap ex mv mw ml mx"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M15.218 4.931a.4.4 0 0 1-.118.132l.012.006a.45.45 0 0 1-.292.074.5.5 0 0 1-.3-.13l-2.02-2.02v7.07c0 .28-.23.5-.5.5s-.5-.22-.5-.5v-7.04l-2 2a.45.45 0 0 1-.57.04h-.02a.4.4 0 0 1-.16-.3.4.4 0 0 1 .1-.32l2.8-2.8a.5.5 0 0 1 .7 0l2.8 2.79a.42.42 0 0 1 .068.498m-.106.138.008.004v-.01zM16 7.063h1.5a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-11c-1.1 0-2-.9-2-2v-10a2 2 0 0 1 2-2H8a.5.5 0 0 1 .35.15.5.5 0 0 1 .15.35.5.5 0 0 1-.15.35.5.5 0 0 1-.35.15H6.4c-.5 0-.9.4-.9.9v10.2a.9.9 0 0 0 .9.9h11.2c.5 0 .9-.4.9-.9v-10.2c0-.5-.4-.9-.9-.9H16a.5.5 0 0 1 0-1" clip-rule="evenodd"></path></svg></button></div></div></div></div></div></div></div></div></div></footer><div class="rk rl rm rn ro l"><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="rp bh r rq"></div><div class="rr l"><div class="ab rs rt ru jp jo"><div class="rv rw rx ry rz sa sb sc sd se ab cp"><div class="h k"><a href="https://medium.com/androiddevelopers?source=post_page---post_publication_info--a7dcd17480a9--------------------------------" rel="noopener follow"><div class="fj ab"><img alt="Android Developers" class="sf ir is cx" src="https://miro.medium.com/v2/resize:fill:96:96/1*4Tg6pPzer7cIarYaszIKaQ.png" width="48" height="48" loading="lazy"/><div class="sf l is ir fs n fr sg"></div></div></a></div><div class="j i d"><a href="https://medium.com/androiddevelopers?source=post_page---post_publication_info--a7dcd17480a9--------------------------------" rel="noopener follow"><div class="fj ab"><img alt="Android Developers" class="sf si sh cx" src="https://miro.medium.com/v2/resize:fill:128:128/1*4Tg6pPzer7cIarYaszIKaQ.png" width="64" height="64" loading="lazy"/><div class="sf l sh si fs n fr sg"></div></div></a></div><div class="j i d sj jn"><div class="ab"></div></div></div><div class="ab co sk"><div class="sl sm sn so sp l"><a class="af ag ah aj ak al am an ao ap aq ar as at ab q" href="https://medium.com/androiddevelopers?source=post_page---post_publication_info--a7dcd17480a9--------------------------------" rel="noopener follow"><h2 class="pw-author-name bf sr ss st su sv sw sx nx ov ow ob oy oz of pb pc bk"><span class="gn sq">Published in <!-- -->Android Developers</span></h2></a><div class="qr ab iq"><div class="l jn"><span class="pw-follower-count bf b bg z du"><a class="af ag ah ai aj ak al am an ao ap aq ar jg" rel="noopener follow" href="/androiddevelopers/followers?source=post_page---post_publication_info--a7dcd17480a9--------------------------------">51K Followers</a></span></div><div class="bf b bg z du ab jt"><span class="jh l" aria-hidden="true"><span class="bf b bg z du">·</span></span><a class="af ag ah ai aj ak al am an ao ap aq ar jg" rel="noopener follow" href="/androiddevelopers/test-smarter-not-harder-new-testing-strategies-documentation-255973814ae3?source=post_page---post_publication_info--a7dcd17480a9--------------------------------">Last published <!-- -->1 day ago</a></div></div><div class="sy l"><p class="bf b bg z bk"><span class="gn">Articles on modern tools and resources to help you build experiences that people love, faster and easier, across every Android device.</span></p></div></div></div><div class="h k"><div class="ab"></div></div></div></div><div class="ab rs rt ru jp jo"><div class="rv rw rx ry rz sa sb sc sd se ab cp"><div class="h k"><a tabindex="0" rel="noopener follow" href="/@AndroidDev?source=post_page---post_author_info--a7dcd17480a9--------------------------------"><div class="l fj"><img alt="Android Developers" class="l fd by is ir cx" src="https://miro.medium.com/v2/resize:fill:96:96/1*VglQS9HKgUvUuAX36Np5qQ.png" width="48" height="48" loading="lazy"/><div class="fr by l is ir fs n ay sg"></div></div></a></div><div class="j i d"><a tabindex="0" rel="noopener follow" href="/@AndroidDev?source=post_page---post_author_info--a7dcd17480a9--------------------------------"><div class="l fj"><img alt="Android Developers" class="l fd by sh si cx" src="https://miro.medium.com/v2/resize:fill:128:128/1*VglQS9HKgUvUuAX36Np5qQ.png" width="64" height="64" loading="lazy"/><div class="fr by l sh si fs n ay sg"></div></div></a></div><div class="j i d sj jn"><div class="ab"><span><button class="bf b bg z sz qt ta tb tc td te ev ew tf tg th fa fb fc fd bm fe ff">Follow</button></span></div></div></div><div class="ab co sk"><div class="sl sm sn so sp l"><a class="af ag ah aj ak al am an ao ap aq ar as at ab q" rel="noopener follow" href="/@AndroidDev?source=post_page---post_author_info--a7dcd17480a9--------------------------------"><h2 class="pw-author-name bf sr ss st su sv sw sx nx ov ow ob oy oz of pb pc bk"><span class="gn sq">Written by <!-- -->Android Developers</span></h2></a><div class="qr ab iq"><div class="l jn"><span class="pw-follower-count bf b bg z du"><a class="af ag ah ai aj ak al am an ao ap aq ar jg" rel="noopener follow" href="/@AndroidDev/followers?source=post_page---post_author_info--a7dcd17480a9--------------------------------">72K Followers</a></span></div><div class="bf b bg z du ab jt"><span class="jh l" aria-hidden="true"><span class="bf b bg z du">·</span></span><a class="af ag ah ai aj ak al am an ao ap aq ar jg" rel="noopener follow" href="/@AndroidDev/following?source=post_page---post_author_info--a7dcd17480a9--------------------------------">60 Following</a></div></div><div class="sy l"><p class="bf b bg z bk"><span class="gn">News and announcements for developers from the Android team.</span></p></div></div></div><div class="h k"><div class="ab"><span><button class="bf b bg z sz qt ta tb tc td te ev ew tf tg th fa fb fc fd bm fe ff">Follow</button></span></div></div></div></div></div></div><div class="ti tj tk tl tm l"><div class="rp bh r ti tj tn to tp"></div><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="ab q cp"><h2 class="bf sr tq tr oq ts tt ot tu tv tw tx ty tz ua ub uc bk">Responses (<!-- -->2<!-- -->)</h2><div class="ab ud"><div><div class="bm" aria-hidden="false"><a class="ue uf" href="https://policy.medium.com/medium-rules-30e5502c4eb4?source=post_page---post_responses--a7dcd17480a9--------------------------------" rel="noopener follow" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 25 25"><path fill-rule="evenodd" d="M11.987 5.036a.754.754 0 0 1 .914-.01c.972.721 1.767 1.218 2.6 1.543.828.322 1.719.485 2.887.505a.755.755 0 0 1 .741.757c-.018 3.623-.43 6.256-1.449 8.21-1.034 1.984-2.662 3.209-4.966 4.083a.75.75 0 0 1-.537-.003c-2.243-.874-3.858-2.095-4.897-4.074-1.024-1.951-1.457-4.583-1.476-8.216a.755.755 0 0 1 .741-.757c1.195-.02 2.1-.182 2.923-.503.827-.322 1.6-.815 2.519-1.535m.468.903c-.897.69-1.717 1.21-2.623 1.564-.898.35-1.856.527-3.026.565.037 3.45.469 5.817 1.36 7.515.884 1.684 2.25 2.762 4.284 3.571 2.092-.81 3.465-1.89 4.344-3.575.886-1.698 1.299-4.065 1.334-7.512-1.149-.039-2.091-.217-2.99-.567-.906-.353-1.745-.873-2.683-1.561m-.009 9.155a2.672 2.672 0 1 0 0-5.344 2.672 2.672 0 0 0 0 5.344m0 1a3.672 3.672 0 1 0 0-7.344 3.672 3.672 0 0 0 0 7.344m-1.813-3.777.525-.526.916.917 1.623-1.625.526.526-2.149 2.152z" clip-rule="evenodd"></path></svg></a></div></div></div></div><div class="qh l"><button class="bf b bg z bk qt ug uh ui mn mk te ev ew ex uj uk ul fa um un uo up uq fb fc fd bm fe ff">See all responses</button></div></div></div></div><div class="ur us ut uu uv l bx"><div class="h k j"><div class="rp bh uw ux"></div><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="uy ab ll jq"><div class="uz va l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://help.medium.com/hc/en-us?source=post_page-----a7dcd17480a9--------------------------------" rel="noopener follow"><p class="bf b dv z du">Help</p></a></div><div class="uz va l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://medium.statuspage.io/?source=post_page-----a7dcd17480a9--------------------------------" rel="noopener follow"><p class="bf b dv z du">Status</p></a></div><div class="uz va l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" rel="noopener follow" href="/about?autoplay=1&source=post_page-----a7dcd17480a9--------------------------------"><p class="bf b dv z du">About</p></a></div><div class="uz va l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" rel="noopener follow" href="/jobs-at-medium/work-at-medium-959d1a85284e?source=post_page-----a7dcd17480a9--------------------------------"><p class="bf b dv z du">Careers</p></a></div><div class="uz va l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="pressinquiries@medium.com?source=post_page-----a7dcd17480a9--------------------------------" rel="noopener follow"><p class="bf b dv z du">Press</p></a></div><div class="uz va l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://blog.medium.com/?source=post_page-----a7dcd17480a9--------------------------------" rel="noopener follow"><p class="bf b dv z du">Blog</p></a></div><div class="uz va l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://policy.medium.com/medium-privacy-policy-f03bf92035c9?source=post_page-----a7dcd17480a9--------------------------------" rel="noopener follow"><p class="bf b dv z du">Privacy</p></a></div><div class="uz va l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://policy.medium.com/medium-terms-of-service-9db0094a1e0f?source=post_page-----a7dcd17480a9--------------------------------" rel="noopener follow"><p class="bf b dv z du">Terms</p></a></div><div class="uz va l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://speechify.com/medium?source=post_page-----a7dcd17480a9--------------------------------" rel="noopener follow"><p class="bf b dv z du">Text to speech</p></a></div><div class="uz l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" rel="noopener follow" href="/business?source=post_page-----a7dcd17480a9--------------------------------"><p class="bf b dv z du">Teams</p></a></div></div></div></div></div></div></div></div></div></div><script>window.__BUILD_ID__="main-20241122-185319-7bcdc08639"</script><script>window.__GRAPHQL_URI__ = "https://medium.com/_/graphql"</script><script>window.__PRELOADED_STATE__ = {"algolia":{"queries":{}},"cache":{"experimentGroupSet":true,"reason":"","group":"enabled","tags":["group-edgeCachePosts","post-a7dcd17480a9","user-e1f26db83092","collection-95b274b437c2"],"serverVariantState":"44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a","middlewareEnabled":true,"cacheStatus":"DYNAMIC","shouldUseCache":true,"vary":[],"lohpSummerUpsellEnabled":false,"publicationHierarchyEnabledWeb":false,"postBottomResponsesEnabled":false},"client":{"hydrated":false,"isUs":false,"isNativeMedium":false,"isSafariMobile":false,"isSafari":false,"isFirefox":false,"routingEntity":{"type":"DEFAULT","explicit":false},"viewerIsBot":false},"debug":{"requestId":"82ed6046-50b7-43de-bbbf-c33ce8d90143","hybridDevServices":[],"originalSpanCarrier":{"traceparent":"00-1494c676d33c0b087a14600dfa9fae10-4e42b1fbe522d1f4-01"}},"multiVote":{"clapsPerPost":{}},"navigation":{"branch":{"show":null,"hasRendered":null,"blockedByCTA":false},"hideGoogleOneTap":false,"hasRenderedAlternateUserBanner":null,"currentLocation":"https:\u002F\u002Fmedium.com\u002Fandroiddevelopers\u002F5-years-of-kotlin-on-android-the-extra-bits-a7dcd17480a9","host":"medium.com","hostname":"medium.com","referrer":"","hasSetReferrer":false,"susiModal":{"step":null,"operation":"register"},"postRead":false,"partnerProgram":{"selectedCountryCode":null},"queryString":"","currentHash":""},"config":{"nodeEnv":"production","version":"main-20241122-185319-7bcdc08639","target":"production","productName":"Medium","publicUrl":"https:\u002F\u002Fcdn-client.medium.com\u002Flite","authDomain":"medium.com","authGoogleClientId":"216296035834-k1k6qe060s2tp2a2jam4ljdcms00sttg.apps.googleusercontent.com","favicon":"production","glyphUrl":"https:\u002F\u002Fglyph.medium.com","branchKey":"key_live_ofxXr2qTrrU9NqURK8ZwEhknBxiI6KBm","algolia":{"appId":"MQ57UUUQZ2","apiKeySearch":"394474ced050e3911ae2249ecc774921","indexPrefix":"medium_","host":"-dsn.algolia.net"},"recaptchaKey":"6Lfc37IUAAAAAKGGtC6rLS13R1Hrw_BqADfS1LRk","recaptcha3Key":"6Lf8R9wUAAAAABMI_85Wb8melS7Zj6ziuf99Yot5","recaptchaEnterpriseKeyId":"6Le-uGgpAAAAAPprRaokM8AKthQ9KNGdoxaGUvVp","datadog":{"applicationId":"6702d87d-a7e0-42fe-bbcb-95b469547ea0","clientToken":"pub853ea8d17ad6821d9f8f11861d23dfed","rumToken":"pubf9cc52896502b9413b68ba36fc0c7162","context":{"deployment":{"target":"production","tag":"main-20241122-185319-7bcdc08639","commit":"7bcdc08639c179dc5172558201a3fd3abc1b5db6"}},"datacenter":"us"},"googleAnalyticsCode":"G-7JY7T788PK","googlePay":{"apiVersion":"2","apiVersionMinor":"0","merchantId":"BCR2DN6TV7EMTGBM","merchantName":"Medium","instanceMerchantId":"13685562959212738550"},"applePay":{"version":3},"signInWallCustomDomainCollectionIds":["3a8144eabfe3","336d898217ee","61061eb0c96b","138adf9c44c","819cc2aaeee0"],"mediumMastodonDomainName":"me.dm","mediumOwnedAndOperatedCollectionIds":["8a9336e5bb4","b7e45b22fec3","193b68bd4fba","8d6b8a439e32","54c98c43354d","3f6ecf56618","d944778ce714","92d2092dc598","ae2a65f35510","1285ba81cada","544c7006046e","fc8964313712","40187e704f1c","88d9857e584e","7b6769f2748b","bcc38c8f6edf","cef6983b292","cb8577c9149e","444d13b52878","713d7dbc99b0","ef8e90590e66","191186aaafa0","55760f21cdc5","9dc80918cc93","bdc4052bbdba","8ccfed20cbb2"],"tierOneDomains":["medium.com","thebolditalic.com","arcdigital.media","towardsdatascience.com","uxdesign.cc","codeburst.io","psiloveyou.xyz","writingcooperative.com","entrepreneurshandbook.co","prototypr.io","betterhumans.coach.me","theascent.pub"],"topicsToFollow":["d61cf867d93f","8a146bc21b28","1eca0103fff3","4d562ee63426","aef1078a3ef5","e15e46793f8d","6158eb913466","55f1c20aba7a","3d18b94f6858","4861fee224fd","63c6f1f93ee","1d98b3a9a871","decb52b64abf","ae5d4995e225","830cded25262"],"topicToTagMappings":{"accessibility":"accessibility","addiction":"addiction","android-development":"android-development","art":"art","artificial-intelligence":"artificial-intelligence","astrology":"astrology","basic-income":"basic-income","beauty":"beauty","biotech":"biotech","blockchain":"blockchain","books":"books","business":"business","cannabis":"cannabis","cities":"cities","climate-change":"climate-change","comics":"comics","coronavirus":"coronavirus","creativity":"creativity","cryptocurrency":"cryptocurrency","culture":"culture","cybersecurity":"cybersecurity","data-science":"data-science","design":"design","digital-life":"digital-life","disability":"disability","economy":"economy","education":"education","equality":"equality","family":"family","feminism":"feminism","fiction":"fiction","film":"film","fitness":"fitness","food":"food","freelancing":"freelancing","future":"future","gadgets":"gadgets","gaming":"gaming","gun-control":"gun-control","health":"health","history":"history","humor":"humor","immigration":"immigration","ios-development":"ios-development","javascript":"javascript","justice":"justice","language":"language","leadership":"leadership","lgbtqia":"lgbtqia","lifestyle":"lifestyle","machine-learning":"machine-learning","makers":"makers","marketing":"marketing","math":"math","media":"media","mental-health":"mental-health","mindfulness":"mindfulness","money":"money","music":"music","neuroscience":"neuroscience","nonfiction":"nonfiction","outdoors":"outdoors","parenting":"parenting","pets":"pets","philosophy":"philosophy","photography":"photography","podcasts":"podcast","poetry":"poetry","politics":"politics","privacy":"privacy","product-management":"product-management","productivity":"productivity","programming":"programming","psychedelics":"psychedelics","psychology":"psychology","race":"race","relationships":"relationships","religion":"religion","remote-work":"remote-work","san-francisco":"san-francisco","science":"science","self":"self","self-driving-cars":"self-driving-cars","sexuality":"sexuality","social-media":"social-media","society":"society","software-engineering":"software-engineering","space":"space","spirituality":"spirituality","sports":"sports","startups":"startup","style":"style","technology":"technology","transportation":"transportation","travel":"travel","true-crime":"true-crime","tv":"tv","ux":"ux","venture-capital":"venture-capital","visual-design":"visual-design","work":"work","world":"world","writing":"writing"},"defaultImages":{"avatar":{"imageId":"1*dmbNkD5D-u45r44go_cf0g.png","height":150,"width":150},"orgLogo":{"imageId":"7*V1_7XP4snlmqrc_0Njontw.png","height":110,"width":500},"postLogo":{"imageId":"bd978bb536350a710e8efb012513429cabdc4c28700604261aeda246d0f980b7","height":810,"width":1440},"postPreviewImage":{"imageId":"1*hn4v1tCaJy7cWMyb0bpNpQ.png","height":386,"width":579}},"collectionStructuredData":{"8d6b8a439e32":{"name":"Elemental","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fcdn-images-1.medium.com\u002Fmax\u002F980\u002F1*9ygdqoKprhwuTVKUM0DLPA@2x.png","width":980,"height":159}}},"3f6ecf56618":{"name":"Forge","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fcdn-images-1.medium.com\u002Fmax\u002F596\u002F1*uULpIlImcO5TDuBZ6lm7Lg@2x.png","width":596,"height":183}}},"ae2a65f35510":{"name":"GEN","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F264\u002F1*RdVZMdvfV3YiZTw6mX7yWA.png","width":264,"height":140}}},"88d9857e584e":{"name":"LEVEL","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F540\u002F1*JqYMhNX6KNNb2UlqGqO2WQ.png","width":540,"height":108}}},"7b6769f2748b":{"name":"Marker","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fcdn-images-1.medium.com\u002Fmax\u002F383\u002F1*haCUs0wF6TgOOvfoY-jEoQ@2x.png","width":383,"height":92}}},"444d13b52878":{"name":"OneZero","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F540\u002F1*cw32fIqCbRWzwJaoQw6BUg.png","width":540,"height":123}}},"8ccfed20cbb2":{"name":"Zora","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F540\u002F1*tZUQqRcCCZDXjjiZ4bDvgQ.png","width":540,"height":106}}}},"embeddedPostIds":{"coronavirus":"cd3010f9d81f"},"sharedCdcMessaging":{"COVID_APPLICABLE_TAG_SLUGS":[],"COVID_APPLICABLE_TOPIC_NAMES":[],"COVID_APPLICABLE_TOPIC_NAMES_FOR_TOPIC_PAGE":[],"COVID_MESSAGES":{"tierA":{"text":"For more information on the novel coronavirus and Covid-19, visit cdc.gov.","markups":[{"start":66,"end":73,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]},"tierB":{"text":"Anyone can publish on Medium per our Policies, but we don’t fact-check every story. For more info about the coronavirus, see cdc.gov.","markups":[{"start":37,"end":45,"href":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Fcategories\u002F201931128-Policies-Safety"},{"start":125,"end":132,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]},"paywall":{"text":"This article has been made free for everyone, thanks to Medium Members. For more information on the novel coronavirus and Covid-19, visit cdc.gov.","markups":[{"start":56,"end":70,"href":"https:\u002F\u002Fmedium.com\u002Fmembership"},{"start":138,"end":145,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]},"unbound":{"text":"This article is free for everyone, thanks to Medium Members. For more information on the novel coronavirus and Covid-19, visit cdc.gov.","markups":[{"start":45,"end":59,"href":"https:\u002F\u002Fmedium.com\u002Fmembership"},{"start":127,"end":134,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]}},"COVID_BANNER_POST_ID_OVERRIDE_WHITELIST":["3b31a67bff4a"]},"sharedVoteMessaging":{"TAGS":["politics","election-2020","government","us-politics","election","2020-presidential-race","trump","donald-trump","democrats","republicans","congress","republican-party","democratic-party","biden","joe-biden","maga"],"TOPICS":["politics","election"],"MESSAGE":{"text":"Find out more about the U.S. election results here.","markups":[{"start":46,"end":50,"href":"https:\u002F\u002Fcookpolitical.com\u002F2020-national-popular-vote-tracker"}]},"EXCLUDE_POSTS":["397ef29e3ca5"]},"embedPostRules":[],"recircOptions":{"v1":{"limit":3},"v2":{"limit":8}},"braintreeClientKey":"production_zjkj96jm_m56f8fqpf7ngnrd4","braintree":{"enabled":true,"merchantId":"m56f8fqpf7ngnrd4","merchantAccountId":{"usd":"AMediumCorporation_instant","eur":"amediumcorporation_EUR","cad":"amediumcorporation_CAD"},"publicKey":"ds2nn34bg2z7j5gd","braintreeEnvironment":"production","dashboardUrl":"https:\u002F\u002Fwww.braintreegateway.com\u002Fmerchants","gracePeriodDurationInDays":14,"mediumMembershipPlanId":{"monthly":"ce105f8c57a3","monthlyV2":"e8a5e126-792b-4ee6-8fba-d574c1b02fc5","monthlyWithTrial":"d5ee3dbe3db8","monthlyPremium":"fa741a9b47a2","yearly":"a40ad4a43185","yearlyV2":"3815d7d6-b8ca-4224-9b8c-182f9047866e","yearlyStaff":"d74fb811198a","yearlyWithTrial":"b3bc7350e5c7","yearlyPremium":"e21bd2c12166","monthlyOneYearFree":"e6c0637a-2bad-4171-ab4f-3c268633d83c","monthly25PercentOffFirstYear":"235ecc62-0cdb-49ae-9378-726cd21c504b","monthly20PercentOffFirstYear":"ba518864-9c13-4a99-91ca-411bf0cac756","monthly15PercentOffFirstYear":"594c029b-9f89-43d5-88f8-8173af4e070e","monthly10PercentOffFirstYear":"c6c7bc9a-40f2-4b51-8126-e28511d5bdb0","monthlyForStudents":"629ebe51-da7d-41fd-8293-34cd2f2030a8","yearlyOneYearFree":"78ba7be9-0d9f-4ece-aa3e-b54b826f2bf1","yearly25PercentOffFirstYear":"2dbb010d-bb8f-4eeb-ad5c-a08509f42d34","yearly20PercentOffFirstYear":"47565488-435b-47f8-bf93-40d5fbe0ebc8","yearly15PercentOffFirstYear":"8259809b-0881-47d9-acf7-6c001c7f720f","yearly10PercentOffFirstYear":"9dd694fb-96e1-472c-8d9e-3c868d5c1506","yearlyForStudents":"e29345ef-ab1c-4234-95c5-70e50fe6bc23","monthlyCad":"p52orjkaceei","yearlyCad":"h4q9g2up9ktt"},"braintreeDiscountId":{"oneMonthFree":"MONTHS_FREE_01","threeMonthsFree":"MONTHS_FREE_03","sixMonthsFree":"MONTHS_FREE_06","fiftyPercentOffOneYear":"FIFTY_PERCENT_OFF_ONE_YEAR"},"3DSecureVersion":"2","defaultCurrency":"usd","providerPlanIdCurrency":{"4ycw":"usd","rz3b":"usd","3kqm":"usd","jzw6":"usd","c2q2":"usd","nnsw":"usd","q8qw":"usd","d9y6":"usd","fx7w":"cad","nwf2":"cad"}},"paypalClientId":"AXj1G4fotC2GE8KzWX9mSxCH1wmPE3nJglf4Z2ig_amnhvlMVX87otaq58niAg9iuLktVNF_1WCMnN7v","paypal":{"host":"https:\u002F\u002Fapi.paypal.com:443","clientMode":"production","serverMode":"live","webhookId":"4G466076A0294510S","monthlyPlan":{"planId":"P-9WR0658853113943TMU5FDQA","name":"Medium Membership (Monthly) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"yearlyPlan":{"planId":"P-7N8963881P8875835MU5JOPQ","name":"Medium Membership (Annual) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"oneYearGift":{"name":"Medium Membership (1 Year, Digital Gift Code)","description":"Unlimited access to the best and brightest stories on Medium. Gift codes can be redeemed at medium.com\u002Fredeem.","price":"50.00","currency":"USD","sku":"membership-gift-1-yr"},"oldMonthlyPlan":{"planId":"P-96U02458LM656772MJZUVH2Y","name":"Medium Membership (Monthly)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"oldYearlyPlan":{"planId":"P-59P80963JF186412JJZU3SMI","name":"Medium Membership (Annual)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"monthlyPlanWithTrial":{"planId":"P-66C21969LR178604GJPVKUKY","name":"Medium Membership (Monthly) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"yearlyPlanWithTrial":{"planId":"P-6XW32684EX226940VKCT2MFA","name":"Medium Membership (Annual) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"oldMonthlyPlanNoSetupFee":{"planId":"P-4N046520HR188054PCJC7LJI","name":"Medium Membership (Monthly)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"oldYearlyPlanNoSetupFee":{"planId":"P-7A4913502Y5181304CJEJMXQ","name":"Medium Membership (Annual)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"sdkUrl":"https:\u002F\u002Fwww.paypal.com\u002Fsdk\u002Fjs"},"stripePublishableKey":"pk_live_7FReX44VnNIInZwrIIx6ghjl","log":{"json":true,"level":"info"},"imageUploadMaxSizeMb":25,"staffPicks":{"title":"Staff Picks","catalogId":"c7bc6e1ee00f"}},"session":{"xsrf":""}}</script><script>window.__APOLLO_STATE__ = {"ROOT_QUERY":{"__typename":"Query","viewer":null,"collectionByDomainOrSlug({\"domainOrSlug\":\"androiddevelopers\"})":{"__ref":"Collection:95b274b437c2"},"postResult({\"id\":\"a7dcd17480a9\"})":{"__ref":"Post:a7dcd17480a9"}},"ImageMetadata:":{"__typename":"ImageMetadata","id":""},"Collection:95b274b437c2":{"__typename":"Collection","id":"95b274b437c2","favicon":{"__ref":"ImageMetadata:"},"customStyleSheet":null,"colorPalette":{"__typename":"ColorPalette","highlightSpectrum":{"__typename":"ColorSpectrum","backgroundColor":"#FFFFFFFF","colorPoints":[{"__typename":"ColorPoint","color":"#FFF4F2F3","point":0},{"__typename":"ColorPoint","color":"#FFF2F0F1","point":0.1},{"__typename":"ColorPoint","color":"#FFF0EEEF","point":0.2},{"__typename":"ColorPoint","color":"#FFEEECEE","point":0.3},{"__typename":"ColorPoint","color":"#FFECEAEC","point":0.4},{"__typename":"ColorPoint","color":"#FFEAE8EA","point":0.5},{"__typename":"ColorPoint","color":"#FFE8E7E9","point":0.6},{"__typename":"ColorPoint","color":"#FFE6E5E7","point":0.7},{"__typename":"ColorPoint","color":"#FFE4E3E5","point":0.8},{"__typename":"ColorPoint","color":"#FFE2E1E4","point":0.9},{"__typename":"ColorPoint","color":"#FFE0DFE2","point":1}]},"defaultBackgroundSpectrum":{"__typename":"ColorSpectrum","backgroundColor":"#FFFFFFFF","colorPoints":[{"__typename":"ColorPoint","color":"#FF848488","point":0},{"__typename":"ColorPoint","color":"#FF7B7B7E","point":0.1},{"__typename":"ColorPoint","color":"#FF717275","point":0.2},{"__typename":"ColorPoint","color":"#FF68686B","point":0.3},{"__typename":"ColorPoint","color":"#FF5E5E60","point":0.4},{"__typename":"ColorPoint","color":"#FF545456","point":0.5},{"__typename":"ColorPoint","color":"#FF4A494B","point":0.6},{"__typename":"ColorPoint","color":"#FF3F3E40","point":0.7},{"__typename":"ColorPoint","color":"#FF333334","point":0.8},{"__typename":"ColorPoint","color":"#FF272728","point":0.9},{"__typename":"ColorPoint","color":"#FF1A1A1A","point":1}]},"tintBackgroundSpectrum":{"__typename":"ColorSpectrum","backgroundColor":"#FF202124","colorPoints":[{"__typename":"ColorPoint","color":"#FF202124","point":0},{"__typename":"ColorPoint","color":"#FF3D3E41","point":0.1},{"__typename":"ColorPoint","color":"#FF58585B","point":0.2},{"__typename":"ColorPoint","color":"#FF707073","point":0.3},{"__typename":"ColorPoint","color":"#FF878689","point":0.4},{"__typename":"ColorPoint","color":"#FF9D9C9E","point":0.5},{"__typename":"ColorPoint","color":"#FFB2B1B2","point":0.6},{"__typename":"ColorPoint","color":"#FFC6C5C6","point":0.7},{"__typename":"ColorPoint","color":"#FFDAD8DA","point":0.8},{"__typename":"ColorPoint","color":"#FFEEEBEC","point":0.9},{"__typename":"ColorPoint","color":"#FFFFFEFF","point":1}]}},"domain":null,"slug":"androiddevelopers","googleAnalyticsId":null,"editors":[{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:e1f26db83092"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:2e0fc9a4a8c2"}},{"__typename":"CollectionMastheadUserItem","user":{"__ref":"User:d5885adb1ddf"}}],"name":"Android Developers","avatar":{"__ref":"ImageMetadata:1*4Tg6pPzer7cIarYaszIKaQ.png"},"description":"Articles on modern tools and resources to help you build experiences that people love, faster and easier, across every Android device.","subscriberCount":51942,"latestPostsConnection({\"paging\":{\"limit\":1}})":{"__typename":"PostConnection","posts":[{"__ref":"Post:255973814ae3"}]},"viewerEdge":{"__ref":"CollectionViewerEdge:collectionId:95b274b437c2-viewerId:lo_2a9efe714a40"},"twitterUsername":"androiddev","facebookPageId":null,"logo":{"__ref":"ImageMetadata:1*5pMw_nx55x_66tk77kutPQ.png"}},"User:e1f26db83092":{"__typename":"User","id":"e1f26db83092","name":"Android Developers","username":"AndroidDev","newsletterV3":{"__ref":"NewsletterV3:271a39694cd7"},"linkedAccounts":{"__ref":"LinkedAccounts:e1f26db83092"},"isSuspended":false,"imageId":"1*VglQS9HKgUvUuAX36Np5qQ.png","mediumMemberAt":0,"verifications":{"__typename":"VerifiedInfo","isBookAuthor":false},"socialStats":{"__typename":"SocialStats","followerCount":72713,"followingCount":58,"collectionFollowingCount":2},"customDomainState":null,"hasSubdomain":false,"bio":"News and announcements for developers from the Android team.","isPartnerProgramEnrolled":false,"viewerEdge":{"__ref":"UserViewerEdge:userId:e1f26db83092-viewerId:lo_2a9efe714a40"},"viewerIsUser":false,"postSubscribeMembershipUpsellShownAt":0,"membership":null,"allowNotes":true,"twitterScreenName":"AndroidDev"},"User:2e0fc9a4a8c2":{"__typename":"User","id":"2e0fc9a4a8c2"},"User:d5885adb1ddf":{"__typename":"User","id":"d5885adb1ddf"},"ImageMetadata:1*4Tg6pPzer7cIarYaszIKaQ.png":{"__typename":"ImageMetadata","id":"1*4Tg6pPzer7cIarYaszIKaQ.png"},"User:e0a4c9469bb5":{"__typename":"User","id":"e0a4c9469bb5","customDomainState":null,"hasSubdomain":false,"username":"JoseAlcerreca"},"Post:255973814ae3":{"__typename":"Post","id":"255973814ae3","firstPublishedAt":1732208584164,"creator":{"__ref":"User:e0a4c9469bb5"},"collection":{"__ref":"Collection:95b274b437c2"},"isSeries":false,"mediumUrl":"https:\u002F\u002Fmedium.com\u002Fandroiddevelopers\u002Ftest-smarter-not-harder-new-testing-strategies-documentation-255973814ae3","sequence":null,"uniqueSlug":"test-smarter-not-harder-new-testing-strategies-documentation-255973814ae3"},"LinkedAccounts:e1f26db83092":{"__typename":"LinkedAccounts","mastodon":null,"id":"e1f26db83092"},"UserViewerEdge:userId:e1f26db83092-viewerId:lo_2a9efe714a40":{"__typename":"UserViewerEdge","id":"userId:e1f26db83092-viewerId:lo_2a9efe714a40","isFollowing":false,"isUser":false,"isMuting":false},"NewsletterV3:271a39694cd7":{"__typename":"NewsletterV3","id":"271a39694cd7","type":"NEWSLETTER_TYPE_AUTHOR","slug":"e1f26db83092","name":"e1f26db83092","collection":null,"user":{"__ref":"User:e1f26db83092"}},"Topic:64756708407c":{"__typename":"Topic","slug":"android-development","id":"64756708407c","name":"Android Dev"},"ImageMetadata:1*CDq4uk7-5PeQkTQpgug8Rw.png":{"__typename":"ImageMetadata","id":"1*CDq4uk7-5PeQkTQpgug8Rw.png","originalHeight":601,"originalWidth":1999,"focusPercentX":null,"focusPercentY":null,"alt":null},"Paragraph:5dc4ca640d81_0":{"__typename":"Paragraph","id":"5dc4ca640d81_0","name":"a1f8","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"__ref":"ImageMetadata:1*CDq4uk7-5PeQkTQpgug8Rw.png"},"text":"","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_1":{"__typename":"Paragraph","id":"5dc4ca640d81_1","name":"1dd7","type":"H3","href":null,"layout":null,"metadata":null,"text":"5 years of Kotlin on Android — the extended interviews","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"EM","start":0,"end":54,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_2":{"__typename":"Paragraph","id":"5dc4ca640d81_2","name":"f192","type":"P","href":null,"layout":null,"metadata":null,"text":"We’ve published a celebration post on our blog to recognize the 5 year anniversary of official support for Kotlin on Android.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":16,"end":34,"href":"https:\u002F\u002Fandroid-developers.googleblog.com\u002F2022\u002F08\u002Fcelebrating-5-years-of-kotlin-on-android.html","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_3":{"__typename":"Paragraph","id":"5dc4ca640d81_3","name":"ea9b","type":"P","href":null,"layout":null,"metadata":null,"text":"In the making of that post, I had the chance to interview some great people who were involved in the Kotlin story, and the blog post could only include small bits of what they had to say on the topic. Hence, this post includes some interview material that would otherwise be left on the cutting room floor.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_4":{"__typename":"Paragraph","id":"5dc4ca640d81_4","name":"6b66","type":"H4","href":null,"layout":null,"metadata":null,"text":"Jeffrey van Gogh","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_5":{"__typename":"Paragraph","id":"5dc4ca640d81_5","name":"b59b","type":"P","href":null,"layout":null,"metadata":null,"text":"Jeffrey leads a team of engineers at Google working on Kotlin tooling, and he was involved in the discussions around the language from the very early days. He’s also a member of the Kotlin Foundation, a joint effort between Google and JetBrains which safeguards the evolution of the language.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":182,"end":199,"href":"https:\u002F\u002Fkotlinfoundation.org\u002F","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_6":{"__typename":"Paragraph","id":"5dc4ca640d81_6","name":"b525","type":"P","href":null,"layout":null,"metadata":null,"text":"He recalled this about Google’s initial encounters of Kotlin:","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_7":{"__typename":"Paragraph","id":"5dc4ca640d81_7","name":"7e15","type":"BQ","href":null,"layout":null,"metadata":null,"text":"We started looking at Kotlin about 6.5 years ago for various reasons. Of course we’re all language geeks who want to learn new languages. We also heard from our customers that they’re starting to use Kotlin even without Google officially endorsing it. We played with it for quite a bit and we were like “Hey, this is actually really neat!”","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_8":{"__typename":"Paragraph","id":"5dc4ca640d81_8","name":"7b20","type":"P","href":null,"layout":null,"metadata":null,"text":"He also expanded on the cooperation between the two companies.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_9":{"__typename":"Paragraph","id":"5dc4ca640d81_9","name":"15d9","type":"BQ","href":null,"layout":null,"metadata":null,"text":"A few months before I\u002FO 2017 we started talking to the folks at JetBrains about making Kotlin on Android a reality. We wanted to make sure that if we make this a recommended language for Android, it’s supported well. At the same time, JetBrains doesn’t want to see Kotlin becoming only an Android language.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_10":{"__typename":"Paragraph","id":"5dc4ca640d81_10","name":"ca48","type":"BQ","href":null,"layout":null,"metadata":null,"text":"Many other languages have a foundation, and we thought that was a good path for us to take as well. We had to figure out what we wanted to put in the Foundation. We tried to protect the things that we really care about protecting, like making sure that the language ages well. But we have a single person in charge of the language design, appointed by the Foundation, so that we are not designing every language feature by committee.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_11":{"__typename":"Paragraph","id":"5dc4ca640d81_11","name":"f81e","type":"BQ","href":null,"layout":null,"metadata":null,"text":"I’m on the Kotlin Language Committee where we ensure that every time we have to make a breaking change or deprecate something, we do it with extreme care. We want the language to move forward but also to age well. We meet with JetBrains every couple months, look at the issues, and have deep technical discussions.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_12":{"__typename":"Paragraph","id":"5dc4ca640d81_12","name":"345c","type":"PQ","href":null,"layout":null,"metadata":null,"text":"“The language is still growing and making great progress, adding new features at a good pace, so I think we’re succeeding.”","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_13":{"__typename":"Paragraph","id":"5dc4ca640d81_13","name":"362f","type":"H4","href":null,"layout":null,"metadata":null,"text":"Egor Tolstoy","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_14":{"__typename":"Paragraph","id":"5dc4ca640d81_14","name":"9996","type":"P","href":null,"layout":null,"metadata":null,"text":"Egor is the Kotlin Product Lead at JetBrains, and he reflected on the collaboration efforts from JetBrains’ side.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_15":{"__typename":"Paragraph","id":"5dc4ca640d81_15","name":"76e6","type":"BQ","href":null,"layout":null,"metadata":null,"text":"Development is not the only field of JetBrains and Google collaboration. We work together on product management by sharing research insights and ideas on making the developer experience great. Another crucial joint effort is the Kotlin Foundation, which preserves the Kotlin trademark and works on fostering the growth of Kotlin ecosystem maturity and richness.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_16":{"__typename":"Paragraph","id":"5dc4ca640d81_16","name":"cb26","type":"P","href":null,"layout":null,"metadata":null,"text":"He also noted that JetBrains needed to adjust their ways of working to properly support Android developers using Kotlin.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_17":{"__typename":"Paragraph","id":"5dc4ca640d81_17","name":"00f8","type":"BQ","href":null,"layout":null,"metadata":null,"text":"One of the key principles of the JetBrains’ engineering culture is dogfooding. We use our tools daily and test all the features ourselves. When something works great for our purpose, it usually works great for other people. But we are not mobile developers and don’t usually write Android apps. We had to learn how to gather feedback differently — by listening to the community, conducting product research, and working closely with domain experts from Google.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_18":{"__typename":"Paragraph","id":"5dc4ca640d81_18","name":"2d82","type":"H4","href":null,"layout":null,"metadata":null,"text":"Florina Muntenescu","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_19":{"__typename":"Paragraph","id":"5dc4ca640d81_19","name":"b095","type":"P","href":null,"layout":null,"metadata":null,"text":"I spoke to Florina about Jetpack Compose, and she noted the following about its use of Kotlin and the future of UI on Android:","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_20":{"__typename":"Paragraph","id":"5dc4ca640d81_20","name":"1149","type":"BQ","href":null,"layout":null,"metadata":null,"text":"When we decided to start with Compose, we knew that Kotlin was the language to use, not only as the language in which Compose is written, but also as the only language in which it can be used. We made this long-term bet, even if at that time not all developers were using Kotlin. We trusted that Kotlin adoption would grow with time, and therefore Compose wouldn’t have this problem.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_21":{"__typename":"Paragraph","id":"5dc4ca640d81_21","name":"b8e8","type":"BQ","href":null,"layout":null,"metadata":null,"text":"We’re not Compose-first yet, but Compose is the future of UI development on Android. Right now, for developers that are starting to learn Android, we’re already recommending the Android Basics with Compose course, rather than the Views one.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":178,"end":212,"href":"https:\u002F\u002Fdeveloper.android.com\u002Fcourses\u002Fandroid-basics-compose\u002Fcourse","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_22":{"__typename":"Paragraph","id":"5dc4ca640d81_22","name":"483f","type":"PQ","href":null,"layout":null,"metadata":null,"text":"“We’ve been telling developers to move to Kotlin for years. Kotlin is here to stay, and Compose is our bet for the future.”","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_23":{"__typename":"Paragraph","id":"5dc4ca640d81_23","name":"d6a2","type":"P","href":null,"layout":null,"metadata":null,"text":"She also described how and why Kotlin makes Compose so great to work with.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_24":{"__typename":"Paragraph","id":"5dc4ca640d81_24","name":"a232","type":"BQ","href":null,"layout":null,"metadata":null,"text":"What makes Compose really different from the View system is that it’s all based on functions. Functions are a first-class citizen in Kotlin, and composable functions are the core of Compose. This means that composables can easily be reused throughout your application, without having to be tied to a specific class, Activity or Fragment.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_25":{"__typename":"Paragraph","id":"5dc4ca640d81_25","name":"51c8","type":"BQ","href":null,"layout":null,"metadata":null,"text":"Coroutines are used to do asynchronous work in Compose both under the hood and in the APIs that we’re exposing.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":0,"end":10,"href":"https:\u002F\u002Fdeveloper.android.com\u002Fjetpack\u002Fcompose\u002Fkotlin#coroutines","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_26":{"__typename":"Paragraph","id":"5dc4ca640d81_26","name":"e683","type":"BQ","href":null,"layout":null,"metadata":null,"text":"You no longer have to have that overhead of switching between Kotlin and XML. Even when you think about large screens, we no longer need to have that switch to XML. With window size classes, you can easily build all of your UI in Kotlin","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":170,"end":189,"href":"https:\u002F\u002Fdeveloper.android.com\u002Fjetpack\u002Fcompose\u002Flayouts\u002Fadaptive#explicit-layout-changes","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_27":{"__typename":"Paragraph","id":"5dc4ca640d81_27","name":"82bd","type":"H4","href":null,"layout":null,"metadata":null,"text":"Yigit Boyar","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_28":{"__typename":"Paragraph","id":"5dc4ca640d81_28","name":"ba0d","type":"P","href":null,"layout":null,"metadata":null,"text":"The next Googler I spoke to is Yigit, who’s been all for Kotlin from the start.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_29":{"__typename":"Paragraph","id":"5dc4ca640d81_29","name":"2f0b","type":"BQ","href":null,"layout":null,"metadata":null,"text":"I was a huge proponent of Kotlin for a long time, from the very early days. I started writing Kotlin very early. I believe I have the first commit with Kotlin in AOSP from 2014.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":134,"end":166,"href":"https:\u002F\u002Fandroid.googlesource.com\u002Fplatform\u002Fframeworks\u002Fdata-binding\u002F+\u002F085724fd84795ae1631747443c43f77c08e11a28","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_30":{"__typename":"Paragraph","id":"5dc4ca640d81_30","name":"f6c1","type":"BQ","href":null,"layout":null,"metadata":null,"text":"When we started databinding, I initially wanted to write the annotation processor logic in Kotlin, but that was a “no”. But then I pitched that we could use it as a templating engine, and that’s how we started using Kotlin in a very limited fashion.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_31":{"__typename":"Paragraph","id":"5dc4ca640d81_31","name":"ef3b","type":"PQ","href":null,"layout":null,"metadata":null,"text":"“A bunch of people knew about Kotlin. We talked about it a lot.”","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"EM","start":0,"end":64,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_32":{"__typename":"Paragraph","id":"5dc4ca640d81_32","name":"ab68","type":"P","href":null,"layout":null,"metadata":null,"text":"Slowly but surely, he started working Kotlin into Jetpack libraries as well.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_33":{"__typename":"Paragraph","id":"5dc4ca640d81_33","name":"50e2","type":"BQ","href":null,"layout":null,"metadata":null,"text":"When I started working on Architecture Components, we were able to write the annotation processor of Room in Kotlin, as we don’t ship any of that on the device. The year we shipped Architecture Components was also the same year that we announced Kotlin support.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_34":{"__typename":"Paragraph","id":"5dc4ca640d81_34","name":"fd5c","type":"BQ","href":null,"layout":null,"metadata":null,"text":"Google announced Kotlin-first Android development in 2019, but until about March 2020 we weren’t able to use Kotlin in our core libraries. Fast forward to today, now if you want to start a Jetpack Library, you are writing it in Kotlin unless you have a very, very, very good reason not to do that.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_35":{"__typename":"Paragraph","id":"5dc4ca640d81_35","name":"5c6e","type":"P","href":null,"layout":null,"metadata":null,"text":"We also touched on the problems of having too many concurrency solutions in Java, and migrating libraries from Java to Kotlin.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_36":{"__typename":"Paragraph","id":"5dc4ca640d81_36","name":"41ac","type":"BQ","href":null,"layout":null,"metadata":null,"text":"DataStore is a good example where everything is Kotlin and coroutines. We still have some wrappers for RxJava and Guava to make it usable from Java, but it’s harder to use DataStore without using Kotlin.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":0,"end":9,"href":"https:\u002F\u002Fdeveloper.android.com\u002Ftopic\u002Flibraries\u002Farchitecture\u002Fdatastore","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_37":{"__typename":"Paragraph","id":"5dc4ca640d81_37","name":"f4ad","type":"BQ","href":null,"layout":null,"metadata":null,"text":"In Java you have to use one of the reactive frameworks, but there isn’t a standard one that everyone uses. So what do you do, which one do you support? It’s always been a problem. But we are good today, as everything is in Kotlin. We have coroutines as the recommended concurrency solution, that makes it much easier going forward.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_38":{"__typename":"Paragraph","id":"5dc4ca640d81_38","name":"6c17","type":"BQ","href":null,"layout":null,"metadata":null,"text":"Now we are actively rewriting libraries in Kotlin like we did with Room. We still look for a good reason to rewrite an existing library in Kotlin, and we also keep in mind the binary compatibility rules. The last thing we want is to break people just to convert the language from Java to Kotlin.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_39":{"__typename":"Paragraph","id":"5dc4ca640d81_39","name":"ad5c","type":"P","href":null,"layout":null,"metadata":null,"text":"Finally, Yigit emphasized that the language has much more to offer than just Android development.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_40":{"__typename":"Paragraph","id":"5dc4ca640d81_40","name":"5e16","type":"BQ","href":null,"layout":null,"metadata":null,"text":"Even though we are very focused on the Android side, we are really trying to make sure Kotlin is adopted on other platforms, too. For example, Google Cloud has Kotlin support now, which was a huge effort at the time.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_41":{"__typename":"Paragraph","id":"5dc4ca640d81_41","name":"9fcb","type":"PQ","href":null,"layout":null,"metadata":null,"text":"“Kotlin is very important for Android, but we are not limiting it to Android.”","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"EM","start":0,"end":78,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_42":{"__typename":"Paragraph","id":"5dc4ca640d81_42","name":"05d5","type":"BQ","href":null,"layout":null,"metadata":null,"text":"We want Kotlin to be a top-level language, and that happens only if you have server-side adoption, too, so we are trying to make sure that happens. We’re not short-sighted; we’re not trying to keep it an Android language.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_43":{"__typename":"Paragraph","id":"5dc4ca640d81_43","name":"ef6f","type":"H4","href":null,"layout":null,"metadata":null,"text":"Kevin Bierhoff","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"EM","start":0,"end":14,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_44":{"__typename":"Paragraph","id":"5dc4ca640d81_44","name":"ecaa","type":"P","href":null,"layout":null,"metadata":null,"text":"I talked to Kevin to learn about how Kotlin is used within Google, both on Android and beyond.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_45":{"__typename":"Paragraph","id":"5dc4ca640d81_45","name":"14c3","type":"BQ","href":null,"layout":null,"metadata":null,"text":"I lead the Kotlin team in Software Foundations, which is the organization that supports the languages we use across Google’s development. We’ve been working to bring Kotlin to Googlers for the last 4 years.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_46":{"__typename":"Paragraph","id":"5dc4ca640d81_46","name":"0fac","type":"BQ","href":null,"layout":null,"metadata":null,"text":"What that means is going through the tools that Google developers use and teaching them about Kotlin. Everything started with making the build system work with Kotlin.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_47":{"__typename":"Paragraph","id":"5dc4ca640d81_47","name":"9224","type":"BQ","href":null,"layout":null,"metadata":null,"text":"Static analysis is also a large area, which we’ve invested a lot into over the last decade, as a way for us to enforce properties across the entire codebase. For example, we use it to find bug patterns that we want to eradicate. Often that’s about correctness, but sometimes it’s about security or privacy.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_48":{"__typename":"Paragraph","id":"5dc4ca640d81_48","name":"2db5","type":"BQ","href":null,"layout":null,"metadata":null,"text":"The other area we work in is libraries or APIs, going into commonly used infrastructure and making those nice to use with Kotlin. We started with protos, which Googlers ubiquitously use. We designed an API for building protos that takes advantage of Kotlin and provides a nicer experience.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":199,"end":225,"href":"https:\u002F\u002Fdevelopers.googleblog.com\u002F2021\u002F11\u002Fannouncing-kotlin-support-for-protocol.html","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_49":{"__typename":"Paragraph","id":"5dc4ca640d81_49","name":"4509","type":"BQ","href":null,"layout":null,"metadata":null,"text":"Another big recurring theme is Kotlin coroutines. There is a lot of infrastructure at Google that’s asynchronous in some way. These have traditionally been coded to work with Java Futures, and we want those to be natively supporting Kotlin coroutines now","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_50":{"__typename":"Paragraph","id":"5dc4ca640d81_50","name":"638a","type":"P","href":null,"layout":null,"metadata":null,"text":"While we’re celebrating Kotlin on Android today, we are also invested in the language beyond the Android platform.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_51":{"__typename":"Paragraph","id":"5dc4ca640d81_51","name":"538a","type":"BQ","href":null,"layout":null,"metadata":null,"text":"Initially the effort for Kotlin support within Google came from Android. We didn’t want to just encourage other people to use Kotlin, we wanted to demonstrate that we’re doing it ourselves. There’s always gonna be enthusiasts but a lot of organizations are looking to us to make decisions like whether they should transition to Kotlin.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_52":{"__typename":"Paragraph","id":"5dc4ca640d81_52","name":"8302","type":"BQ","href":null,"layout":null,"metadata":null,"text":"At this point, we have a substantial amount of Kotlin code in our monorepo, and at a scale that’s large enough that it’s interesting even for JetBrains, to find bugs that they can’t find on their own. That’s something we want to build on and leverage for the benefit of the Kotlin community.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_53":{"__typename":"Paragraph","id":"5dc4ca640d81_53","name":"e97a","type":"H4","href":null,"layout":null,"metadata":null,"text":"Christina Lee","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_54":{"__typename":"Paragraph","id":"5dc4ca640d81_54","name":"07e1","type":"P","href":null,"layout":null,"metadata":null,"text":"Speaking of the community, my last interview was with Christina, who works as an Android engineer at Pinterest, and she’s a Google Developer Expert for both Kotlin and Android.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_55":{"__typename":"Paragraph","id":"5dc4ca640d81_55","name":"edd2","type":"P","href":null,"layout":null,"metadata":null,"text":"This is how she recalled her first contact with the language.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_56":{"__typename":"Paragraph","id":"5dc4ca640d81_56","name":"d750","type":"BQ","href":null,"layout":null,"metadata":null,"text":"I walked in on my first day at my new job and someone brought up Kotlin. I couldn’t tell what he was saying because I’ve never heard the word before. I had to go home that night and google it, and suffice to say, we did end up building the app in Kotlin.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_57":{"__typename":"Paragraph","id":"5dc4ca640d81_57","name":"1d1e","type":"BQ","href":null,"layout":null,"metadata":null,"text":"When we were debating using Kotlin with Android, we pored over Jake’s document. Back then a lot of people were talking about Kotlin, and that was the document that everybody went to.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":63,"end":78,"href":"https:\u002F\u002Fdocs.google.com\u002Fdocument\u002Fd\u002F1ReS3ep-hjxWA8kZi0YqDbEhCqTt29hG8P44aA9W0DM8\u002Fedit?usp=sharing","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":146,"end":149,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_58":{"__typename":"Paragraph","id":"5dc4ca640d81_58","name":"a486","type":"P","href":null,"layout":null,"metadata":null,"text":"We then discussed what it’s like to be a part of the Android and Kotlin communities, and what makes them so great to participate in.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_59":{"__typename":"Paragraph","id":"5dc4ca640d81_59","name":"552f","type":"BQ","href":null,"layout":null,"metadata":null,"text":"The longer Kotlin has been around, the more I appreciate the community around it and the team building it. The team is so open with the development plan and so open to feedback.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_60":{"__typename":"Paragraph","id":"5dc4ca640d81_60","name":"63b1","type":"BQ","href":null,"layout":null,"metadata":null,"text":"One thing about communities that’s really hard to strike a balance for is pushing for things to get better and giving constructive feedback, but not having the community devolve into snark. That’s really hard to do in person; it’s way harder to do online. What I’ve been so impressed with in both the Android community and the Kotlin Community is that that balance seems to be there.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_61":{"__typename":"Paragraph","id":"5dc4ca640d81_61","name":"53b6","type":"BQ","href":null,"layout":null,"metadata":null,"text":"The Kotlin Community is really incredible for its ability to both give forthright feedback and remain a positive space.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_62":{"__typename":"Paragraph","id":"5dc4ca640d81_62","name":"079f","type":"P","href":null,"layout":null,"metadata":null,"text":"Finally, she summarized the profound impact of the language.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_63":{"__typename":"Paragraph","id":"5dc4ca640d81_63","name":"95ee","type":"BQ","href":null,"layout":null,"metadata":null,"text":"It sounds silly to say it in the context of a new programming language, but technology can really change people’s lives, and it can really make people happier at work. When we were all making that switch from Java to Kotlin, to hear how many people were positively impacted by it, I found that really powerful because it’s hard to find step functions like that in the workplace.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_64":{"__typename":"Paragraph","id":"5dc4ca640d81_64","name":"201e","type":"BQ","href":null,"layout":null,"metadata":null,"text":"We normally focus on “there’s null safety” or “there’s type inference” or all these other technical parts. But when you take a step back, there’s a whole story in there about all of the people who had their passion for coding ignited or reignited because Kotlin is such a wonderful language.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_65":{"__typename":"Paragraph","id":"5dc4ca640d81_65","name":"4d42","type":"BQ","href":null,"layout":null,"metadata":null,"text":"And you can’t manufacture that, right? You can’t buy people’s enthusiasm, they have to actually feel that way. It’s just so impressive that the team is able to do what they’re able to do and that the community is as good as it is. It doesn’t always happen. I think it’s a really special thing that we have.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_66":{"__typename":"Paragraph","id":"5dc4ca640d81_66","name":"3049","type":"P","href":null,"layout":null,"metadata":null,"text":"We’d also love to hear your stories of learning and adopting Kotlin for Android development! Share them on social media using the hashtag #Hi5KotlinOnAndroid.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":138,"end":158,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:5dc4ca640d81_67":{"__typename":"Paragraph","id":"5dc4ca640d81_67","name":"4742","type":"P","href":null,"layout":null,"metadata":null,"text":"Java is a trademark or registered trademark of Oracle and\u002For its affiliates.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"EM","start":0,"end":76,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"CollectionViewerEdge:collectionId:95b274b437c2-viewerId:lo_2a9efe714a40":{"__typename":"CollectionViewerEdge","id":"collectionId:95b274b437c2-viewerId:lo_2a9efe714a40","isEditor":false,"isMuting":false},"ImageMetadata:1*5pMw_nx55x_66tk77kutPQ.png":{"__typename":"ImageMetadata","id":"1*5pMw_nx55x_66tk77kutPQ.png","originalWidth":600,"originalHeight":72},"PostViewerEdge:postId:a7dcd17480a9-viewerId:lo_2a9efe714a40":{"__typename":"PostViewerEdge","shouldIndexPostForExternalSearch":true,"id":"postId:a7dcd17480a9-viewerId:lo_2a9efe714a40"},"Tag:kotlin":{"__typename":"Tag","id":"kotlin","displayTitle":"Kotlin","normalizedTagSlug":"kotlin"},"Tag:latest":{"__typename":"Tag","id":"latest","displayTitle":"Latest","normalizedTagSlug":"latest"},"Post:a7dcd17480a9":{"__typename":"Post","id":"a7dcd17480a9","collection":{"__ref":"Collection:95b274b437c2"},"content({\"postMeteringOptions\":{}})":{"__typename":"PostContent","isLockedPreviewOnly":false,"bodyModel":{"__typename":"RichText","sections":[{"__typename":"Section","name":"b9ba","startIndex":0,"textLayout":null,"imageLayout":null,"backgroundImage":null,"videoLayout":null,"backgroundVideo":null},{"__typename":"Section","name":"757f","startIndex":67,"textLayout":null,"imageLayout":null,"backgroundImage":null,"videoLayout":null,"backgroundVideo":null}],"paragraphs":[{"__ref":"Paragraph:5dc4ca640d81_0"},{"__ref":"Paragraph:5dc4ca640d81_1"},{"__ref":"Paragraph:5dc4ca640d81_2"},{"__ref":"Paragraph:5dc4ca640d81_3"},{"__ref":"Paragraph:5dc4ca640d81_4"},{"__ref":"Paragraph:5dc4ca640d81_5"},{"__ref":"Paragraph:5dc4ca640d81_6"},{"__ref":"Paragraph:5dc4ca640d81_7"},{"__ref":"Paragraph:5dc4ca640d81_8"},{"__ref":"Paragraph:5dc4ca640d81_9"},{"__ref":"Paragraph:5dc4ca640d81_10"},{"__ref":"Paragraph:5dc4ca640d81_11"},{"__ref":"Paragraph:5dc4ca640d81_12"},{"__ref":"Paragraph:5dc4ca640d81_13"},{"__ref":"Paragraph:5dc4ca640d81_14"},{"__ref":"Paragraph:5dc4ca640d81_15"},{"__ref":"Paragraph:5dc4ca640d81_16"},{"__ref":"Paragraph:5dc4ca640d81_17"},{"__ref":"Paragraph:5dc4ca640d81_18"},{"__ref":"Paragraph:5dc4ca640d81_19"},{"__ref":"Paragraph:5dc4ca640d81_20"},{"__ref":"Paragraph:5dc4ca640d81_21"},{"__ref":"Paragraph:5dc4ca640d81_22"},{"__ref":"Paragraph:5dc4ca640d81_23"},{"__ref":"Paragraph:5dc4ca640d81_24"},{"__ref":"Paragraph:5dc4ca640d81_25"},{"__ref":"Paragraph:5dc4ca640d81_26"},{"__ref":"Paragraph:5dc4ca640d81_27"},{"__ref":"Paragraph:5dc4ca640d81_28"},{"__ref":"Paragraph:5dc4ca640d81_29"},{"__ref":"Paragraph:5dc4ca640d81_30"},{"__ref":"Paragraph:5dc4ca640d81_31"},{"__ref":"Paragraph:5dc4ca640d81_32"},{"__ref":"Paragraph:5dc4ca640d81_33"},{"__ref":"Paragraph:5dc4ca640d81_34"},{"__ref":"Paragraph:5dc4ca640d81_35"},{"__ref":"Paragraph:5dc4ca640d81_36"},{"__ref":"Paragraph:5dc4ca640d81_37"},{"__ref":"Paragraph:5dc4ca640d81_38"},{"__ref":"Paragraph:5dc4ca640d81_39"},{"__ref":"Paragraph:5dc4ca640d81_40"},{"__ref":"Paragraph:5dc4ca640d81_41"},{"__ref":"Paragraph:5dc4ca640d81_42"},{"__ref":"Paragraph:5dc4ca640d81_43"},{"__ref":"Paragraph:5dc4ca640d81_44"},{"__ref":"Paragraph:5dc4ca640d81_45"},{"__ref":"Paragraph:5dc4ca640d81_46"},{"__ref":"Paragraph:5dc4ca640d81_47"},{"__ref":"Paragraph:5dc4ca640d81_48"},{"__ref":"Paragraph:5dc4ca640d81_49"},{"__ref":"Paragraph:5dc4ca640d81_50"},{"__ref":"Paragraph:5dc4ca640d81_51"},{"__ref":"Paragraph:5dc4ca640d81_52"},{"__ref":"Paragraph:5dc4ca640d81_53"},{"__ref":"Paragraph:5dc4ca640d81_54"},{"__ref":"Paragraph:5dc4ca640d81_55"},{"__ref":"Paragraph:5dc4ca640d81_56"},{"__ref":"Paragraph:5dc4ca640d81_57"},{"__ref":"Paragraph:5dc4ca640d81_58"},{"__ref":"Paragraph:5dc4ca640d81_59"},{"__ref":"Paragraph:5dc4ca640d81_60"},{"__ref":"Paragraph:5dc4ca640d81_61"},{"__ref":"Paragraph:5dc4ca640d81_62"},{"__ref":"Paragraph:5dc4ca640d81_63"},{"__ref":"Paragraph:5dc4ca640d81_64"},{"__ref":"Paragraph:5dc4ca640d81_65"},{"__ref":"Paragraph:5dc4ca640d81_66"},{"__ref":"Paragraph:5dc4ca640d81_67"}]},"validatedShareKey":"","shareKeyCreator":null},"creator":{"__ref":"User:e1f26db83092"},"inResponseToEntityType":null,"isLocked":false,"isMarkedPaywallOnly":false,"lockedSource":"LOCKED_POST_SOURCE_NONE","mediumUrl":"https:\u002F\u002Fmedium.com\u002Fandroiddevelopers\u002F5-years-of-kotlin-on-android-the-extra-bits-a7dcd17480a9","primaryTopic":{"__ref":"Topic:64756708407c"},"topics":[{"__typename":"Topic","slug":"android-development"},{"__typename":"Topic","slug":"programming"}],"isPublished":true,"latestPublishedVersion":"5dc4ca640d81","visibility":"PUBLIC","postResponses":{"__typename":"PostResponses","count":2},"clapCount":395,"allowResponses":true,"isLimitedState":false,"title":"5 years of Kotlin on Android — the extended interviews","isSeries":false,"sequence":null,"uniqueSlug":"5-years-of-kotlin-on-android-the-extra-bits-a7dcd17480a9","socialTitle":"","socialDek":"","canonicalUrl":"","metaDescription":"","latestPublishedAt":1660762859536,"readingTime":8.649056603773584,"previewContent":{"__typename":"PreviewContent","subtitle":"We’ve published a celebration post on our blog to recognize the 5 year anniversary of official support for Kotlin on Android."},"previewImage":{"__ref":"ImageMetadata:1*CDq4uk7-5PeQkTQpgug8Rw.png"},"isShortform":false,"seoTitle":"5 years of Kotlin on Android — the extended interviews | by Android Developers | Android Developers | Aug, 2022 | Medium","firstPublishedAt":1660755736692,"updatedAt":1660762863751,"shortformType":"SHORTFORM_TYPE_LINK","seoDescription":"","viewerEdge":{"__ref":"PostViewerEdge:postId:a7dcd17480a9-viewerId:lo_2a9efe714a40"},"isSuspended":false,"license":"ALL_RIGHTS_RESERVED","tags":[{"__ref":"Tag:kotlin"},{"__ref":"Tag:latest"}],"isNewsletter":false,"statusForCollection":"APPROVED","pendingCollection":null,"detectedLanguage":"en","wordCount":2239,"layerCake":3,"responsesLocked":false}}</script><script>window.__MIDDLEWARE_STATE__={"session":{"xsrf":""},"cache":{"cacheStatus":"EXPIRED"}}</script><script src="https://cdn-client.medium.com/lite/static/js/manifest.b2314f6d.js"></script><script src="https://cdn-client.medium.com/lite/static/js/9865.1496d74a.js"></script><script src="https://cdn-client.medium.com/lite/static/js/main.24534aeb.js"></script><script src="https://cdn-client.medium.com/lite/static/js/instrumentation.d9108df7.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/reporting.ff22a7a5.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/9120.5df29668.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/5049.d1ead72d.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/4810.6318add7.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6618.db187378.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2707.b0942613.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/9977.5b3eb23a.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8599.1ab63137.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/5250.9f9e01d2.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6349.b071a958.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2648.26563adf.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8393.826a25fb.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/7079.67349d50.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/3735.afb7e926.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/5642.a2d9f6a1.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6546.cd03f950.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6834.08de95de.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/7346.72622eb9.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2420.2a5e2d95.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/839.ca7937c2.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/7975.d195c6f1.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2106.21ff89d3.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/7394.3d049572.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2961.00a48598.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8204.c4082863.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/4391.59acaed3.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/PostPage.MainContent.c8a11795.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8414.6565ad5f.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/3974.8d3e0217.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2527.a0afad8a.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/PostResponsesContent.36c2ecf4.chunk.js"></script><script>window.main();</script><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'8e71b31dfcdf899b',t:'MTczMjM3MDU3Ni4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body></html>