CINXE.COM
Android Developers - Medium
<!DOCTYPE html><html xmlns:cc="http://creativecommons.org/ns#"><head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# medium-com: http://ogp.me/ns/fb/medium-com#"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=contain"><title>Android Developers - Medium</title><link rel="canonical" href="https://medium.com/androiddevelopers"><link id="feedLink" rel="alternate" type="application/rss+xml" title="RSS" href="https://medium.com/feed/androiddevelopers"><meta name="robots" content="index,follow"><meta name="title" content="Android Developers - Medium"><meta name="referrer" content="unsafe-url"><meta name="description" content="Articles on modern tools and resources to help you build experiences that people love, faster and easier, across every Android device."><meta name="keywords" content="ANDROID DEVELOPERS, ANDROID APP DEVELOPMENT, ANDROID STUDIO, ANDROIDDEV, ANDROID DEVELOPMENT"><meta name="theme-color" content="#000000"><meta property="og:title" content="Android Developers – Medium"><meta property="twitter:title" content="Android Developers – Medium"><meta property="og:url" content="https://medium.com/androiddevelopers"><meta property="og:image" content="https://cdn-images-1.medium.com/max/1200/1*4Tg6pPzer7cIarYaszIKaQ.png"><meta property="fb:app_id" content="542599432471018"><meta property="og:description" content="Articles on modern tools and resources to help you build experiences that people love, faster and easier, across every Android device."><meta name="twitter:description" content="Articles on modern tools and resources to help you build experiences that people love, faster and easier, across every Android device."><meta name="twitter:image:src" content="https://cdn-images-1.medium.com/max/1200/1*4Tg6pPzer7cIarYaszIKaQ.png"><meta property="og:type" content="medium-com:collection"><meta name="twitter:card" content="summary_large_image"><meta property="medium-com:creator" content="https://medium.com/@AndroidDev"><meta name="twitter:site" content="@Medium"><meta property="og:site_name" content="Medium"><meta name="twitter:app:name:iphone" content="Medium"><meta name="twitter:app:id:iphone" content="828256236"><meta name="twitter:app:url:iphone" content="medium://androiddevelopers"><meta property="al:ios:app_name" content="Medium"><meta property="al:ios:app_store_id" content="828256236"><meta property="al:android:package" content="com.medium.reader"><meta property="al:android:app_name" content="Medium"><meta property="al:ios:url" content="medium://androiddevelopers"><meta property="al:android:url" content="medium://androiddevelopers"><meta property="al:web:url" content="https://medium.com/androiddevelopers"><link rel="search" type="application/opensearchdescription+xml" title="Medium" href="/osd.xml" /><link rel="alternate" href="android-app://com.medium.reader/https/medium.com/androiddevelopers" /><script type="application/ld+json">{"@context": "http://schema.org", "@graph": [{"@type": "WebSite", "url": "https:\/\/medium.com", "name": "Medium", "alternateName": "Medium is a community of readers and writers offering unique perspectives on ideas large and small."},{"@type": "Organization", "url": "https:\/\/medium.com\/androiddevelopers", "name": "Android Developers"}]}</script><link rel="stylesheet" href="https://cdn-static-1.medium.com/_/fp/css/main-branding-base.ouwh4uMviI3QQWIjxRhkHA.12.css"><script>!function(n,e){var t,o,i,c=[],f={passive:!0,capture:!0},r=new Date,a="pointerup",u="pointercancel";function p(n,c){t||(t=c,o=n,i=new Date,w(e),s())}function s(){o>=0&&o<i-r&&(c.forEach(function(n){n(o,t)}),c=[])}function l(t){if(t.cancelable){var o=(t.timeStamp>1e12?new Date:performance.now())-t.timeStamp;"pointerdown"==t.type?function(t,o){function i(){p(t,o),r()}function c(){r()}function r(){e(a,i,f),e(u,c,f)}n(a,i,f),n(u,c,f)}(o,t):p(o,t)}}function w(n){["click","mousedown","keydown","touchstart","pointerdown"].forEach(function(e){n(e,l,f)})}w(n),self.perfMetrics=self.perfMetrics||{},self.perfMetrics.onFirstInputDelay=function(n){c.push(n),s()}}(addEventListener,removeEventListener);</script><script>document.domain = document.domain;</script><script>if (window.top !== window.self) window.location = 'about:blank';var OB_startTime = new Date().getTime(); var OB_loadErrors = []; function _onerror(e) { OB_loadErrors.push(e) }; if (document.addEventListener) document.addEventListener("error", _onerror, true); else if (document.attachEvent) document.attachEvent("onerror", _onerror); function _asyncScript(u) {var d = document, f = d.getElementsByTagName("script")[0], s = d.createElement("script"); s.type = "text/javascript"; s.async = true; s.src = u; f.parentNode.insertBefore(s, f);}function _asyncStyles(u) {var d = document, f = d.getElementsByTagName("script")[0], s = d.createElement("link"); s.rel = "stylesheet"; s.href = u; f.parentNode.insertBefore(s, f); return s}(new Image()).src = "/_/stat?event=pixel.load&origin=" + encodeURIComponent(location.origin);</script><script>window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date; ga("create", "G-7JY7T788PK", "auto", {"allowLinker": true, "legacyCookieDomain": window.location.hostname});ga("send", "pageview");</script><script async src="https://www.google-analytics.com/analytics.js"></script><script>(function () {var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; document.write("<style>section.section-image--fullBleed.is-backgrounded {padding-top: " + Math.round(1.1 * height) + "px;}section.section-image--fullScreen.is-backgrounded, section.section-image--coverFade.is-backgrounded {min-height: " + height + "px; padding-top: " + Math.round(0.5 * height) + "px;}.u-height100vh {height: " + height + "px !important;}.u-height110vh {height: " + Math.round(1.1 * height) + "px !important;}.u-minHeight100vh {min-height: " + height + "px !important;}.u-maxHeight100vh {max-height: " + height + "px !important;}section.section-image--coverFade {height: " + height + "px;}.section-aspectRatioViewportPlaceholder, .section-aspectRatioViewportCropPlaceholder {max-height: " + height + "px;}.section-aspectRatioViewportBottomSpacer, .section-aspectRatioViewportBottomPlaceholder {max-height: " + Math.round(0.5 * height) + "px;}.zoomable:before {top: " + (-1 * height) + "px; left: " + (-1 * width) + "px; padding: " + height + "px " + width + "px;}</style>");})()</script><!--[if lt IE 9]><script charset="UTF-8" src="https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.12.js"></script><![endif]--><link rel="icon" href="https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19" class="js-favicon"><link rel="apple-touch-icon" sizes="152x152" href="https://cdn-images-1.medium.com/fit/c/304/304/1*4Tg6pPzer7cIarYaszIKaQ.png"><link rel="apple-touch-icon" sizes="120x120" href="https://cdn-images-1.medium.com/fit/c/240/240/1*4Tg6pPzer7cIarYaszIKaQ.png"><link rel="apple-touch-icon" sizes="76x76" href="https://cdn-images-1.medium.com/fit/c/152/152/1*4Tg6pPzer7cIarYaszIKaQ.png"><link rel="apple-touch-icon" sizes="60x60" href="https://cdn-images-1.medium.com/fit/c/120/120/1*4Tg6pPzer7cIarYaszIKaQ.png"><link rel="mask-icon" href="https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.12.svg" color="#171717"></head><body itemscope class=" browser-ie os-windows v-unbound v-glyph v-glyph--m2-unbound-source-serif-pro is-noJs"><script>document.body.className = document.body.className.replace(/(^|\s)is-noJs(\s|$)/, "$1is-js$2")</script><div class="site-main" id="container"><div class="butterBar butterBar--error"></div><div class="surface"><div id="prerendered" class="screenContent"><div class="metabar u-clearfix u-textColorTransparentWhiteDarker u-tintBgColor u-tintSpectrum js-metabar"><div class="branch-journeys-top"></div><div class="js-metabarMiddle metabar-inner u-marginAuto u-maxWidth1032 u-flexCenter u-justifyContentSpaceBetween u-height65 u-xs-height56 u-paddingHorizontal20"><div class="metabar-block u-flex1 u-flexCenter"><div class="js-metabarLogoLeft"><a href="https://medium.com/" data-log-event="home" class="siteNav-logo u-fillWhite u-flex0 u-flexCenter u-paddingTop0"><span class="svgIcon svgIcon--wordmarkMedium svgIcon--120x26px u-flex"><svg class="svgIcon-use" width="120" height="26" ><path d="M29.57 1.404l.036-.008V1.12h-7.27l-6.75 15.979-6.75-15.98H1.003v.278l.035.008c1.327.302 2 .752 2 2.374v18.993c0 1.623-.676 2.073-2.003 2.374L1 25.153v.279h5.315v-.278l-.035-.008c-1.327-.302-2-.751-2-2.374V4.88l8.67 20.552h.492l8.924-21.125V23.24c-.114 1.282-.782 1.677-1.983 1.95l-.036.009v.275h9.259V25.2l-.036-.008c-1.203-.274-1.886-.67-2-1.95l-.006-19.464h.006c0-1.622.674-2.072 2-2.374zm4.23 12.582c.15-3.412 1.367-5.875 3.41-5.918.629.01 1.157.219 1.568.62.872.852 1.282 2.634 1.219 5.298h-6.198zm-.092.962h10.85v-.046c-.03-2.61-.78-4.64-2.228-6.033-1.25-1.204-3.103-1.867-5.048-1.867h-.043c-1.01 0-2.248.246-3.13.693a7.316 7.316 0 00-2.623 2.086c-1.185 1.479-1.903 3.477-2.078 5.724a13.717 13.717 0 00-.04.755c-.004.195-.005.39-.001.587.117 5.087 2.846 9.153 7.692 9.153 4.254 0 6.73-3.132 7.348-7.336l-.312-.11c-1.085 2.259-3.034 3.628-5.252 3.461-3.028-.228-5.347-3.32-5.137-7.066m23.122 6.893c-.356.85-1.099 1.319-2.094 1.319-.995 0-1.905-.689-2.552-1.939-.694-1.342-1.06-3.24-1.06-5.487 0-4.678 1.445-7.704 3.68-7.704.937 0 1.674.468 2.026 1.284v12.527zm7.198 3.335c-1.327-.316-2-.787-2-2.492V0l-8.062 2.392v.293l.05-.004c1.111-.09 1.866.064 2.304.472.343.32.51.809.51 1.498v3.11C56.033 7.25 55.088 7 53.94 7c-2.326 0-4.453.987-5.986 2.779-1.599 1.867-2.444 4.42-2.444 7.38 0 5.287 2.584 8.84 6.43 8.84 2.25 0 4.06-1.242 4.888-3.336v2.811h7.233v-.29l-.035-.008zM70.94 3.085c0-1.65-1.236-2.896-2.875-2.896-1.632 0-2.908 1.272-2.908 2.896 0 1.624 1.278 2.896 2.908 2.896 1.64 0 2.875-1.245 2.875-2.896zm1.903 22.092c-1.327-.316-2-.787-2-2.492h-.006V7.055l-7.234 2.092v.284l.043.004c1.566.14 1.994.683 1.994 2.525v13.515h7.24v-.29l-.037-.008zm18.536 0c-1.327-.316-2-.787-2-2.492V7.055L82.49 9.078v.285l.04.004c1.28.136 1.65.71 1.65 2.56v9.88c-.426.85-1.227 1.356-2.196 1.39-1.573 0-2.439-1.07-2.439-3.012V7.055l-7.234 2.092v.284l.044.004c1.565.14 1.994.683 1.994 2.525v8.362a9.443 9.443 0 00.15 1.741l.13.57C75.243 24.845 76.848 26 79.362 26c2.129 0 3.996-1.328 4.818-3.405v2.885h7.233v-.291l-.034-.012zm28.102.298v-.291l-.035-.009c-1.44-.334-2.001-.964-2.001-2.248V12.295C117.445 8.98 115.597 7 112.5 7c-2.257 0-4.16 1.314-4.893 3.36-.582-2.168-2.257-3.36-4.734-3.36-2.175 0-3.88 1.156-4.612 3.11V7.056l-7.233 2.006v.286l.043.004c1.547.138 1.994.697 1.994 2.492v13.631h6.75v-.29l-.037-.01c-1.148-.271-1.519-.767-1.519-2.04V10.95c.304-.715.917-1.562 2.127-1.562 1.504 0 2.266 1.05 2.266 3.116v12.972h6.751v-.29l-.035-.01c-1.149-.271-1.52-.767-1.52-2.04V12.294a7.107 7.107 0 00-.095-1.21c.322-.777.97-1.696 2.23-1.696 1.524 0 2.265 1.02 2.265 3.116v12.972h7.233z"/></svg></span><span class="u-textScreenReader">Homepage</span></a></div><div class="u-paddingLeft10 u-sm-show r-paddingRight10"><a href="https://rsci.app.link/?%24canonical_url=https%3A%2F%2Fmedium.com/androiddevelopers%3F~feature=LoMobileNavBar&~channel=ShowCollectionHome&~stage=m2">Open in app</a></div></div><div class="metabar-block u-flex0 u-flexCenter"><div class="u-flexCenter u-height65 u-xs-height56"><div class="buttonSet buttonSet--wide u-lineHeightInherit"><a class="button button--primary button--light button--chromeless u-accentColor--buttonNormal is-inSiteNavBar u-xs-hide js-signInButton" href="https://medium.com/m/signin?redirect=https%3A%2F%2Fmedium.com%2Fandroiddevelopers&source=--------------------------nav_reg&operation=login" data-action="sign-in-prompt" data-redirect="https://medium.com/androiddevelopers" data-action-source="--------------------------nav_reg">Sign in</a><a class="button button--primary button--light button--withChrome u-accentColor--buttonNormal is-inSiteNavBar js-signUpButton" href="https://medium.com/m/signin?redirect=https%3A%2F%2Fmedium.com%2Fandroiddevelopers&source=--------------------------nav_reg&operation=register" data-action="sign-up-prompt" data-redirect="https://medium.com/androiddevelopers" data-action-source="--------------------------nav_reg">Get started</a></div></div></div></div></div><div class="metabar metabar--spacer js-metabarSpacer u-tintBgColor u-height65 u-xs-height56"></div><div class="collectionHeader js-collectionHeaderContainer u-relative collectionHeader--layoutMedium collectionHeader--alignmentLeft collectionHeader--withLogo collectionHeader--withoutBackground collectionHeader--colorBehaviorBold collectionHeader--withNavigation collectionHeader--editorLayoutTitleAndLogo is-modeView u-tintBgColor"><div class="collectionHeader-aspectRatioTable"><div class="collectionHeader-aspectRatioContent u-backgroundSizeCover js-collectionHeaderBackground"><div class="collectionHeader-overlayBackground u-height100vh"></div><header class="collectionHeader-heroAndInlineNav u-borderBox u-maxWidth1072 u-paddingLeft20 u-paddingRight20 u-marginAuto u-foreground js-collectionHeader"><div class="collectionHeader-hero js-collectionHeaderHero u-clearfix u-tintSpectrum"><div class="collectionHeader-heroInner"><div class="collectionHeader-logo js-collectionHeaderLogo" style="width: 167px; float: left; padding-right: 20px; margin-right: 0;"><a class="link u-baseColor--link" href="https://medium.com/androiddevelopers" title="Go to Android Developers" aria-label="Go to Android Developers"><div class="u-relative u-marginAuto"><div style="padding-bottom: 55%"></div><img class="collectionHeader-logoImage js-collectionHeaderLogoImage" src="https://cdn-images-1.medium.com/max/334/1*KismM-jT9LUMr1GMhlSPfg@2x.png" data-image-id="1*KismM-jT9LUMr1GMhlSPfg@2x.png" data-width="1000" data-height="550" /></div></a></div><div class="collectionHeader-nameAndDescription"><a class="link link--noUnderline u-baseColor--link" href="https://medium.com/androiddevelopers" title="Go to Android Developers" aria-label="Go to Android Developers"><h1 class="collectionHeader-name js-collectionName u-foreground u-baseColor--textDark u-paddingBottom4 u-lineHeightTightest u-contentSansBold u-fontSize40 u-xs-fontSize32">Android Developers</h1></a><h2 class="collectionHeader-description js-collectionDescription u-foreground u-baseColor--textNormal u-contentSansRegular u-fontSize24 u-xs-fontSize18">The official Android Developers publication on Medium</h2></div></div></div></header></div><div class="collectionHeader-aspectRatioCell"><div class="collectionHeader-aspectRatioFullWidth"></div></div></div><div class="collectionHeader-blockNav"><div class="u-borderBox u-maxWidth1072 u-paddingLeft20 u-paddingRight20 u-marginAuto"><nav class="collectionHeader-nav u-clearfix js-collectionHeaderNav u-lineHeight40 u-overflowHiddenY u-tintSpectrum"><div class="buttonSet u-flex1 u-noWrap u-overflowX u-paddingBottom100 u-xs-marginRight15"><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/androiddevelopers/archive">Archive</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/androiddevelopers/tagged/kotlin">Kotlin</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/androiddevelopers/tagged/design">Design</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/androiddevelopers/tagged/android-studio">Android Studio</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/androiddevelopers/tagged/now-in-android">Now in Android</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/androiddevelopers/tagged/mad-skills">Modern Android Development</a></li><span class="u-borderLeft1 u-paddingLeft22 u-xs-paddingLeft12 u-baseColor--borderLight"></span><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0 is-external"><a class="link link--darkenOnHover u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://developer.android.com" rel="nofollow noopener" target="_blank">developer.android.com</a></li></div><div class="buttonSet u-textAlignRight u-marginLeft18 u-flex0 u-noWrap"><label class="button button--small button--chromeless button--withIcon button--withSvgIcon inputGroup u-sm-hide metabar-predictiveSearch u-baseColor--buttonNormal u-baseColor--placeholderNormal" title="Search"><span class="svgIcon svgIcon--search svgIcon--25px u-baseColor--iconLight"><svg class="svgIcon-use" width="25" height="25" ><path d="M20.067 18.933l-4.157-4.157a6 6 0 10-.884.884l4.157 4.157a.624.624 0 10.884-.884zM6.5 11c0-2.62 2.13-4.75 4.75-4.75S16 8.38 16 11s-2.13 4.75-4.75 4.75S6.5 13.62 6.5 11z"/></svg></span><input class="js-predictiveSearchInput textInput textInput--rounded textInput--darkText u-baseColor--textNormal textInput--transparent" type="search" placeholder="Search" required="true" data-collection-id="95b274b437c2" /></label><a class="button button--light button--chromeless is-touchIconBlackPulse u-baseColor--buttonLight button--withIcon button--withSvgIcon button--chromeless u-verticalAlignMiddle" href="https://twitter.com/androiddev" title="Visit “Android Developers” on X" aria-label="Visit “Android Developers” on X" rel="me" target="_blank"><span class="button-defaultState"><span class="svgIcon svgIcon--twitter svgIcon--25px"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M14.215 11.3l5.764-6.7h-1.366l-5.005 5.818L9.611 4.6H5l6.045 8.798L5 20.424h1.366l5.286-6.144 4.221 6.144h4.61L14.216 11.3zm-1.871 2.175l-.612-.876-4.874-6.97h2.098l3.933 5.625.613.876 5.112 7.312h-2.098l-4.172-5.966z" fill="#242424"/></svg></span></span></a><button class="button button--primary button--smallest u-noUserSelect button--withChrome u-accentColor--buttonNormal js-relationshipButton is-smallPill" data-action="sign-up-prompt" data-sign-in-action="toggle-follow-collection" data-requires-token="true" data-redirect="https://medium.com/_/subscribe/collection/androiddevelopers" data-action-source="pub_header----95b274b437c2----------------------follow_pub" data-collection-id="95b274b437c2"><span class="button-label js-buttonLabel">Follow</span></button></div></nav></div></div></div><div class="u-marginBottom40 js-collectionStream"><div class="streamItem streamItem--section js-streamItem"><section class="u-marginTop30 u-xs-margin0 u-marginBottom15 u-maxWidth1032 u-sm-paddingLeft20 u-sm-paddingRight20 u-borderBox u-marginAuto"><div class="row u-marginTop30 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight15 u-size8of12" data-source="collection_home---4------0-----------------------" data-post-id="255973814ae3" data-index="0"><div class="u-lineHeightBase postItem u-marginRight3"><a href="https://medium.com/androiddevelopers/test-smarter-not-harder-new-testing-strategies-documentation-255973814ae3?source=collection_home---4------0-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/test-smarter-not-harder-new-testing-strategies-documentation-255973814ae3?source=collection_home---4------0-----------------------" class="u-block u-xs-height170 u-height350 u-width100pct u-floatLeft u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/2000/1*JZHO5lsnXJ3BvUdHHbN8xA.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Test smarter, not harder: new testing strategies documentation</span></a></div></div><div class="col u-xs-marginBottom10 u-paddingLeft9 u-paddingRight12 u-paddingTop0 u-sm-paddingTop20 u-paddingBottom25 u-size4of12 u-xs-size12of12 u-marginBottom30"><a class="" href="https://medium.com/androiddevelopers/test-smarter-not-harder-new-testing-strategies-documentation-255973814ae3?source=collection_home---4------0-----------------------" data-action-source="collection_home---4------0-----------------------" data-post-id="255973814ae3"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp4 u-fontSize30 u-size12of12 u-xs-size12of12 u-xs-fontSize24">Test smarter, not harder: new testing strategies documentation</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">A significant update to our official documentation on testing strategies will help you create more robust apps across form factors.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@JoseAlcerreca" data-action="show-user-card" data-action-value="e0a4c9469bb5" data-action-type="hover" data-user-id="e0a4c9469bb5" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*77Cp-wcWyr66fqcTY8_pWw.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Jose Alcérreca"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@JoseAlcerreca" data-action="show-user-card" data-action-value="e0a4c9469bb5" data-action-type="hover" data-user-id="e0a4c9469bb5" dir="auto">Jose Alcérreca</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-11-21T17:03:04.164Z">Nov 21</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="2 min read"></span></div></div></div></div></div></div><div class="row u-marginTop15 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------1-----------------------" data-post-id="9c60a12a8473" data-index="1"><div class="u-lineHeightBase postItem"><a href="https://medium.com/androiddevelopers/now-in-android-111-9c60a12a8473?source=collection_home---4------1-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/now-in-android-111-9c60a12a8473?source=collection_home---4------1-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*Sy3ea40KCd6LSmU6QFUgDA.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Now in Android #111</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/androiddevelopers/now-in-android-111-9c60a12a8473?source=collection_home---4------1-----------------------" data-action-source="collection_home---4------1-----------------------" data-post-id="9c60a12a8473"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Now in Android #111</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Android API level and schedule updates, Gemini in Android Studio, Google Play, Spotlight weeks and more.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@dagalpin" data-action="show-user-card" data-action-value="2e0fc9a4a8c2" data-action-type="hover" data-user-id="2e0fc9a4a8c2" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*9j85cICWzDQeY8Nb4QrL4Q.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Daniel Galpin"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@dagalpin" data-action="show-user-card" data-action-value="2e0fc9a4a8c2" data-action-type="hover" data-user-id="2e0fc9a4a8c2" dir="auto">Daniel Galpin</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-11-07T22:31:11.662Z">Nov 7</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="9 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------2-----------------------" data-post-id="a8ae5802604f" data-index="2"><div class="u-lineHeightBase postItem"><a href="https://medium.com/androiddevelopers/now-in-android-110-a8ae5802604f?source=collection_home---4------2-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/now-in-android-110-a8ae5802604f?source=collection_home---4------2-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*Sy3ea40KCd6LSmU6QFUgDA.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Now in Android #110</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/androiddevelopers/now-in-android-110-a8ae5802604f?source=collection_home---4------2-----------------------" data-action-source="collection_home---4------2-----------------------" data-post-id="a8ae5802604f"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Now in Android #110</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Android 15, Credential Manager, Android Studio Koala, Compose for TV, & more</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@cka.dev" data-action="show-user-card" data-action-value="7135eabf926a" data-action-type="hover" data-user-id="7135eabf926a" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*0akzOFMkyCBtSEal" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Chris Assigbe"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@cka.dev" data-action="show-user-card" data-action-value="7135eabf926a" data-action-type="hover" data-user-id="7135eabf926a" dir="auto">Chris Assigbe</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-10-10T22:35:24.592Z">Oct 10</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="11 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------3-----------------------" data-post-id="b0074d6fd350" data-index="3"><div class="u-lineHeightBase postItem"><a href="https://medium.com/androiddevelopers/migrating-compose-for-tv-from-alpha-to-stable-b0074d6fd350?source=collection_home---4------3-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/migrating-compose-for-tv-from-alpha-to-stable-b0074d6fd350?source=collection_home---4------3-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*4TfBraMwMxGVGOUlaHlO5w.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Migrating Compose for TV from alpha to stable</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/androiddevelopers/migrating-compose-for-tv-from-alpha-to-stable-b0074d6fd350?source=collection_home---4------3-----------------------" data-action-source="collection_home---4------3-----------------------" data-post-id="b0074d6fd350"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Migrating Compose for TV from alpha to stable</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">We’ve shifted a few things around as Compose for TV graduated out of alpha. Migrate easily with the following tips.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@paul-lammertsma" data-action="show-user-card" data-action-value="9e7508235c54" data-action-type="hover" data-user-id="9e7508235c54" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*9iTWrsHbiBBuGTPtiHgpgQ.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Paul Lammertsma"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@paul-lammertsma" data-action="show-user-card" data-action-value="9e7508235c54" data-action-type="hover" data-user-id="9e7508235c54" dir="auto">Paul Lammertsma</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-09-11T16:05:16.444Z">Sep 11</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="3 min read"></span></div></div></div></div></div></div></div><div class="row u-marginTop15 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------4-----------------------" data-post-id="105325a97657" data-index="4"><div class="u-lineHeightBase postItem"><a href="https://medium.com/androiddevelopers/type-safe-navigation-for-compose-105325a97657?source=collection_home---4------4-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/type-safe-navigation-for-compose-105325a97657?source=collection_home---4------4-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*jpVm3Kc_A-n-7LaCVbHrpQ.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Type safe navigation for Compose</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/androiddevelopers/type-safe-navigation-for-compose-105325a97657?source=collection_home---4------4-----------------------" data-action-source="collection_home---4------4-----------------------" data-post-id="105325a97657"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Type safe navigation for Compose</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Jetpack Navigation 2.8.0 enhances Kotlin navigation. Type-safe APIs that improve code safety, simplify graph creation, and more.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@donturner" data-action="show-user-card" data-action-value="7f5a2cb6598e" data-action-type="hover" data-user-id="7f5a2cb6598e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*F2tQfS9RL-Br9vcm_ih_NQ.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Don Turner"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@donturner" data-action="show-user-card" data-action-value="7f5a2cb6598e" data-action-type="hover" data-user-id="7f5a2cb6598e" dir="auto">Don Turner</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-09-05T00:06:11.383Z">Sep 4</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="12 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------5-----------------------" data-post-id="da645c905d78" data-index="5"><div class="u-lineHeightBase postItem"><a href="https://medium.com/androiddevelopers/preview-and-test-your-apps-edge-to-edge-ui-da645c905d78?source=collection_home---4------5-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/preview-and-test-your-apps-edge-to-edge-ui-da645c905d78?source=collection_home---4------5-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*cbWmzhcQsly95rHdfYZA1g.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Preview and test your app’s edge-to-edge UI</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/androiddevelopers/preview-and-test-your-apps-edge-to-edge-ui-da645c905d78?source=collection_home---4------5-----------------------" data-action-source="collection_home---4------5-----------------------" data-post-id="da645c905d78"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Preview and test your app’s edge-to-edge UI</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Test and adapt your app’s UI using Compose Previews to ensure a seamless transition to Android 15’s edge-to-edge UI requirements.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@magicalmeghan" data-action="show-user-card" data-action-value="401951cd4c3e" data-action-type="hover" data-user-id="401951cd4c3e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*eEs786UmP2FQS810" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Meghan Mehta"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@magicalmeghan" data-action="show-user-card" data-action-value="401951cd4c3e" data-action-type="hover" data-user-id="401951cd4c3e" dir="auto">Meghan Mehta</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-09-04T20:46:36.602Z">Sep 4</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="9 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------6-----------------------" data-post-id="872774e8839b" data-index="6"><div class="u-lineHeightBase postItem"><a href="https://medium.com/androiddevelopers/insets-handling-tips-for-android-15s-edge-to-edge-enforcement-872774e8839b?source=collection_home---4------6-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/insets-handling-tips-for-android-15s-edge-to-edge-enforcement-872774e8839b?source=collection_home---4------6-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*cbWmzhcQsly95rHdfYZA1g.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Insets handling tips for Android 15’s edge-to-edge enforcement</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/androiddevelopers/insets-handling-tips-for-android-15s-edge-to-edge-enforcement-872774e8839b?source=collection_home---4------6-----------------------" data-action-source="collection_home---4------6-----------------------" data-post-id="872774e8839b"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Insets handling tips for Android 15’s edge-to-edge enforcement</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Tips to ensure your apps handle insets correctly. Provide a seamless edge-to-edge experience on Android 15 devices.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@ashley.nohe" data-action="show-user-card" data-action-value="54b43884b5c2" data-action-type="hover" data-user-id="54b43884b5c2" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*0dQdET0RLC8J6ZRVvRTr4Q.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Ash Nohe"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@ashley.nohe" data-action="show-user-card" data-action-value="54b43884b5c2" data-action-type="hover" data-user-id="54b43884b5c2" dir="auto">Ash Nohe</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-09-03T18:12:32.484Z">Sep 3</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="13 min read"></span></div></div></div></div></div></div></div></section></div><div class="streamItem streamItem--section js-streamItem"><section class="u-marginTop30 u-xs-margin0 u-marginBottom15 u-maxWidth1032 u-sm-paddingLeft20 u-sm-paddingRight20 u-borderBox u-marginAuto"><header class="heading heading--borderedBottom u-fontSize18 u-contentSansThin" ><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title heading-title--dark heading-title--lineHeightTight u-fontSize18 u-contentSansThin">Now in Android</span></div></div></header><div class="row u-marginTop30 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------0-----------------------" data-post-id="1dbf4e81b127" data-index="0"><div class="u-lineHeightBase postItem"><a href="https://medium.com/androiddevelopers/now-in-android-109-1dbf4e81b127?source=collection_home---4------0-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/now-in-android-109-1dbf4e81b127?source=collection_home---4------0-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*Sy3ea40KCd6LSmU6QFUgDA.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Now in Android #109</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/androiddevelopers/now-in-android-109-1dbf4e81b127?source=collection_home---4------0-----------------------" data-action-source="collection_home---4------0-----------------------" data-post-id="1dbf4e81b127"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Now in Android #109</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">The Fourth Beta of Android 15, Samsung’s Galaxy Unpacked event, Google Play’s new Collections feature and more.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@katerynasemenova" data-action="show-user-card" data-action-value="b85a51f012d7" data-action-type="hover" data-user-id="b85a51f012d7" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/2*MWidJNpRKpwnPhMYw1hBTA.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Kateryna Semenova"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@katerynasemenova" data-action="show-user-card" data-action-value="b85a51f012d7" data-action-type="hover" data-user-id="b85a51f012d7" dir="auto">Kateryna Semenova</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-08-27T21:15:55.089Z">Aug 27</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------1-----------------------" data-post-id="42291f14ba37" data-index="1"><div class="u-lineHeightBase postItem"><a href="https://medium.com/androiddevelopers/now-in-android-108-42291f14ba37?source=collection_home---4------1-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/now-in-android-108-42291f14ba37?source=collection_home---4------1-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*0VEHBhtQU_6AvaaIhR1kCA.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Now in Android #108</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/androiddevelopers/now-in-android-108-42291f14ba37?source=collection_home---4------1-----------------------" data-action-source="collection_home---4------1-----------------------" data-post-id="42291f14ba37"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Now in Android #108</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Android 15 Beta 3, two Compose case studies, Google AI Studio, Gemini in Android Studio, and lots of stable AndroidX releases.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@ashley.nohe" data-action="show-user-card" data-action-value="54b43884b5c2" data-action-type="hover" data-user-id="54b43884b5c2" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*0dQdET0RLC8J6ZRVvRTr4Q.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Ash Nohe"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@ashley.nohe" data-action="show-user-card" data-action-value="54b43884b5c2" data-action-type="hover" data-user-id="54b43884b5c2" dir="auto">Ash Nohe</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-06-27T21:29:33.822Z">Jun 27</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="4 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------2-----------------------" data-post-id="d334239c7c5b" data-index="2"><div class="u-lineHeightBase postItem"><a href="https://medium.com/androiddevelopers/now-in-android-107-d334239c7c5b?source=collection_home---4------2-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/now-in-android-107-d334239c7c5b?source=collection_home---4------2-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*0VEHBhtQU_6AvaaIhR1kCA.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Now in Android #107</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/androiddevelopers/now-in-android-107-d334239c7c5b?source=collection_home---4------2-----------------------" data-action-source="collection_home---4------2-----------------------" data-post-id="d334239c7c5b"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Now in Android #107</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Google @ KotlinConf, Android Studio updates, I/O recaps, AndroidX updates, and more.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@justfaceit" data-action="show-user-card" data-action-value="18e39dc8d413" data-action-type="hover" data-user-id="18e39dc8d413" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*bjPRDOb6kj4pqp3fmf6DBQ@2x.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Sa-ryong Kang"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@justfaceit" data-action="show-user-card" data-action-value="18e39dc8d413" data-action-type="hover" data-user-id="18e39dc8d413" dir="auto">Sa-ryong Kang</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-06-13T23:33:37.965Z">Jun 13</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="6 min read"></span></div></div></div></div></div></div></div></section></div></div><style class="js-collectionStyle"> .u-accentColor--borderLight {border-color: #848488 !important;} .u-accentColor--borderNormal {border-color: #848488 !important;} .u-accentColor--borderDark {border-color: #717275 !important;} .u-accentColor--iconLight .svgIcon,.u-accentColor--iconLight.svgIcon {fill: #848488 !important;} .u-accentColor--iconNormal .svgIcon,.u-accentColor--iconNormal.svgIcon {fill: #848488 !important;} .u-accentColor--iconDark .svgIcon,.u-accentColor--iconDark.svgIcon {fill: #717275 !important;} .u-accentColor--textNormal {color: #717275 !important;} .u-accentColor--hoverTextNormal:hover {color: #717275 !important;} .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: #68686B !important;} .u-accentColor--textDark {color: #68686B !important;} .u-accentColor--backgroundLight {background-color: #848488 !important;} .u-accentColor--backgroundNormal {background-color: #848488 !important;} .u-accentColor--backgroundDark {background-color: #717275 !important;} .u-accentColor--buttonDark {border-color: #717275 !important; color: #68686B !important;} .u-accentColor--buttonDark:hover {border-color: #68686B !important;} .u-accentColor--buttonDark .icon:before,.u-accentColor--buttonDark .svgIcon{color: #717275 !important; fill: #717275 !important;} .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: #848488 !important; color: #717275 !important;} .u-accentColor--buttonNormal:hover {border-color: #717275 !important;} .u-accentColor--buttonNormal .icon:before,.u-accentColor--buttonNormal .svgIcon{color: #848488 !important; fill: #848488 !important;} .u-accentColor--buttonNormal.button--filled .icon:before,.u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-accentColor--buttonDark.button--filled,.u-accentColor--buttonDark.button--withChrome.is-active,.u-accentColor--fillWhenActive.is-active {background-color: #717275 !important; border-color: #717275 !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: #848488 !important; border-color: #848488 !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .postArticle.is-withAccentColors .markup--user,.postArticle.is-withAccentColors .markup--query {color: #717275 !important;}.u-tintBgColor {background-color: rgba(32, 33, 36, 1) !important;}.u-tintBgColor .u-fadeLeft:before {background-image: linear-gradient(to right, rgba(32, 33, 36, 1) 0%, rgba(32, 33, 36, 0) 100%) !important;}.u-tintBgColor .u-fadeRight:after {background-image: linear-gradient(to right, rgba(32, 33, 36, 0) 0%, rgba(32, 33, 36, 1) 100%) !important;} .u-tintSpectrum .u-baseColor--borderLight {border-color: #9D9C9E !important;} .u-tintSpectrum .u-baseColor--borderNormal {border-color: #C6C5C6 !important;} .u-tintSpectrum .u-baseColor--borderDark {border-color: #EEEBEC !important;} .u-tintSpectrum .u-baseColor--iconLight .svgIcon,.u-tintSpectrum .u-baseColor--iconLight.svgIcon {fill: #9D9C9E !important;} .u-tintSpectrum .u-baseColor--iconNormal .svgIcon,.u-tintSpectrum .u-baseColor--iconNormal.svgIcon {fill: #C6C5C6 !important;} .u-tintSpectrum .u-baseColor--iconDark .svgIcon,.u-tintSpectrum .u-baseColor--iconDark.svgIcon {fill: #EEEBEC !important;} .u-tintSpectrum .u-baseColor--textNormal {color: #C6C5C6 !important;} .u-tintSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: #FFFEFF !important;} .u-tintSpectrum .u-baseColor--textDark {color: #FFFEFF !important;} .u-tintSpectrum .u-baseColor--textDarker {color: #FFFEFF !important;} .u-tintSpectrum .u-baseColor--backgroundLight {background-color: #9D9C9E !important;} .u-tintSpectrum .u-baseColor--backgroundNormal {background-color: #C6C5C6 !important;} .u-tintSpectrum .u-baseColor--backgroundDark {background-color: #EEEBEC !important;} .u-tintSpectrum .u-baseColor--buttonLight {border-color: #9D9C9E !important; color: #9D9C9E !important;} .u-tintSpectrum .u-baseColor--buttonLight:hover {border-color: #9D9C9E !important;} .u-tintSpectrum .u-baseColor--buttonLight .icon:before,.u-tintSpectrum .u-baseColor--buttonLight .svgIcon {color: #9D9C9E !important; fill: #9D9C9E !important;} .u-tintSpectrum .u-baseColor--buttonDark {border-color: #EEEBEC !important; color: #FFFEFF !important;} .u-tintSpectrum .u-baseColor--buttonDark:hover {border-color: #FFFEFF !important;} .u-tintSpectrum .u-baseColor--buttonDark .icon:before,.u-tintSpectrum .u-baseColor--buttonDark .svgIcon {color: #EEEBEC !important; fill: #EEEBEC !important;} .u-tintSpectrum .u-baseColor--buttonNormal {border-color: #C6C5C6 !important; color: #C6C5C6 !important;} .u-tintSpectrum .u-baseColor--buttonNormal:hover {border-color: #EEEBEC !important;} .u-tintSpectrum .u-baseColor--buttonNormal .icon:before,.u-tintSpectrum .u-baseColor--buttonNormal .svgIcon {color: #C6C5C6 !important; fill: #C6C5C6 !important;} .u-tintSpectrum .u-baseColor--buttonDark.button--filled,.u-tintSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: #EEEBEC !important; border-color: #EEEBEC !important; color: rgba(32, 33, 36, 1) !important; fill: rgba(32, 33, 36, 1) !important;} .u-tintSpectrum .u-baseColor--buttonNormal.button--filled,.u-tintSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: #C6C5C6 !important; border-color: #C6C5C6 !important; color: rgba(32, 33, 36, 1) !important; fill: rgba(32, 33, 36, 1) !important;} .u-tintSpectrum .u-baseColor--link {color: #C6C5C6 !important;} .u-tintSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: #FFFEFF !important;} .u-tintSpectrum .u-baseColor--link.link--darken:hover,.u-tintSpectrum .u-baseColor--link.link--darken:focus,.u-tintSpectrum .u-baseColor--link.link--darken:active {color: #FFFEFF !important;} .u-tintSpectrum .u-baseColor--link.link--dark {color: #FFFEFF !important;} .u-tintSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-tintSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-tintSpectrum .u-baseColor--link.link--dark.link--darken:active {color: #FFFEFF !important;} .u-tintSpectrum .u-baseColor--link.link--darker {color: #FFFEFF !important;} .u-tintSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: #9D9C9E;} .u-tintSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: #9D9C9E;} .u-tintSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: #9D9C9E;} .u-tintSpectrum .ui-h1,.u-tintSpectrum .ui-h2,.u-tintSpectrum .ui-h3,.u-tintSpectrum .ui-h4,.u-tintSpectrum .ui-brand1,.u-tintSpectrum .ui-brand2,.u-tintSpectrum .ui-captionStrong {color: #FFFEFF !important; fill: #FFFEFF !important;} .u-tintSpectrum .ui-body,.u-tintSpectrum .ui-caps {color: #FFFEFF !important; fill: #FFFEFF !important;} .u-tintSpectrum .ui-summary,.u-tintSpectrum .ui-caption {color: #9D9C9E !important; fill: #9D9C9E !important;} .u-tintSpectrum .u-accentColor--borderLight {border-color: #9D9C9E !important;} .u-tintSpectrum .u-accentColor--borderNormal {border-color: #C6C5C6 !important;} .u-tintSpectrum .u-accentColor--borderDark {border-color: #EEEBEC !important;} .u-tintSpectrum .u-accentColor--iconLight .svgIcon,.u-tintSpectrum .u-accentColor--iconLight.svgIcon {fill: #9D9C9E !important;} .u-tintSpectrum .u-accentColor--iconNormal .svgIcon,.u-tintSpectrum .u-accentColor--iconNormal.svgIcon {fill: #C6C5C6 !important;} .u-tintSpectrum .u-accentColor--iconDark .svgIcon,.u-tintSpectrum .u-accentColor--iconDark.svgIcon {fill: #EEEBEC !important;} .u-tintSpectrum .u-accentColor--textNormal {color: #C6C5C6 !important;} .u-tintSpectrum .u-accentColor--hoverTextNormal:hover {color: #C6C5C6 !important;} .u-tintSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: #FFFEFF !important;} .u-tintSpectrum .u-accentColor--textDark {color: #FFFEFF !important;} .u-tintSpectrum .u-accentColor--backgroundLight {background-color: #9D9C9E !important;} .u-tintSpectrum .u-accentColor--backgroundNormal {background-color: #C6C5C6 !important;} .u-tintSpectrum .u-accentColor--backgroundDark {background-color: #EEEBEC !important;} .u-tintSpectrum .u-accentColor--buttonDark {border-color: #EEEBEC !important; color: #FFFEFF !important;} .u-tintSpectrum .u-accentColor--buttonDark:hover {border-color: #FFFEFF !important;} .u-tintSpectrum .u-accentColor--buttonDark .icon:before,.u-tintSpectrum .u-accentColor--buttonDark .svgIcon{color: #EEEBEC !important; fill: #EEEBEC !important;} .u-tintSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: #C6C5C6 !important; color: #C6C5C6 !important;} .u-tintSpectrum .u-accentColor--buttonNormal:hover {border-color: #EEEBEC !important;} .u-tintSpectrum .u-accentColor--buttonNormal .icon:before,.u-tintSpectrum .u-accentColor--buttonNormal .svgIcon{color: #C6C5C6 !important; fill: #C6C5C6 !important;} .u-tintSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-tintSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(32, 33, 36, 1) !important; fill: rgba(32, 33, 36, 1) !important;} .u-tintSpectrum .u-accentColor--buttonDark.button--filled,.u-tintSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-tintSpectrum .u-accentColor--fillWhenActive.is-active {background-color: #EEEBEC !important; border-color: #EEEBEC !important; color: rgba(32, 33, 36, 1) !important; fill: rgba(32, 33, 36, 1) !important;} .u-tintSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-tintSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: #C6C5C6 !important; border-color: #C6C5C6 !important; color: rgba(32, 33, 36, 1) !important; fill: rgba(32, 33, 36, 1) !important;} .u-tintSpectrum .postArticle.is-withAccentColors .markup--user,.u-tintSpectrum .postArticle.is-withAccentColors .markup--query {color: #C6C5C6 !important;} .u-accentColor--highlightFaint {background-color: rgba(242, 240, 241, 1) !important;} .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(224, 223, 226, 1) !important;} .postArticle.is-withAccentColors .markup--quote.is-other {background-color: rgba(242, 240, 241, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(242, 240, 241, 1), rgba(242, 240, 241, 1));} .postArticle.is-withAccentColors .markup--quote.is-me {background-color: rgba(232, 231, 233, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(232, 231, 233, 1), rgba(232, 231, 233, 1));} .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: rgba(224, 223, 226, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(224, 223, 226, 1), rgba(224, 223, 226, 1));} .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: rgba(224, 223, 226, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(224, 223, 226, 1), rgba(224, 223, 226, 1));} .postArticle.is-withAccentColors .markup--highlight {background-color: rgba(224, 223, 226, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(224, 223, 226, 1), rgba(224, 223, 226, 1));}</style><style class="js-collectionStyleConstant">.u-imageBgColor {background-color: rgba(0, 0, 0, 0.24705882352941178);} .u-imageSpectrum .u-baseColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-baseColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-baseColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--iconLight .svgIcon,.u-imageSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--iconNormal .svgIcon,.u-imageSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--iconDark .svgIcon,.u-imageSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textDark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textDarker {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-baseColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important; color: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-baseColor--buttonLight .icon:before,.u-imageSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonDark .icon:before,.u-imageSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonNormal .icon:before,.u-imageSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonDark.button--filled,.u-imageSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-baseColor--buttonNormal.button--filled,.u-imageSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-baseColor--link {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--darken:active {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--dark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--darker {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .ui-h1,.u-imageSpectrum .ui-h2,.u-imageSpectrum .ui-h3,.u-imageSpectrum .ui-h4,.u-imageSpectrum .ui-brand1,.u-imageSpectrum .ui-brand2,.u-imageSpectrum .ui-captionStrong {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .ui-body,.u-imageSpectrum .ui-caps {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .ui-summary,.u-imageSpectrum .ui-caption {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-accentColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-accentColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-accentColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--iconLight .svgIcon,.u-imageSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-accentColor--iconNormal .svgIcon,.u-imageSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--iconDark .svgIcon,.u-imageSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--textDark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-accentColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark .icon:before,.u-imageSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-accentColor--buttonDark.button--filled,.u-imageSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-imageSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-imageSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .postArticle.is-withAccentColors .markup--user,.u-imageSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--highlightFaint {background-color: rgba(255, 255, 255, 0.2) !important;} .u-imageSpectrum .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(255, 255, 255, 0.6) !important;} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: rgba(255, 255, 255, 0.2) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: rgba(255, 255, 255, 0.4) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0.4));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));}.u-resetSpectrum .u-tintBgColor {background-color: rgba(255, 255, 255, 1) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeLeft:before {background-image: linear-gradient(to right, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeRight:after {background-image: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%) !important;} .u-resetSpectrum .u-baseColor--borderLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--borderNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--borderDark {border-color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--iconLight .svgIcon,.u-resetSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--iconNormal .svgIcon,.u-resetSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--iconDark .svgIcon,.u-resetSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textNormal {color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textDark {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textDarker {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--backgroundLight {background-color: rgba(0, 0, 0, 0.09803921568627451) !important;} .u-resetSpectrum .u-baseColor--backgroundNormal {background-color: rgba(0, 0, 0, 0.2) !important;} .u-resetSpectrum .u-baseColor--backgroundDark {background-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight .icon:before,.u-resetSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonDark {border-color: rgba(0, 0, 0, 0.6) !important; color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--buttonDark .icon:before,.u-resetSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important; color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonNormal .icon:before,.u-resetSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(0, 0, 0, 0.4980392156862745) !important; fill: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonDark.button--filled,.u-resetSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2980392156862745) !important; border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-baseColor--buttonNormal.button--filled,.u-resetSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2) !important; border-color: rgba(0, 0, 0, 0.2) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-baseColor--link {color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--darken:active {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--dark {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--link.link--darker {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .ui-h1,.u-resetSpectrum .ui-h2,.u-resetSpectrum .ui-h3,.u-resetSpectrum .ui-h4,.u-resetSpectrum .ui-brand1,.u-resetSpectrum .ui-brand2,.u-resetSpectrum .ui-captionStrong {color: rgba(0, 0, 0, 0.8) !important; fill: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .ui-body,.u-resetSpectrum .ui-caps {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .ui-summary,.u-resetSpectrum .ui-caption {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-accentColor--borderLight {border-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--borderNormal {border-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--borderDark {border-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--iconLight .svgIcon,.u-resetSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--iconNormal .svgIcon,.u-resetSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--iconDark .svgIcon,.u-resetSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--textNormal {color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--textDark {color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundLight {background-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundNormal {background-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundDark {background-color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark {border-color: rgba(17, 128, 14, 1) !important; color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark .icon:before,.u-resetSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(15, 115, 12, 1) !important; fill: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(26, 137, 23, 1) !important; color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(17, 128, 14, 1) !important; fill: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark.button--filled,.u-resetSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-resetSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(15, 115, 12, 1) !important; border-color: rgba(15, 115, 12, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-resetSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(17, 128, 14, 1) !important; border-color: rgba(17, 128, 14, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .postArticle.is-withAccentColors .markup--user,.u-resetSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(17, 128, 14, 1) !important;}</style><div class="js-collectionFooter u-tintBgColor u-hide"><div class="container u-maxWidth1040"><div class="u-marginTop10 u-paddingTop10 u-paddingBottom30 u-tintSpectrum"><div class="linkSet u-clearfix"><div class="u-floatRight u-textColorNormal u-baseColor--textNormal u-xs-floatLeft"><a class="button button--chromeless u-baseColor--buttonNormal u-marginLeft15 u-lineHeight35 u-xs-block u-xs-marginLeft0" href="https://medium.com/androiddevelopers/about" title="About Android Developers" aria-label="About Android Developers">About Android Developers</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/androiddevelopers/latest" title="Latest Stories for Android Developers" aria-label="Latest Stories for Android Developers">Latest Stories</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/androiddevelopers/archive" title="Archive for Android Developers" aria-label="Archive for Android Developers">Archive</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/about">About Medium</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://policy.medium.com/medium-terms-of-service-9db0094a1e0f">Terms</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://policy.medium.com/medium-privacy-policy-f03bf92035c9">Privacy</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/business">Teams</a></div></div></div></div></div></div></div></div><div class="loadingBar"></div><script>// <![CDATA[ window["obvInit"] = function (opt_embedded) {window["obvInit"]["embedded"] = opt_embedded; window["obvInit"]["ready"] = true;} // ]]></script><script>// <![CDATA[ var GLOBALS = {"audioUrl":"https://d1fcbxp97j4nb2.cloudfront.net","baseUrl":"https://medium.com","buildLabel":"20241126-1740-root","currentUser":{"userId":"lo_1e1b80adb7f8","isVerified":false,"subscriberEmail":"","hasPastMemberships":false,"isEnrolledInHightower":false,"isEligibleForHightower":true,"hightowerLastLockedAt":0,"isWriterProgramEnrolled":true,"isWriterProgramInvited":false,"isWriterProgramOptedOut":false,"writerProgramVersion":0,"writerProgramEnrolledAt":0,"friendLinkOnboarding":0,"hasAdditionalUnlocks":false,"hasApiAccess":false,"writerProgramDistributionSettingOptedIn":false,"isSuspended":false,"collectionOnboardingSeen":0,"atsQualifiedAt":0},"currentUserHasUnverifiedEmail":false,"isAuthenticated":false,"isCurrentUserVerified":false,"miroUrl":"https://cdn-images-1.medium.com","moduleUrls":{"base":"https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.95z8xpkUEidhPbIWsh2BVw.12.js","common-async":"https://cdn-static-1.medium.com/_/fp/gen-js/main-common-async.bundle.zqOu8dxaQRtqDyChHdOWlQ.12.js","hightower":"https://cdn-static-1.medium.com/_/fp/gen-js/main-hightower.bundle.y0UkxCxPBUbLlduk5XbwLQ.12.js","home-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-home-screens.bundle.eZhPgaD8AglnbC5Rzxqvhg.12.js","misc-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-misc-screens.bundle.XeRjm4FlHTBOsUvoOQ6Ppg.12.js","notes":"https://cdn-static-1.medium.com/_/fp/gen-js/main-notes.bundle.r9MSvtAmj0CMkyIC0CCCbA.12.js","payments":"https://cdn-static-1.medium.com/_/fp/gen-js/main-payments.bundle.AiXyuYj3AvxRA1-7HEyP9Q.12.js","posters":"https://cdn-static-1.medium.com/_/fp/gen-js/main-posters.bundle.fsLyLvZO4VZXL_zb4RXgeg.12.js","power-readers":"https://cdn-static-1.medium.com/_/fp/gen-js/main-power-readers.bundle.6Dyc-nVN2MDV_AM9XDAZug.12.js","pubs":"https://cdn-static-1.medium.com/_/fp/gen-js/main-pubs.bundle.rUyrVjlTpUj61voxnZosQw.12.js","stats":"https://cdn-static-1.medium.com/_/fp/gen-js/main-stats.bundle.2I2tXSo7-rbez_WYXfga0Q.12.js"},"previewConfig":{"weightThreshold":1,"weightImageParagraph":0.51,"weightIframeParagraph":0.8,"weightTextParagraph":0.08,"weightEmptyParagraph":0,"weightP":0.003,"weightH":0.005,"weightBq":0.003,"minPTextLength":60,"truncateBoundaryChars":20,"detectTitle":true,"detectTitleLevThreshold":0.15},"productName":"Medium","supportsEdit":false,"termsUrl":"//policy.medium.com/medium-terms-of-service-9db0094a1e0f","textshotHost":"textshot.textshot-production.svc.cluster.local","transactionId":"1732663359809:132650757af2","useragent":{"browser":"ie","family":"ie","os":"windows","version":7,"supportsDesktopEdit":false,"supportsInteract":false,"supportsView":true,"isMobile":false,"isTablet":false,"isNative":false,"supportsFileAPI":false,"isTier1":false,"clientVersion":"","clientChannel":"","supportsRealScrollEvents":false,"supportsVhUnits":false,"ruinsViewportSections":false,"supportsHtml5Video":false,"supportsMagicUnderlines":false,"isWebView":false,"isFacebookWebView":false,"supportsProgressiveMedia":false,"supportsPromotedPosts":true,"isBot":false,"isNativeIphone":false,"supportsCssVariables":false,"supportsVideoSections":true,"emojiSupportLevel":1,"isSearchBot":false,"isSyndicationBot":false,"isNativeAndroid":false,"isNativeIos":false,"isSeoAuditBot":false,"isInternalApp":false,"supportsApplePay":false,"supportsScrollableMetabar":false},"variants":{"allow_access":true,"allow_signup":true,"allow_test_auth":"disallow","android_enable_editor_new_publishing_flow":true,"android_enable_friend_links_creation":true,"android_enable_friend_links_postpage_banners":true,"android_enable_image_sharer":true,"android_enable_lists_v2":true,"android_enable_syntax_highlight":true,"android_enable_topic_portals":true,"android_rating_prompt_stories_read_threshold":2,"android_two_hour_refresh":true,"available_annual_plan":"2c754bcc2995","available_annual_premium_plan":"4a442ace1476","available_monthly_plan":"60e220181034","available_monthly_premium_plan":"12a660186432","browsable_stream_config_bucket":"curated-topics","can_receive_tips_v0":true,"can_send_tips_v0":true,"coronavirus_topic_recirc":true,"disable_partner_program_enrollment":true,"enable_abandoned_cart_promotion_email":true,"enable_android_dynamic_aspirational_paywall":true,"enable_android_dynamic_programming_paywall":true,"enable_android_miro_v2":true,"enable_android_offline_reading":true,"enable_android_verified_author":true,"enable_app_flirty_thirty":true,"enable_apple_sign_in":true,"enable_apple_webhook":true,"enable_aurora_pub_follower_page":true,"enable_author_cards":true,"enable_author_cards_byline":true,"enable_auto_follow_on_subscribe":true,"enable_automod":true,"enable_bayesian_average_pub_search":true,"enable_bg_post_post":true,"enable_billing_frequency_on_step2":"group_1","enable_boost_nia_v01":true,"enable_braintree_apple_pay":true,"enable_braintree_client":true,"enable_braintree_google_pay":true,"enable_braintree_integration":true,"enable_braintree_paypal":true,"enable_braintree_trial_membership":true,"enable_braintree_webhook":true,"enable_branch_io":true,"enable_cache_less_following_feed":true,"enable_configure_pronouns":true,"enable_conversion_model_v2":"group_2","enable_conversion_ranker_v2":"control","enable_creator_welcome_email":true,"enable_deprecate_legacy_providers_v3":true,"enable_diversification_rex":true,"enable_entities_to_follow_v2":true,"enable_eventstats_event_processing":true,"enable_explicit_signals":true,"enable_explicit_signals_updated_post_previews":true,"enable_footer_app_buttons":true,"enable_google_one_tap":true,"enable_google_webhook":true,"enable_group_gifting":true,"enable_iceland_forced_android":true,"enable_import":true,"enable_intrinsic_automatic_actions":true,"enable_ios_autorefresh":true,"enable_ios_dynamic_paywall_aspiriational":true,"enable_ios_dynamic_paywall_programming":true,"enable_ios_easy_resubscribe":true,"enable_ios_offline_reading":true,"enable_legacy_feed_in_iceland":true,"enable_lite_archive_page":true,"enable_lite_continue_this_thread":true,"enable_lite_homepage":true,"enable_lite_response_markup":true,"enable_lite_server_upstream_deadlines":true,"enable_lo_homepage":"control","enable_maim_the_meter":true,"enable_marketing_emails":true,"enable_mastodon_avatar_upload":true,"enable_mastodon_for_members":true,"enable_mastodon_for_members_username_selection":true,"enable_medium2_kbfd":true,"enable_members_only_audio":true,"enable_ml_rank_rex_anno":true,"enable_moc_load_processor_all_recs_surfaces":true,"enable_moc_load_processor_c":true,"enable_moc_load_processor_first_story":true,"enable_new_manage_membership_flow":true,"enable_new_stripe_customers":true,"enable_newsletter_lo_flow_custom_domains":true,"enable_pill_based_home_feed":true,"enable_pp_country_expansion":true,"enable_pp_v4":true,"enable_pre_pp_v4":true,"enable_premium_tier":true,"enable_premium_tier_badge":true,"enable_publication_hierarchy_web":true,"enable_ranker_v10":"control","enable_recaptcha_enterprise":true,"enable_recirc_model":true,"enable_recommended_publishers_query":true,"enable_rex_aggregator_v2":true,"enable_rex_new_push_notification_endpoint":true,"enable_rex_reading_history":true,"enable_rito_upstream_deadlines":true,"enable_seamless_social_sharing":true,"enable_see_pronouns":true,"enable_sharer_create_post_share_key":true,"enable_sharer_validate_post_share_key":true,"enable_simplified_digest_v2_b":true,"enable_speechify_ios":true,"enable_speechify_widget":true,"enable_sprig":true,"enable_starspace":true,"enable_susi_redesign_android":true,"enable_susi_redesign_ios":true,"enable_switch_plan_premium_tier":true,"enable_tag_recs":true,"enable_tick_landing_page":true,"enable_tipping_v0_android":true,"enable_tipping_v0_ios":true,"enable_tribute_landing_page":true,"enable_update_explore_wtf":true,"enable_update_topic_portals_wtf":true,"enable_updated_pub_recs_ui":true,"enable_verifications_service":true,"glyph_font_set":"m2-unbound-source-serif-pro","goliath_externalsearch_enable_comment_deindexation":true,"ios_display_paywall_after_onboarding":true,"ios_enable_friend_links_creation":true,"ios_enable_friend_links_postpage_banners":true,"ios_enable_home_post_menu":true,"ios_enable_lock_responses":true,"ios_enable_verified_book_author":true,"ios_iceland_nux":true,"ios_in_app_free_trial":true,"ios_remove_twitter_onboarding_step":true,"ios_social_share_sheet":true,"limit_post_referrers":true,"limit_user_follows":true,"mobile_custom_app_icon":true,"num_post_bottom_responses_to_show":1,"onboarding_tags_from_top_views":true,"reader_fair_distribution_non_qp":true,"redefined_top_posts":true,"reengagement_notification_duration":3,"rex_generator_max_candidates":1000,"signin_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","signup_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","skip_fs_cache_user_vals":true},"xsrfToken":"","iosAppId":"828256236","supportEmail":"yourfriends@medium.com","fp":{"/icons/monogram-mask.svg":"https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.12.svg","/icons/favicon-medium-editor.ico":"https://cdn-static-1.medium.com/_/fp/icons/favicon-medium-editor.PiakrZWB7Yb80quUVQWM6g.12.ico"},"authBaseUrl":"https://medium.com","imageUploadSizeMb":25,"isAuthDomainRequest":true,"algoliaApiEndpoint":"https://MQ57UUUQZ2-dsn.algolia.net","algoliaAppId":"MQ57UUUQZ2","algoliaSearchOnlyApiKey":"394474ced050e3911ae2249ecc774921","iosAppStoreUrl":"https://itunes.apple.com/app/medium-everyones-stories/id828256236?pt=698524&mt=8","iosAppLinkBaseUrl":"medium:","algoliaIndexPrefix":"medium_","androidPlayStoreUrl":"https://play.google.com/store/apps/details?id=com.medium.reader","googleClientId":"216296035834-k1k6qe060s2tp2a2jam4ljdcms00sttg.apps.googleusercontent.com","androidPackage":"com.medium.reader","androidPlayStoreMarketScheme":"market://details?id=com.medium.reader","googleAuthUri":"https://accounts.google.com/o/oauth2/auth","androidScheme":"medium","layoutData":{"useDynamicScripts":false,"googleAnalyticsTrackingCode":"G-7JY7T788PK","jsShivUrl":"https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.12.js","useDynamicCss":false,"faviconUrl":"https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19","faviconImageId":"5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19","fontSets":[{"id":8,"url":"https://glyph.medium.com/css/e/sr/latin/e/ssr/latin/e/ssb/latin/m2-unbound-source-serif-pro.css"},{"id":11,"url":"https://glyph.medium.com/css/m2-unbound-source-serif-pro.css"},{"id":9,"url":"https://glyph.medium.com/css/mkt.css"}],"glyphUrl":"https://glyph.medium.com"},"authBaseUrlRev":"moc.muidem//:sptth","stripePublishableKey":"pk_live_7FReX44VnNIInZwrIIx6ghjl","archiveUploadSizeMb":100,"previewConfig2":{"weightThreshold":1,"weightImageParagraph":0.05,"raiseImage":true,"enforceHeaderHierarchy":true,"isImageInsetRight":true},"isAmp":false,"iosScheme":"medium","facebook":{"key":"542599432471018","namespace":"medium-com","scope":{"default":["public_profile","email"],"connect":["public_profile","email"],"login":["public_profile","email"],"share":["public_profile","email"]}},"memberContentTopicId":"13d7efd82fb2","audioContentTopicId":"3792abbd134","isDoNotAuth":false,"buggle":{"videoUrl":"https://cdn-videos-1.medium.com","audioUrl":"https://cdn-audio-1.medium.com"},"referrerType":5,"partnerProgramEmail":"partnerprogram@medium.com","recaptchaKey":"6Lfc37IUAAAAAKGGtC6rLS13R1Hrw_BqADfS1LRk","countryCode":"SG","bypassMeter":false,"branchKey":"key_live_ofxXr2qTrrU9NqURK8ZwEhknBxiI6KBm","paypal":{"clientMode":"production","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/redeem.","price":"50.00","currency":"USD","sku":"membership-gift-1-yr"}},"collectionConfig":{"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"]},"bypassMeterWithShareKey":false,"recaptcha3Key":"6Lf8R9wUAAAAABMI_85Wb8melS7Zj6ziuf99Yot5","braintreeClientKey":"production_zjkj96jm_m56f8fqpf7ngnrd4","cdcMessaging":[{"text":"For more information on the novel coronavirus and Covid-19, visit ","href":"","type":"text","start":0,"end":0},{"text":"cdc.gov","href":"https://www.cdc.gov/coronavirus/2019-nCoV","type":"link","start":66,"end":73},{"text":".","href":"","type":"text","start":0,"end":0}],"braintree":{"merchantId":"m56f8fqpf7ngnrd4"},"diagnostics":{},"domain":"medium.com"} // ]]></script><script charset="UTF-8" src="https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.95z8xpkUEidhPbIWsh2BVw.12.js" async></script><script>// <![CDATA[ window["obvInit"]({"references":{"Collection":{"95b274b437c2":{"id":"95b274b437c2","name":"Android Developers","slug":"androiddevelopers","tags":["ANDROID DEVELOPERS","ANDROID APP DEVELOPMENT","ANDROID STUDIO","ANDROIDDEV","ANDROID DEVELOPMENT"],"creatorId":"e1f26db83092","description":"Articles on modern tools and resources to help you build experiences that people love, faster and easier, across every Android device.","shortDescription":"Articles on modern tools and resources to help you build…","image":{"imageId":"1*4Tg6pPzer7cIarYaszIKaQ.png","filter":"","backgroundSize":"","originalWidth":96,"originalHeight":96,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":52037,"activeAt":1732208584254},"virtuals":{"permissions":{"canPublish":false,"canPublishAll":false,"canRepublish":false,"canRemove":false,"canManageAll":false,"canSubmit":false,"canEditPosts":false,"canAddWriters":false,"canViewStats":false,"canSendNewsletter":false,"canViewLockedPosts":false,"canViewCloaked":false,"canEditOwnPosts":false,"canBeAssignedAuthor":false,"canEnrollInHightower":false,"canLockPostsForMediumMembers":false,"canLockOwnPostsForMediumMembers":false,"canViewNewsletterV2Stats":false,"canCreateNewsletterV3":false},"isSubscribed":false,"isEnrolledInHightower":false,"isEligibleForHightower":false,"isSubscribedToCollectionEmails":false,"isMuted":false,"canToggleEmail":false,"isWriter":false},"logo":{"imageId":"1*5pMw_nx55x_66tk77kutPQ.png","filter":"","backgroundSize":"","originalWidth":600,"originalHeight":72,"strategy":"resample","height":0,"width":0},"twitterUsername":"androiddev","sections":[{"type":2,"collectionHeaderMetadata":{"title":"Android Developers","description":"The official Android Developers publication on Medium","backgroundImage":{},"logoImage":{"id":"1*KismM-jT9LUMr1GMhlSPfg@2x.png","originalWidth":1000,"originalHeight":550,"alt":"Android Developers"},"alignment":2,"layout":5}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":7,"postIds":[]}},{"type":1,"postListMetadata":{"source":4,"layout":4,"number":3,"postIds":[],"tagSlug":"Now In Android","sectionHeader":"Now in Android"}},{"type":1,"postListMetadata":{"source":1,"layout":5,"number":7,"postIds":[]}}],"tintColor":"#FF202124","lightText":true,"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FF848488","point":0},{"color":"#FF7B7B7E","point":0.1},{"color":"#FF717275","point":0.2},{"color":"#FF68686B","point":0.3},{"color":"#FF5E5E60","point":0.4},{"color":"#FF545456","point":0.5},{"color":"#FF4A494B","point":0.6},{"color":"#FF3F3E40","point":0.7},{"color":"#FF333334","point":0.8},{"color":"#FF272728","point":0.9},{"color":"#FF1A1A1A","point":1}],"backgroundColor":"#FFFFFFFF"},"tintBackgroundSpectrum":{"colorPoints":[{"color":"#FF202124","point":0},{"color":"#FF3D3E41","point":0.1},{"color":"#FF58585B","point":0.2},{"color":"#FF707073","point":0.3},{"color":"#FF878689","point":0.4},{"color":"#FF9D9C9E","point":0.5},{"color":"#FFB2B1B2","point":0.6},{"color":"#FFC6C5C6","point":0.7},{"color":"#FFDAD8DA","point":0.8},{"color":"#FFEEEBEC","point":0.9},{"color":"#FFFFFEFF","point":1}],"backgroundColor":"#FF202124"},"highlightSpectrum":{"colorPoints":[{"color":"#FFF4F2F3","point":0},{"color":"#FFF2F0F1","point":0.1},{"color":"#FFF0EEEF","point":0.2},{"color":"#FFEEECEE","point":0.3},{"color":"#FFECEAEC","point":0.4},{"color":"#FFEAE8EA","point":0.5},{"color":"#FFE8E7E9","point":0.6},{"color":"#FFE6E5E7","point":0.7},{"color":"#FFE4E3E5","point":0.8},{"color":"#FFE2E1E4","point":0.9},{"color":"#FFE0DFE2","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FF9C9CA0","point":0},{"color":"#FFA5A5A8","point":0.1},{"color":"#FFAEADB0","point":0.2},{"color":"#FFB6B6B8","point":0.3},{"color":"#FFBFBEC0","point":0.4},{"color":"#FFC7C6C8","point":0.5},{"color":"#FFD0CED0","point":0.6},{"color":"#FFD8D6D8","point":0.7},{"color":"#FFE0DEDF","point":0.8},{"color":"#FFE8E6E7","point":0.9},{"color":"#FFF0EEEE","point":1}],"backgroundColor":"#FF000000"}},"navItems":[{"type":5,"title":"Archive","url":"https://medium.com/androiddevelopers/archive"},{"type":1,"title":"Kotlin","tagSlug":"kotlin","url":"https://medium.com/androiddevelopers/tagged/kotlin","source":"tagSlug"},{"type":1,"title":"Design","tagSlug":"design","url":"https://medium.com/androiddevelopers/tagged/design","source":"tagSlug"},{"type":1,"title":"Android Studio","tagSlug":"android-studio","url":"https://medium.com/androiddevelopers/tagged/android-studio","source":"tagSlug"},{"type":1,"title":"Now in Android","tagSlug":"now-in-android","url":"https://medium.com/androiddevelopers/tagged/now-in-android","source":"tagSlug"},{"type":1,"title":"Modern Android Development","tagSlug":"mad-skills","url":"https://medium.com/androiddevelopers/tagged/mad-skills","source":"tagSlug"},{"type":3,"title":"developer.android.com","url":"https://developer.android.com"}],"colorBehavior":2,"collectionFeatures":[30,25],"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"title":"Android Developers","description":"The official Android Developers publication on Medium","backgroundImage":{},"logoImage":{"id":"1*KismM-jT9LUMr1GMhlSPfg@2x.png","originalWidth":1000,"originalHeight":550,"alt":"Android Developers"},"alignment":2,"layout":5},"subscriberCount":52037,"tagline":"The official Android Developers publication on Medium","isOptedIntoAurora":false,"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"ptsQualifiedAt":1616092827591,"type":"Collection"}},"User":{"e0a4c9469bb5":{"userId":"e0a4c9469bb5","name":"Jose Alcérreca","username":"JoseAlcerreca","createdAt":1495810548469,"imageId":"1*77Cp-wcWyr66fqcTY8_pWw.jpeg","backgroundImageId":"","bio":"Developer Relations Engineer @ Google, working on Android","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[32,29,12,8,50,30,2,18,1,33],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"2e0fc9a4a8c2":{"userId":"2e0fc9a4a8c2","name":"Daniel Galpin","username":"dagalpin","createdAt":1474402225633,"imageId":"1*9j85cICWzDQeY8Nb4QrL4Q.jpeg","backgroundImageId":"","bio":"Developer Advocate at Google, writer, editor, theatrical performer, and social dancer.","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[8,5,21,12,2,18],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"7135eabf926a":{"userId":"7135eabf926a","name":"Chris Assigbe","username":"cka.dev","createdAt":1650240631611,"imageId":"0*0akzOFMkyCBtSEal","backgroundImageId":"","bio":"Android Developer Relation Engineer @ Google","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedAndroidApp":1711681729608,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[8,50,29,19],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"9e7508235c54":{"userId":"9e7508235c54","name":"Paul Lammertsma","username":"paul-lammertsma","createdAt":1432409791778,"imageId":"1*9iTWrsHbiBBuGTPtiHgpgQ.jpeg","backgroundImageId":"","bio":"Senior Developer Relations Engineer at Google","twitterScreenName":"officesunshine","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedAndroidApp":1575140514576,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[48,29,12,8,50,21,3,2,18,1],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"7f5a2cb6598e":{"userId":"7f5a2cb6598e","name":"Don Turner","username":"donturner","createdAt":1438092804404,"imageId":"1*F2tQfS9RL-Br9vcm_ih_NQ.png","backgroundImageId":"","bio":"Android Developer Relations Engineer @ Google","twitterScreenName":"donturner","allowNotes":1,"mediumMemberAt":1703442993000,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[48,12,8,50,2,33,49],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"},"401951cd4c3e":{"userId":"401951cd4c3e","name":"Meghan Mehta","username":"magicalmeghan","createdAt":1586542020285,"imageId":"0*eEs786UmP2FQS810","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[12,2,18,1,33],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"54b43884b5c2":{"userId":"54b43884b5c2","name":"Ash Nohe","username":"ashley.nohe","createdAt":1602039488051,"imageId":"1*0dQdET0RLC8J6ZRVvRTr4Q.jpeg","backgroundImageId":"","bio":"Android Developer Relations Engineer","twitterScreenName":"","allowNotes":1,"mediumMemberAt":1709171062000,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedAndroidApp":1711254825731,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[48,50,29],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"b85a51f012d7":{"userId":"b85a51f012d7","name":"Kateryna Semenova","username":"katerynasemenova","createdAt":1479356464960,"imageId":"2*MWidJNpRKpwnPhMYw1hBTA.png","backgroundImageId":"","bio":"Android DevRel Eng @ Google. Former Software Eng @ Lyft","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"Kateryna Semenova","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[29,12,2,33],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"18e39dc8d413":{"userId":"18e39dc8d413","name":"Sa-ryong Kang","username":"justfaceit","createdAt":1455696467160,"imageId":"1*bjPRDOb6kj4pqp3fmf6DBQ@2x.jpeg","backgroundImageId":"","bio":"Developer Relations Engineer @ Android","twitterScreenName":"justfaceit_kr","allowNotes":1,"mediumMemberAt":1699855751000,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedAndroidApp":1590284757119,"isMembershipTrialEligible":true,"facebookDisplayName":"강사룡","optInToIceland":true,"hasCompletedProfile":true,"isCreatorPartnerProgramEnrolled":true,"userDismissableFlags":[29,12,11,9,8,50,5,21,2,1,33],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"}},"Post":{"255973814ae3":{"id":"255973814ae3","versionId":"52a31bfa09ac","creatorId":"e0a4c9469bb5","homeCollectionId":"95b274b437c2","title":"Test smarter, not harder: new testing strategies documentation","detectedLanguage":"en","latestVersion":"52a31bfa09ac","latestPublishedVersion":"52a31bfa09ac","hasUnpublishedEdits":false,"latestRev":84,"createdAt":1731664146239,"updatedAt":1732244083618,"acceptedAt":0,"firstPublishedAt":1732208584164,"latestPublishedAt":1732208584164,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"A significant update to our official documentation on testing strategies will help you create more robust apps across form factors.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*JZHO5lsnXJ3BvUdHHbN8xA.png","filter":"","backgroundSize":"","originalWidth":8418,"originalHeight":2506,"strategy":"resample","height":0,"width":0},"wordCount":334,"imageCount":2,"readingTime":1.6437106918238993,"subtitle":"A significant update to our official documentation on testing strategies will help you create more robust apps across form factors.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":76,"isBookmarked":false,"tags":[{"slug":"android","name":"Android","postCount":143707,"metadata":{"postCount":143707,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"testing","name":"Testing","postCount":42730,"metadata":{"postCount":42730,"coverImage":{"id":"1*JZHO5lsnXJ3BvUdHHbN8xA.png","originalWidth":8418,"originalHeight":2506,"isFeatured":true}},"type":"Tag"},{"slug":"strategy","name":"Strategies","postCount":0,"metadata":{"postCount":0,"coverImage":{"id":"1*ioJcvmspHppM5bLHAu-LmA.jpeg","originalWidth":1520,"originalHeight":855,"isFeatured":true}},"type":"Tag"},{"slug":"screenshots","name":"Screenshot","postCount":38,"metadata":{"postCount":38,"coverImage":{"id":"1*RmX3hlAjDKK3aFv9H40n5A.png","originalWidth":1414,"originalHeight":771}},"type":"Tag"},{"slug":"large-screen","name":"Large Screen","postCount":23,"metadata":{"postCount":23,"coverImage":{"id":"1*JZHO5lsnXJ3BvUdHHbN8xA.png","originalWidth":8418,"originalHeight":2506,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":8,"links":{"entries":[{"url":"https://developer.android.com/training/testing/instrumented-tests/stability","alts":[],"httpStatus":200},{"url":"https://developer.android.com/training/testing/ui-tests/behavior","alts":[],"httpStatus":200},{"url":"https://developer.android.com/training/testing/ui-tests/screenshot","alts":[],"httpStatus":200},{"url":"https://developer.android.com/training/testing/instrumented-tests/performance","alts":[],"httpStatus":200},{"url":"https://developer.android.com/training/testing/local-tests/robolectric","alts":[],"httpStatus":200},{"url":"https://developer.android.com/training/testing/different-screens","alts":[],"httpStatus":200},{"url":"https://developer.android.com/training/testing/different-screens/tools","alts":[],"httpStatus":200},{"url":"https://developer.android.com/training/testing/fundamentals/strategies","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1732208584925},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":436,"sectionCount":1,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"test-smarter-not-harder-new-testing-strategies-documentation","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"test-smarter-not-harder-new-testing-strategies-documentation-255973814ae3","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*JZHO5lsnXJ3BvUdHHbN8xA.png","originalWidth":8418,"originalHeight":2506,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"Test smarter, not harder: new testing strategies documentation","alignment":1},{"name":"previewSubtitle","type":13,"text":"A significant update to our official…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"A significant update to our official documentation on testing strategies will help you create more robust apps across form factors."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"95b274b437c2","isNewsletter":false,"newsletterId":"5911ec30410a","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"e3b0","type":4,"text":"","markups":[],"layout":3,"metadata":{"id":"1*JZHO5lsnXJ3BvUdHHbN8xA.png","originalWidth":8418,"originalHeight":2506,"isFeatured":true}},{"name":"7853","type":3,"text":"Test smarter, not harder: new testing strategies documentation","markups":[{"type":2,"start":0,"end":62}]},{"name":"cf1f","type":13,"text":"We’re pleased to announce a significant update to our official documentation on testing strategies for Android developers. These new guides will help you create more robust and reliable apps across form factors.","markups":[]},{"name":"e871","type":1,"text":"We work closely with many teams and one thing they all have in common is a justified growing focus on automated testing. More features, more form factors, and more supported Android releases make tests increasingly important. These guides don’t focus on testing more, but on testing thoughtfully so that bugs…","markups":[]}],"sections":[{"name":"01fa","startIndex":0}]},"isFullContent":false,"subtitle":"A significant update to our official documentation on testing strategies will help you create more robust apps across form factors."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"9c60a12a8473":{"id":"9c60a12a8473","versionId":"6048d46eb879","creatorId":"2e0fc9a4a8c2","homeCollectionId":"95b274b437c2","title":"Now in Android #111","detectedLanguage":"en","latestVersion":"6048d46eb879","latestPublishedVersion":"6048d46eb879","hasUnpublishedEdits":false,"latestRev":440,"createdAt":1730914339622,"updatedAt":1732053090545,"acceptedAt":0,"firstPublishedAt":1731018671662,"latestPublishedAt":1732053090545,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Android API level and schedule updates, Gemini in Android Studio, Google Play, Spotlight weeks and more.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*Sy3ea40KCd6LSmU6QFUgDA.png","filter":"","backgroundSize":"","originalWidth":4209,"originalHeight":1253,"strategy":"resample","height":0,"width":0},"wordCount":2075,"imageCount":6,"readingTime":8.780188679245283,"subtitle":"Android API level and schedule updates, Gemini in Android Studio, Google Play, Spotlight weeks and more.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":13,"isBookmarked":false,"tags":[{"slug":"featured","name":"Featured","postCount":21971,"metadata":{"postCount":21971,"coverImage":{"id":"0*nNNyAghOG14FnvLy","originalWidth":4504,"originalHeight":3005,"isFeatured":true,"unsplashPhotoId":"wdLHQhAIYQQ"}},"type":"Tag"},{"slug":"jetpack-compose","name":"Jetpack Compose","postCount":6070,"metadata":{"postCount":6070,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"google-play","name":"Google Play","postCount":2065,"metadata":{"postCount":2065,"coverImage":{"id":"0*pETwxMy8JQPm7pJY","originalWidth":3840,"originalHeight":2160,"isFeatured":true,"alt":"A grid of apps","unsplashPhotoId":"Xe21OFRpqvk"}},"type":"Tag"},{"slug":"android-studio","name":"Android Studio","postCount":3620,"metadata":{"postCount":3620,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"now-in-android","name":"Now In Android","postCount":114,"metadata":{"postCount":114,"coverImage":{"id":"0*EUh5iWsPNCiAJm93","originalWidth":1600,"originalHeight":477,"isFeatured":true,"alt":"Now in Android title, showing a timer, the Android Developers pixelated brackets, a green Android head, and a caption bubble."}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://nowinandroid.libsyn.com/111-android-api-level-and-schedule-updates-gemini-in-android-studio-google-play","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/09/introduction-to-large-language-models-for-android-developers.html","alts":[],"httpStatus":200},{"url":"https://adbackstage.libsyn.com/episode-208-micro-optimizations","alts":[],"httpStatus":200},{"url":"http://adbackstage.libsyn.com/episode-210-studio-jewelry","alts":[],"httpStatus":200},{"url":"https://play.google.com/store/apps/details?id=com.alltrails.alltrails&hl=en_US","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/10/introduction-to-privacy-and-safety-gemini-nano.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/10/gemini-api-showcase-of-innovative-android-apps.html","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/09/attestation-format-change-for-android-fido2-api.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/10/gemini-nano-experimental-access-available-on-android.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/10/pytorch-machine-learning-models-on-android.html","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/10/creating-responsive-dashboard-layout-for-jetlagged-jetpack-compose.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/10/bring-your-ai-model-to-android-devices.html","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/10/whats-new-in-gemini-in-android.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/10/introducing-ink-api-jetpack-library.html","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/10/adaptive-spotlight-week.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/05/android-for-cars-bringing-more-apps-to-cars.html","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/10/flipaclip-optimizes-for-tablets-and-stylus.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/10/whats-new-in-google-play.html","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/10/whats-new-in-google-play.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/09/gemini-android-studio-code-completion-model-improvements.html","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/10/camerax-update-makes-dual-concurrent-camera-easier.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/09/alltrails-gains-over-1-million-downloads-wear-os-app.html","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/10/chrome-3p-autofill-services.html","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/09/welcome-to-ai-on-android-spotlight-week.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/09/developer-preview-desktop-windowing-on-android-tablets.html","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/10/weareplay-nomadher-helps-women-travel-the-world.html","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/10/android-sdk-release-update.html","alts":[],"httpStatus":200},{"url":"https://developer.android.com/productivity","alts":[],"httpStatus":200},{"url":"https://io.google/2024/explore/2dff9b4c-4069-4bde-ab9a-c5f53dc0fdb8/","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/user/androiddevelopers","alts":[{"type":2,"url":"vnd.youtube://www.youtube.com/channel/UCVHFbqXqoYvEWM1Ddxl0QDg"},{"type":3,"url":"https://www.youtube.com/channel/UCVHFbqXqoYvEWM1Ddxl0QDg?feature=applinks"}],"httpStatus":200},{"url":"https://www.youtube.com/@AndroidDevelopers/shorts","alts":[{"type":2,"url":"vnd.youtube://www.youtube.com/channel/UCVHFbqXqoYvEWM1Ddxl0QDg"},{"type":3,"url":"https://www.youtube.com/channel/UCVHFbqXqoYvEWM1Ddxl0QDg?feature=applinks"}],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/ink#1.0.0-alpha01","alts":[],"httpStatus":200},{"url":"https://github.com/android/compose-samples/tree/main/JetLagged","alts":[],"httpStatus":200},{"url":"https://developer.android.com/codelabs/gemini-summarize","alts":[],"httpStatus":200},{"url":"https://developer.android.com/media/camera/camerax","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/versions/all-channel","alts":[],"httpStatus":200},{"url":"https://github.com/android/compose-samples/pull/1473","alts":[],"httpStatus":200},{"url":"https://developer.android.com/get-started/codelabs","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/credentials-registry#1.0.0-alpha01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/adaptive-apps","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/constraintlayout#constraintlayout-2.2.0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/codelabs/large-screens/advanced-activity-embedding","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/wear-protolayout#1.3.0-alpha01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/compose/layouts/flow","alts":[],"httpStatus":200},{"url":"http://d.android.com/wear","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/LookaheadScope","alts":[],"httpStatus":200},{"url":"https://developer.android.com/codelabs/gemini-summarize#0","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=QyoL7QC5LHU","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/large-screens/support-different-screen-sizes#window_size_classes","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=tU9-p4jME_w","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=uBmwECZdbpw","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=qP-ieASbqMY","alts":[],"httpStatus":200},{"url":"https://youtu.be/EpKghZYqVW4","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=ZfIE-LATgH4","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=MwoRPPzeLtA","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/wear-tiles#1.5.0-alpha01","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=iKTgKGeTRzg","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/live/rFmyljhUxEY?si=ysRQp3_rBHEvvi0x","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/camera/core/CompositionSettings","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/compose-material3#1.4.0-alpha01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/camera#1.5.0-alpha01","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=peEbiF8PsT4","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=ukqFbqL2uuM","alts":[],"httpStatus":200},{"url":"https://youtu.be/WRzkRWxBAZU","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=HmjKmoct3Ws","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=JYtLy4V2x-A","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=EhSIqbR2K-c","alts":[],"httpStatus":200},{"url":"https://youtu.be/o1wY5vnNVCc?si=FQbKfGdJdbTwnjJP","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/camera/core/ConcurrentCamera.SingleCameraConfig#SingleCameraConfig%28androidx.camera.core.CameraSelector,androidx.camera.core.UseCaseGroup,androidx.camera.core.CompositionSettings,androidx.lifecycle.LifecycleOwner%29","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=DDN2pJ0SzNw","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=PUxtjQWJj6A","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/navigation#2.9.0-alpha01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/games#4.0.0-alpha01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/constraintlayout#1.1.0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/activity/ComponentActivity#(androidx.activity.ComponentActivity).enableEdgeToEdge(androidx.activity.SystemBarStyle,androidx.activity.SystemBarStyle)","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/compose/runtime/package-summary#movableContentOf%28kotlin.Function4%29","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1732053092332},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":124,"sectionCount":2,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"now-in-android-111","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"now-in-android-111-9c60a12a8473","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*Sy3ea40KCd6LSmU6QFUgDA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},{"name":"8c97","type":3,"text":"Now in Android #111","markups":[],"alignment":1},{"name":"c5b8","type":13,"text":"Android API level and schedule updates, Gemini in Android Studio, Google Play…","markups":[{"type":3,"start":0,"end":38,"href":"https://android-developers.googleblog.com/2024/10/whats-new-in-google-play.html","title":"","rel":"","anchorType":0},{"type":3,"start":40,"end":64,"href":"http://android-developers.googleblog.com/2024/10/whats-new-in-gemini-in-android.html","title":"","rel":"noopener","anchorType":0},{"type":3,"start":65,"end":77,"href":"http://android-developers.googleblog.com/2024/10/whats-new-in-google-play.html","title":"","rel":"noopener","anchorType":0}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Android API level and schedule updates, Gemini in Android Studio, Google Play, Spotlight weeks and more."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"95b274b437c2","isNewsletter":false,"newsletterId":"b5450b5b1c61","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":4,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"43bd","type":4,"text":"","markups":[],"layout":3,"metadata":{"id":"1*Sy3ea40KCd6LSmU6QFUgDA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},{"name":"8c97","type":3,"text":"Now in Android #111","markups":[]},{"name":"c5b8","type":13,"text":"Android API level and schedule updates, Gemini in Android Studio, Google Play, Spotlight weeks on Adaptive Android Apps and Android AI, concurrent CameraX, responsive layout, lazy grids, and AnchoredDraggable in Jetpack Compose, KMP in Room","markups":[{"type":3,"start":0,"end":38,"href":"https://android-developers.googleblog.com/2024/10/whats-new-in-google-play.html","title":"","rel":"","anchorType":0},{"type":3,"start":40,"end":64,"href":"http://android-developers.googleblog.com/2024/10/whats-new-in-gemini-in-android.html","title":"","rel":"noopener","anchorType":0},{"type":3,"start":65,"end":77,"href":"http://android-developers.googleblog.com/2024/10/whats-new-in-google-play.html","title":"","rel":"noopener","anchorType":0},{"type":3,"start":98,"end":119,"href":"http://android-developers.googleblog.com/2024/10/adaptive-spotlight-week.html","title":"","rel":"noopener","anchorType":0},{"type":3,"start":124,"end":134,"href":"http://android-developers.googleblog.com/2024/09/welcome-to-ai-on-android-spotlight-week.html","title":"","rel":"noopener","anchorType":0},{"type":3,"start":136,"end":154,"href":"http://android-developers.googleblog.com/2024/10/camerax-update-makes-dual-concurrent-camera-easier.html","title":"","rel":"noopener","anchorType":0},{"type":3,"start":156,"end":173,"href":"http://android-developers.googleblog.com/2024/10/creating-responsive-dashboard-layout-for-jetlagged-jetpack-compose.html","title":"","rel":"noopener","anchorType":0},{"type":3,"start":175,"end":185,"href":"https://www.youtube.com/watch?v=qP-ieASbqMY","title":"","rel":"noopener","anchorType":0},{"type":3,"start":191,"end":208,"href":"https://www.youtube.com/watch?v=JYtLy4V2x-A","title":"","rel":"noopener","anchorType":0},{"type":3,"start":229,"end":240,"href":"https://www.youtube.com/watch?v=MwoRPPzeLtA","title":"","rel":"noopener","anchorType":0}]},{"name":"5a1f","type":1,"text":"Welcome to the 111th iteration of Now in Android: your ongoing guide to what’s new and notable in the world of Android development.","markups":[]},{"name":"6e7a","type":11,"text":"","markups":[],"layout":1,"iframe":{"mediaResourceId":"d37825d067fffbbe39ee8c01759384db","iframeWidth":854,"iframeHeight":480,"thumbnailUrl":"https://i.embed.ly/1/image?url=https%3A%2F%2Fi.ytimg.com%2Fvi%2FWRzkRWxBAZU%2Fhqdefault.jpg&key=a19fcc184b9711e1b4764040d3dc5c07"}},{"name":"4781","type":11,"text":"","markups":[],"layout":1,"iframe":{"mediaResourceId":"a093a491fbba1c8c9be96c43ae91a258","iframeWidth":600,"iframeHeight":90,"thumbnailUrl":"https://i.embed.ly/1/image?url=https%3A%2F%2Fassets.libsyn.com%2Fsecure%2Fitem%2F33837087&key=a19fcc184b9711e1b4764040d3dc5c07"}},{"name":"a52b","type":1,"text":"Most of the content of this post is available in the form of a video or podcast, so feel free to watch or listen rather…","markups":[{"type":3,"start":63,"end":68,"href":"https://youtu.be/WRzkRWxBAZU","title":"","rel":"","anchorType":0},{"type":3,"start":72,"end":79,"href":"https://nowinandroid.libsyn.com/111-android-api-level-and-schedule-updates-gemini-in-android-studio-google-play","title":"","rel":"","anchorType":0},{"type":3,"start":97,"end":102,"href":"https://youtu.be/WRzkRWxBAZU","title":"","rel":"","anchorType":0},{"type":3,"start":106,"end":112,"href":"https://nowinandroid.libsyn.com/111-android-api-level-and-schedule-updates-gemini-in-android-studio-google-play","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"bec8","startIndex":0}]},"isFullContent":false,"subtitle":"Android API level and schedule updates, Gemini in Android Studio, Google Play, Spotlight weeks and more."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"a8ae5802604f":{"id":"a8ae5802604f","versionId":"cfe275bf99fe","creatorId":"7135eabf926a","homeCollectionId":"95b274b437c2","title":"Now in Android #110","detectedLanguage":"en","latestVersion":"cfe275bf99fe","latestPublishedVersion":"cfe275bf99fe","hasUnpublishedEdits":false,"latestRev":842,"createdAt":1726623656560,"updatedAt":1731661998296,"acceptedAt":0,"firstPublishedAt":1728599724592,"latestPublishedAt":1728665284149,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Android 15, Credential Manager, Android Studio Koala, Compose for TV, & more","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*Sy3ea40KCd6LSmU6QFUgDA.png","filter":"","backgroundSize":"","originalWidth":4209,"originalHeight":1253,"strategy":"resample","height":0,"width":0},"wordCount":2691,"imageCount":3,"readingTime":10.704716981132076,"subtitle":"Android 15, Credential Manager, Android Studio Koala, Compose for TV, & more","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":9,"isBookmarked":false,"tags":[{"slug":"android-15","name":"Android 15","postCount":152,"metadata":{"postCount":152,"coverImage":{"id":"1*o9Cb9xSsB8ujXZdNE95xlQ.jpeg","originalWidth":1472,"originalHeight":832,"isFeatured":true}},"type":"Tag"},{"slug":"rcs-messaging","name":"Rcs Messaging","postCount":162,"metadata":{"postCount":162,"coverImage":{"id":"1*Sy3ea40KCd6LSmU6QFUgDA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},"type":"Tag"},{"slug":"android-studio","name":"Android Studio","postCount":3620,"metadata":{"postCount":3620,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"now-in-android","name":"Now In Android","postCount":114,"metadata":{"postCount":114,"coverImage":{"id":"0*EUh5iWsPNCiAJm93","originalWidth":1600,"originalHeight":477,"isFeatured":true,"alt":"Now in Android title, showing a timer, the Android Developers pixelated brackets, a green Android head, and a caption bubble."}},"type":"Tag"},{"slug":"featured","name":"Featured","postCount":21971,"metadata":{"postCount":21971,"coverImage":{"id":"0*nNNyAghOG14FnvLy","originalWidth":4504,"originalHeight":3005,"isFeatured":true,"unsplashPhotoId":"wdLHQhAIYQQ"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"mailto:bentrengrove@google.com","alts":[],"httpStatus":0},{"url":"https://adbackstage.libsyn.com/episode-209-compose-animations","alts":[],"httpStatus":200},{"url":"https://nowinandroid.libsyn.com/110-android-15-credential-manager-android-studio-koala-compose-for-tv-more","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/09/jetpack-compose-apis-for-building-adaptive-layouts-material-guidance-now-stable.html","alts":[],"httpStatus":200},{"url":"https://www.android.com/get-the-message/","alts":[],"httpStatus":200},{"url":"https://medium.com/androiddevelopers/migrating-compose-for-tv-from-alpha-to-stable-b0074d6fd350","alts":[{"type":3,"url":"medium://p/b0074d6fd350"},{"type":2,"url":"medium://p/b0074d6fd350"}],"httpStatus":200},{"url":"https://play.google.com/store/apps/details?id=br.com.estantemagica.simplificacao.app","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/09/streamlining-android-authentication-credential-manager-replaces-legacy-apis.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/08/android-studio-koala-feature-drop-is-stable.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/09/google-maps-improved-download-reliability-user-initiated-data-transfer-api.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/09/talkback-uses-gemini-nano-to-increase-low-vision-accessibility.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/09/android-15-spotlight-week.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/09/welcome-to-ai-on-android-spotlight-week.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/09/developer-preview-desktop-windowing-on-android-tablets.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/05/whats-new-in-jetpack-compose-at-io-24.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/09/android-15-is-released-to-aosp.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/09/weareplay-estante-magica-app-helping-kids-publish-books.html","alts":[],"httpStatus":200},{"url":"https://blog.google/products/android/android-gemini-google-ai/","alts":[],"httpStatus":200},{"url":"https://blog.google/products/platforms-devices/made-by-google-2024-collection/","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/compose-material3-adaptive#1.0.0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/identity/sign-in/single-tap-biometric","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/versions/all-channel","alts":[],"httpStatus":200},{"url":"https://medium.com/@romanofranz","alts":[{"type":3,"url":"medium://@romanofranz"},{"type":2,"url":"medium://@romanofranz"}],"httpStatus":200},{"url":"https://medium.com/@paul-lammertsma","alts":[{"type":2,"url":"medium://@paul-lammertsma"},{"type":3,"url":"medium://@paul-lammertsma"}],"httpStatus":200},{"url":"https://medium.com/@tzterencezhang","alts":[{"type":2,"url":"medium://@tzterencezhang"},{"type":3,"url":"medium://@tzterencezhang"}],"httpStatus":200},{"url":"https://medium.com/@ashley.nohe","alts":[{"type":3,"url":"medium://@ashley.nohe"},{"type":2,"url":"medium://@ashley.nohe"}],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=GXngpeOx84c","alts":[],"httpStatus":200},{"url":"https://medium.com/androiddevelopers/type-safe-navigation-for-compose-105325a97657","alts":[{"type":3,"url":"medium://p/105325a97657"},{"type":2,"url":"medium://p/105325a97657"}],"httpStatus":200},{"url":"https://medium.com/@dagalpin","alts":[{"type":2,"url":"medium://@dagalpin"},{"type":3,"url":"medium://@dagalpin"}],"httpStatus":200},{"url":"https://www.youtube.com/live/N_y2tP9of8A","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=kFtFP5dBJDo","alts":[],"httpStatus":200},{"url":"https://medium.com/@magicalmeghan","alts":[{"type":2,"url":"medium://@magicalmeghan"},{"type":3,"url":"medium://@magicalmeghan"}],"httpStatus":200},{"url":"https://medium.com/@anomisSi","alts":[{"type":2,"url":"medium://@anomisSi"},{"type":3,"url":"medium://@anomisSi"}],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=r_BQZnlrTZY&list=PLWz5rJ2EKKc9AtgKMBBdphI-mrx8XzW56&index=1","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/media3#alpha01","alts":[],"httpStatus":200},{"url":"https://medium.com/@alexvanyo","alts":[{"type":2,"url":"medium://@alexvanyo"},{"type":3,"url":"medium://@alexvanyo"}],"httpStatus":200},{"url":"https://medium.com/@donturner","alts":[{"type":2,"url":"medium://@donturner"},{"type":3,"url":"medium://@donturner"}],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/compose-runtime#1.7.0","alts":[],"httpStatus":200},{"url":"https://medium.com/androiddevelopers/preview-and-test-your-apps-edge-to-edge-ui-da645c905d78","alts":[{"type":3,"url":"medium://p/da645c905d78"},{"type":2,"url":"medium://p/da645c905d78"}],"httpStatus":200},{"url":"https://medium.com/androiddevelopers/insets-handling-tips-for-android-15s-edge-to-edge-enforcement-872774e8839b","alts":[{"type":3,"url":"medium://p/872774e8839b"},{"type":2,"url":"medium://p/872774e8839b"}],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/compose-animation#1.7.0","alts":[],"httpStatus":200},{"url":"https://medium.com/@riggaroo","alts":[{"type":2,"url":"medium://@riggaroo"},{"type":3,"url":"medium://@riggaroo"}],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/health-connect#testing-1.0.0-alpha01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/camera#1.5.0-alpha01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/wear-compose#1.4.0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/compose-foundation#1.7.0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/collection#1.4.3","alts":[],"httpStatus":200},{"url":"https://developer.android.com/about/versions/15/features#private-space","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/compose-ui#1.7.0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/compose-material#1.7.0","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1728665285469},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":86,"sectionCount":2,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"},{"topicId":"f862bfc84e38","slug":"technology","createdAt":1487918016768,"deletedAt":0,"image":{"id":"1*XxQLrxqHUlIHg5j-eIQrPQ@2x.png","originalWidth":640,"originalHeight":384},"name":"Technology","description":"The download.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Technology News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"now-in-android-110","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"now-in-android-110-a8ae5802604f","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*Sy3ea40KCd6LSmU6QFUgDA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"Now in Android #110","alignment":1},{"name":"previewSubtitle","type":13,"text":"Android 15, Credential Manager, Android Studio Koala, Compose for TV, & more","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Android 15, Credential Manager, Android Studio Koala, Compose for TV, & more"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"95b274b437c2","isNewsletter":false,"newsletterId":"81b0c07fdf08","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":4,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"5e64","type":4,"text":"","markups":[],"layout":3,"metadata":{"id":"1*Sy3ea40KCd6LSmU6QFUgDA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},{"name":"cc35","type":3,"text":"Now in Android #110","markups":[]},{"name":"5e0b","type":1,"text":"Welcome to episode 110 of Now in Android: your ongoing guide to what’s new and notable in the world of Android development.","markups":[]},{"name":"a43c","type":1,"text":"In this episode, we’ll cover Android 15 is released in AOSP, RCS support on iOS, Pixel Hardware Event, the latest #AndroidShow, Android Studio Koala feature drop, Compose Adaptive…","markups":[{"type":3,"start":29,"end":59,"href":"https://android-developers.googleblog.com/2024/09/android-15-is-released-to-aosp.html","title":"","rel":"","anchorType":0},{"type":3,"start":61,"end":79,"href":"https://www.android.com/get-the-message/","title":"","rel":"","anchorType":0},{"type":3,"start":81,"end":101,"href":"https://blog.google/products/platforms-devices/made-by-google-2024-collection/","title":"","rel":"","anchorType":0},{"type":3,"start":128,"end":161,"href":"https://android-developers.googleblog.com/2024/08/android-studio-koala-feature-drop-is-stable.html","title":"","rel":"","anchorType":0},{"type":3,"start":163,"end":194,"href":"https://android-developers.googleblog.com/2024/09/jetpack-compose-apis-for-building-adaptive-layouts-material-guidance-now-stable.html","title":"","rel":"","anchorType":0},{"type":3,"start":196,"end":213,"href":"https://android-developers.googleblog.com/2024/09/developer-preview-desktop-windowing-on-android-tablets.html","title":"","rel":"","anchorType":0},{"type":3,"start":261,"end":271,"href":"https://www.youtube.com/watch?v=GXngpeOx84c","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"be1d","startIndex":0}]},"isFullContent":false,"subtitle":"Android 15, Credential Manager, Android Studio Koala, Compose for TV, & more"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"b0074d6fd350":{"id":"b0074d6fd350","versionId":"9dcfe88b199c","creatorId":"9e7508235c54","homeCollectionId":"95b274b437c2","title":"Migrating Compose for TV from alpha to stable","detectedLanguage":"en","latestVersion":"9dcfe88b199c","latestPublishedVersion":"9dcfe88b199c","hasUnpublishedEdits":false,"latestRev":810,"createdAt":1718031333598,"updatedAt":1731784662228,"acceptedAt":0,"firstPublishedAt":1726070716444,"latestPublishedAt":1726070716444,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"We’ve shifted a few things around as Compose for TV graduated out of alpha. Migrate easily with the following tips.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*4TfBraMwMxGVGOUlaHlO5w.png","filter":"","backgroundSize":"","originalWidth":4209,"originalHeight":1253,"strategy":"resample","height":0,"width":0},"wordCount":545,"imageCount":2,"readingTime":2.439937106918239,"subtitle":"We’ve shifted a few things around as Compose for TV graduated out of alpha. Migrate easily with the following tips.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":21,"isBookmarked":false,"tags":[{"slug":"android-tv","name":"Android Tv","postCount":549,"metadata":{"postCount":549,"coverImage":{"id":"0*G9qLGRoeBRO7sCld.png","originalWidth":1920,"originalHeight":1016,"isFeatured":true}},"type":"Tag"},{"slug":"android-development","name":"Android Development","postCount":5156,"metadata":{"postCount":5156,"coverImage":{"id":"1*l4w3lWSwIWfC8TIMY6vfYA.png","originalWidth":1024,"originalHeight":1024,"isFeatured":true}},"type":"Tag"},{"slug":"jetpack-compose","name":"Jetpack Compose","postCount":6070,"metadata":{"postCount":6070,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"best-practices","name":"Best Practices","postCount":15535,"metadata":{"postCount":15535,"coverImage":{"id":"1*MvGWm_lWnxGTOyjre5UTRA.jpeg","originalWidth":550,"originalHeight":826,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:tv/samples/src/main/java/androidx/tv/samples/ImmersiveListSamples.kt","alts":[],"httpStatus":200},{"url":"https://github.com/android/compose-samples/tree/main/Jetcaster","alts":[],"httpStatus":200},{"url":"https://gist.github.com/pflammertsma/83b30c893555fa23e006408b8b3dce75#file-positionfocusediteminlazylayout-kt","alts":[],"httpStatus":200},{"url":"https://github.com/android/tv-samples/tree/main/JetStreamCompose","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/tv","alts":[],"httpStatus":200},{"url":"https://github.com/android/tv-samples/blob/main/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/common/MoviesRow.kt#L208","alts":[],"httpStatus":200},{"url":"https://developer.android.com/training/tv/playback/compose","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/tv#tv-material-1.0.0-beta01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/ui/compose/why-adopt","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/tv#feedback","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/compose-foundation#1.7.0-beta02","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1726070718135},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":109,"sectionCount":2,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"migrating-compose-for-tv-from-alpha-to-stable","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"migrating-compose-for-tv-from-alpha-to-stable-b0074d6fd350","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*4TfBraMwMxGVGOUlaHlO5w.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"Migrating Compose for TV from alpha to stable","alignment":1},{"name":"previewSubtitle","type":13,"text":"We’ve shifted a few things around as Compose for TV…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"We’ve shifted a few things around as Compose for TV graduated out of alpha. Migrate easily with the following tips."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"95b274b437c2","isNewsletter":false,"newsletterId":"8d501bf0248f","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"798b","type":4,"text":"Compose for TV is now stable in version 1.0","markups":[],"layout":3,"metadata":{"id":"1*4TfBraMwMxGVGOUlaHlO5w.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},{"name":"7319","type":3,"text":"Migrating Jetpack Compose for TV from alpha to stable","markups":[]},{"name":"5431","type":1,"text":"Thanks for all your feedback from using the alphas to help bring Compose for TV to the stable release! It’s terrific that you’ve been using Compose in your TV apps — then you’ve seen how Compose is the best way to build user interfaces across all form factors in Android…","markups":[{"type":3,"start":186,"end":210,"href":"https://developer.android.com/develop/ui/compose/why-adopt","title":"","rel":"","anchorType":0},{"type":3,"start":278,"end":324,"href":"https://developer.android.com/training/tv/playback/compose","title":"","rel":"","anchorType":0},{"type":1,"start":0,"end":102},{"type":1,"start":243,"end":246},{"type":2,"start":243,"end":246}]}],"sections":[{"name":"0fce","startIndex":0}]},"isFullContent":false,"subtitle":"We’ve shifted a few things around as Compose for TV graduated out of alpha. Migrate easily with the following tips."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"105325a97657":{"id":"105325a97657","versionId":"369eff93a3b1","creatorId":"7f5a2cb6598e","homeCollectionId":"95b274b437c2","title":"Type safe navigation for Compose","detectedLanguage":"en","latestVersion":"369eff93a3b1","latestPublishedVersion":"369eff93a3b1","hasUnpublishedEdits":false,"latestRev":1142,"createdAt":1724239586158,"updatedAt":1731816675593,"acceptedAt":0,"firstPublishedAt":1725494771383,"latestPublishedAt":1725960003691,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Jetpack Navigation 2.8.0 enhances Kotlin navigation. Type-safe APIs that improve code safety, simplify graph creation, and more.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*jpVm3Kc_A-n-7LaCVbHrpQ.png","filter":"","backgroundSize":"","originalWidth":4209,"originalHeight":1253,"strategy":"resample","height":0,"width":0},"wordCount":2793,"imageCount":3,"readingTime":11.089622641509434,"subtitle":"Jetpack Navigation 2.8.0 enhances Kotlin navigation. Type-safe APIs that improve code safety, simplify graph creation, and more.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":106,"isBookmarked":false,"tags":[{"slug":"compose","name":"Compose","postCount":1022,"metadata":{"postCount":1022,"coverImage":{"id":"1*ykPIAcpLN3vaghlbIH2Trw.jpeg","originalWidth":1100,"originalHeight":617}},"type":"Tag"},{"slug":"compose-ui","name":"Compose Ui","postCount":331,"metadata":{"postCount":331,"coverImage":{"id":"1*vqdr6i8jC4gLHmNeoEfbwA.png","originalWidth":6912,"originalHeight":3456,"isFeatured":true}},"type":"Tag"},{"slug":"navigation","name":"Navigation","postCount":3821,"metadata":{"postCount":3821,"coverImage":{"id":"1*6RO3iYh-NUVykcev5SR45g.jpeg","originalWidth":400,"originalHeight":406}},"type":"Tag"},{"slug":"type-safety","name":"Type Safety","postCount":221,"metadata":{"postCount":221,"coverImage":{"id":"0*wg9TgOIkVR6cmc-k","originalWidth":5869,"originalHeight":4000,"isFeatured":true,"unsplashPhotoId":"ZFYg5jTvB4A"}},"type":"Tag"},{"slug":"best-practices","name":"Best Practices","postCount":15535,"metadata":{"postCount":15535,"coverImage":{"id":"1*MvGWm_lWnxGTOyjre5UTRA.jpeg","originalWidth":550,"originalHeight":826,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":6,"links":{"entries":[{"url":"http://www.hellonavigation.example.com/product//","alts":[],"httpStatus":0},{"url":"https://medium.com/androiddevelopers/navigation-compose-meet-type-safety-e081fb3cf2f8","alts":[{"type":3,"url":"medium://p/e081fb3cf2f8"},{"type":2,"url":"medium://p/e081fb3cf2f8"}],"httpStatus":200},{"url":"https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:navigation/navigation-common/src/main/java/androidx/navigation/CollectionNavType.kt","alts":[],"httpStatus":200},{"url":"https://b.corp.google.com/issues/358095343","alts":[],"httpStatus":200},{"url":"https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:navigation/navigation-common/src/main/java/androidx/navigation/NavType.kt;l=179","alts":[],"httpStatus":200},{"url":"https://source.corp.google.com/h/android/platform/frameworks/support/+/81043eb1b25606c0242fabd80c0714b3f91b4d82","alts":[],"httpStatus":200},{"url":"https://m3.material.io/components/navigation-rail/overview","alts":[],"httpStatus":200},{"url":"https://issuetracker.google.com/issues/358687142","alts":[],"httpStatus":200},{"url":"https://issuetracker.google.com/issues/352006850","alts":[],"httpStatus":200},{"url":"https://issuetracker.google.com/issues/new?component=409828&template=1093757","alts":[],"httpStatus":200},{"url":"https://issuetracker.google.com/360940641","alts":[],"httpStatus":200},{"url":"https://issuetracker.google.com/349807172","alts":[],"httpStatus":200},{"url":"https://github.com/android/nowinandroid/blob/main/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt#L26","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/ui/compose/layouts/adaptive/build-adaptive-navigation","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/navigation/design/type-safety","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/ui/compose/navigation","alts":[],"httpStatus":200},{"url":"https://kotlinlang.org/docs/serialization.html#example-json-serialization","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/navigation#set-up","alts":[],"httpStatus":200},{"url":"https://kotlinlang.org/docs/basic-types.html","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/datastore","alts":[],"httpStatus":200},{"url":"https://youtu.be/DZJV-ZKQ634?si=8WmEQY-5VXMO4psl","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/navigation","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/room","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/navigation/design/deep-link","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/navigation/design/kotlin-dsl#navgraphbuilder","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/navigation/design/kotlin-dsl","alts":[],"httpStatus":200},{"url":"https://developer.android.com/compose","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/os/TransactionTooLargeException","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/navigation/NavGraphBuilder#(androidx.navigation.NavGraphBuilder).composable(kotlin.collections.Map,kotlin.collections.List,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function2)","alts":[],"httpStatus":200},{"url":"https://developer.android.com/training/app-links/deep-linking#adding-filters","alts":[],"httpStatus":200},{"url":"https://github.com/android/nowinandroid/pull/1413","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1725960005383},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":441,"sectionCount":1,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"type-safe-navigation-for-compose","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"type-safe-navigation-for-compose-105325a97657","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*jpVm3Kc_A-n-7LaCVbHrpQ.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"Type safe navigation for Compose","alignment":1},{"name":"previewSubtitle","type":13,"text":"Jetpack Navigation 2.8.0 enhances Kotlin navigation. Type-safe APIs…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Jetpack Navigation 2.8.0 enhances Kotlin navigation. Type-safe APIs that improve code safety, simplify graph creation, and more."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"95b274b437c2","isNewsletter":false,"newsletterId":"195410eaa39a","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":1,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"43a4","type":4,"text":"","markups":[],"layout":3,"metadata":{"id":"1*jpVm3Kc_A-n-7LaCVbHrpQ.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},{"name":"2e21","type":3,"text":"Type safe navigation for Compose","markups":[]},{"name":"f383","type":1,"text":"With the latest release of Jetpack Navigation 2.8.0, the type safe navigation APIs for building navigation graphs in Kotlin are stable 🎉. This means that you can define your destinations using serializable types and benefit from compile-time safety.","markups":[{"type":3,"start":27,"end":51,"href":"https://developer.android.com/jetpack/androidx/releases/navigation","title":"","rel":"","anchorType":0}]},{"name":"251a","type":1,"text":"This is great news if you’re using Jetpack Compose for your UI…","markups":[{"type":3,"start":35,"end":50,"href":"https://developer.android.com/compose","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"fd59","startIndex":0}]},"isFullContent":false,"subtitle":"Jetpack Navigation 2.8.0 enhances Kotlin navigation. Type-safe APIs that improve code safety, simplify graph creation, and more."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"da645c905d78":{"id":"da645c905d78","versionId":"83096223f2bc","creatorId":"401951cd4c3e","homeCollectionId":"95b274b437c2","title":"Preview and test your app’s edge-to-edge UI","detectedLanguage":"en","latestVersion":"83096223f2bc","latestPublishedVersion":"83096223f2bc","hasUnpublishedEdits":false,"latestRev":801,"createdAt":1725389999456,"updatedAt":1731820803768,"acceptedAt":0,"firstPublishedAt":1725482796602,"latestPublishedAt":1725554212272,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Test and adapt your app’s UI using Compose Previews to ensure a seamless transition to Android 15’s edge-to-edge UI requirements.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*cbWmzhcQsly95rHdfYZA1g.png","filter":"","backgroundSize":"","originalWidth":17538,"originalHeight":5221,"strategy":"resample","height":0,"width":0},"wordCount":1788,"imageCount":21,"readingTime":8.547169811320755,"subtitle":"Test and adapt your app’s UI using Compose Previews to ensure a seamless transition to Android 15’s edge-to-edge UI requirements.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":31,"isBookmarked":false,"tags":[{"slug":"edge-to-edge","name":"Edge To Edge","postCount":11,"metadata":{"postCount":11,"coverImage":{"id":"1*cbWmzhcQsly95rHdfYZA1g.png","originalWidth":17538,"originalHeight":5221,"isFeatured":true}},"type":"Tag"},{"slug":"android-15","name":"Android 15","postCount":152,"metadata":{"postCount":152,"coverImage":{"id":"1*o9Cb9xSsB8ujXZdNE95xlQ.jpeg","originalWidth":1472,"originalHeight":832,"isFeatured":true}},"type":"Tag"},{"slug":"android-15-new-features","name":"Android 15 New Features","postCount":27,"metadata":{"postCount":27,"coverImage":{"id":"1*yHC2Cx1qnLclon2xOtnIig.jpeg","originalWidth":1920,"originalHeight":1080,"isFeatured":true}},"type":"Tag"},{"slug":"best-practices","name":"Best Practices","postCount":15535,"metadata":{"postCount":15535,"coverImage":{"id":"1*MvGWm_lWnxGTOyjre5UTRA.jpeg","originalWidth":550,"originalHeight":826,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://android-developers.googleblog.com/2024/09/android-15-spotlight-week.html","alts":[],"httpStatus":200},{"url":"https://android.googlesource.com/platform/frameworks/base/+/master/packages/SystemUI/docs/demo_mode.md","alts":[],"httpStatus":200},{"url":"https://medium.com/androiddevelopers/insets-handling-tips-for-android-15s-edge-to-edge-enforcement-872774e8839b","alts":[{"type":3,"url":"medium://p/872774e8839b"},{"type":2,"url":"medium://p/872774e8839b"}],"httpStatus":200},{"url":"https://developer.android.com/studio/report-bugs","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/ui/compose/tooling/previews","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/ui/compose/layouts/insets","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/app-compatibility/test-debug","alts":[],"httpStatus":200},{"url":"https://developer.android.com/studio/test/espresso-api","alts":[],"httpStatus":200},{"url":"https://github.com/android/nowinandroid/pull/1498/","alts":[],"httpStatus":200},{"url":"https://developer.android.com/training/testing/instrumented-tests","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/ui/views/layout/edge-to-edge","alts":[],"httpStatus":200},{"url":"https://developer.android.com/about/versions/15/reference/compat-framework-changes#enforce_edge_to_edge","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=QRzepC9gHj4&t=2s","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/activity/ComponentActivity#(androidx.activity.ComponentActivity).enableEdgeToEdge(androidx.activity.SystemBarStyle,androidx.activity.SystemBarStyle)","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.Companion#(androidx.compose.ui.test.DeviceConfigurationOverride.Companion).WindowInsets(androidx.core.view.WindowInsetsCompat)","alts":[],"httpStatus":200},{"url":"https://developer.android.com/codelabs/edge-to-edge?continue=https%3A%2F%2Fdeveloper.android.com%2Fcourses%2Fpathways%2Fimprove-user-experience%23codelab-https%3A%2F%2Fdeveloper.android.com%2Fcodelabs%2Fedge-to-edge#0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/training/testing/different-screens/tools#deviceconfigurationoverride","alts":[],"httpStatus":200},{"url":"https://developer.android.com/about/versions/15/behavior-changes-15#edge-to-edge","alts":[],"httpStatus":200},{"url":"https://developer.android.com/studio/preview","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1725554213839},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":202,"sectionCount":3,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"preview-and-test-your-apps-edge-to-edge-ui","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"preview-and-test-your-apps-edge-to-edge-ui-da645c905d78","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*cbWmzhcQsly95rHdfYZA1g.png","originalWidth":17538,"originalHeight":5221,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"Preview and test your app’s edge-to-edge UI","alignment":1},{"name":"previewSubtitle","type":13,"text":"Test and adapt your app’s UI using Compose Previews to…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Test and adapt your app’s UI using Compose Previews to ensure a seamless transition to Android 15’s edge-to-edge UI requirements."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"95b274b437c2","isNewsletter":false,"newsletterId":"0168c1a79809","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"b01c","type":4,"text":"","markups":[],"layout":3,"metadata":{"id":"1*cbWmzhcQsly95rHdfYZA1g.png","originalWidth":17538,"originalHeight":5221,"isFeatured":true}},{"name":"5eaa","type":3,"text":"Preview and test your app’s edge-to-edge UI","markups":[]},{"name":"d96e","type":1,"text":"This blog post is part of our series: Spotlight Week on Android 15, where we provide resources — blog posts, videos, sample code, and more — all designed to help you prepare your apps and take advantage of the latest features in Android 15. You can read more in the…","markups":[{"type":3,"start":249,"end":309,"href":"https://android-developers.googleblog.com/2024/09/android-15-spotlight-week.html","title":"","rel":"noopener ugc nofollow","anchorType":0},{"type":2,"start":0,"end":353}]}],"sections":[{"name":"bbdd","startIndex":0}]},"isFullContent":false,"subtitle":"Test and adapt your app’s UI using Compose Previews to ensure a seamless transition to Android 15’s edge-to-edge UI requirements."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"872774e8839b":{"id":"872774e8839b","versionId":"f079d82459c0","creatorId":"54b43884b5c2","homeCollectionId":"95b274b437c2","title":"Insets handling tips for Android 15’s edge-to-edge enforcement","detectedLanguage":"en","latestVersion":"f079d82459c0","latestPublishedVersion":"f079d82459c0","hasUnpublishedEdits":false,"latestRev":2376,"createdAt":1724726820977,"updatedAt":1731824043223,"acceptedAt":0,"firstPublishedAt":1725387152484,"latestPublishedAt":1725387152484,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Tips to ensure your apps handle insets correctly. Provide a seamless edge-to-edge experience on Android 15 devices.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*cbWmzhcQsly95rHdfYZA1g.png","filter":"","backgroundSize":"","originalWidth":17538,"originalHeight":5221,"strategy":"resample","height":0,"width":0},"wordCount":2882,"imageCount":20,"readingTime":12.625471698113207,"subtitle":"Tips to ensure your apps handle insets correctly. Provide a seamless edge-to-edge experience on Android 15 devices.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":94,"isBookmarked":false,"tags":[{"slug":"edge-to-edge","name":"Edge To Edge","postCount":11,"metadata":{"postCount":11,"coverImage":{"id":"1*cbWmzhcQsly95rHdfYZA1g.png","originalWidth":17538,"originalHeight":5221,"isFeatured":true}},"type":"Tag"},{"slug":"android-15","name":"Android 15","postCount":152,"metadata":{"postCount":152,"coverImage":{"id":"1*o9Cb9xSsB8ujXZdNE95xlQ.jpeg","originalWidth":1472,"originalHeight":832,"isFeatured":true}},"type":"Tag"},{"slug":"system-bars","name":"System Bars","postCount":3,"metadata":{"postCount":3,"coverImage":{"id":"1*cbWmzhcQsly95rHdfYZA1g.png","originalWidth":17538,"originalHeight":5221,"isFeatured":true}},"type":"Tag"},{"slug":"display-cutouts","name":"Display Cutouts","postCount":0,"metadata":{"postCount":0,"coverImage":{"id":"1*cbWmzhcQsly95rHdfYZA1g.png","originalWidth":17538,"originalHeight":5221,"isFeatured":true}},"type":"Tag"},{"slug":"windowinsets","name":"Window Insets","postCount":1,"metadata":{"postCount":1,"coverImage":{"id":"1*IheRinHr3oruj6fWycZQHg.png","originalWidth":1920,"originalHeight":1080}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":5,"links":{"entries":[{"url":"https://medium.com/androiddevelopers/is-your-app-providing-a-backward-compatible-edge-to-edge-experience-2479267073a0","alts":[{"type":3,"url":"medium://p/2479267073a0"},{"type":2,"url":"medium://p/2479267073a0"}],"httpStatus":200},{"url":"https://m3.material.io/blog/migrating-material-3","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/09/android-15-spotlight-week.html","alts":[],"httpStatus":404},{"url":"https://developer.android.com/develop/ui/compose/system/cutouts","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/ui/views/layout/edge-to-edge#cutout-insets","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/ui/views/layout/display-cutout","alts":[],"httpStatus":200},{"url":"https://developer.android.com/about/versions/15/behavior-changes-15#edge-to-edge","alts":[],"httpStatus":200},{"url":"https://developer.android.com/codelabs/edge-to-edge#4","alts":[],"httpStatus":200},{"url":"https://developer.android.com/studio/debug/dev-options","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/ui/compose/lists#content-padding","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/compose","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=mlL6H-s0nF0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/topics/manifest/activity-element#wsoft","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=QRzepC9gHj4","alts":[],"httpStatus":200},{"url":"https://m.youtube.com/watch?v=RimGfoOU67s","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/ui/views/layout/edge-to-edge#enable-edge-to-edge-display","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/ui/views/layout/edge-to-edge-manually","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/ui/compose/layouts/insets","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/WindowInsets.Companion#(androidx.compose.foundation.layout.WindowInsets.Companion).tappableElement()","alts":[],"httpStatus":200},{"url":"https://developer.android.com/about/versions/15/behavior-changes-15#deprecated-apis","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/ui/compose/layouts/insets#scaffold","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/package-summary#(androidx.compose.foundation.layout.WindowInsets.Companion).safeDrawing()","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier#(androidx.compose.ui.Modifier).imePadding()","alts":[],"httpStatus":200},{"url":"https://developer.android.com/codelabs/edge-to-edge#0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/package-summary#(androidx.compose.foundation.layout.WindowInsets.Companion).safeGestures()","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/ui/compose/layouts/insets#inset-consumption","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/view/WindowManager.LayoutParams#LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/compose/material/package-summary#BottomNavigation(androidx.compose.foundation.layout.WindowInsets,androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,androidx.compose.ui.unit.Dp,kotlin.Function1)","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/ui/views/layout/edge-to-edge","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/view/WindowManager.LayoutParams#LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/package-summary#(androidx.compose.foundation.layout.WindowInsets.Companion).safeContent()","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/core/view/WindowInsetsCompat.Type#ime()","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/view/WindowManager.LayoutParams#LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/view/WindowManager.LayoutParams#LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/compose/material/package-summary#TopAppBar(androidx.compose.foundation.layout.WindowInsets,androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,androidx.compose.ui.unit.Dp,androidx.compose.foundation.layout.PaddingValues,kotlin.Function1)","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/compose/material/package-summary#NavigationRail(androidx.compose.foundation.layout.WindowInsets,androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,androidx.compose.ui.unit.Dp,kotlin.Function1,kotlin.Function1)","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/compose/material/package-summary#Scaffold(androidx.compose.foundation.layout.WindowInsets,androidx.compose.ui.Modifier,androidx.compose.material.ScaffoldState,kotlin.Function0,kotlin.Function0,kotlin.Function1,kotlin.Function0,androidx.compose.material.FabPosition,kotlin.Boolean,kotlin.Function1,kotlin.Boolean,androidx.compose.ui.graphics.Shape,androidx.compose.ui.unit.Dp,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,kotlin.Function1)","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/compose/material/package-summary#BottomAppBar(androidx.compose.foundation.layout.WindowInsets,androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Shape,androidx.compose.ui.unit.Dp,androidx.compose.foundation.layout.PaddingValues,kotlin.Function1)","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1725387156774},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":558,"sectionCount":2,"readingList":0,"topics":[]},"coverless":true,"slug":"insets-handling-tips-for-android-15s-edge-to-edge-enforcement","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"insets-handling-tips-for-android-15s-edge-to-edge-enforcement-872774e8839b","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*cbWmzhcQsly95rHdfYZA1g.png","originalWidth":17538,"originalHeight":5221,"isFeatured":true}},{"name":"012f","type":3,"text":"Insets handling tips for Android 15’s edge-to-edge enforcement","markups":[{"type":1,"start":0,"end":62}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Tips to ensure your apps handle insets correctly. Provide a seamless edge-to-edge experience on Android 15 devices."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"95b274b437c2","isNewsletter":false,"newsletterId":"11c49bafae03","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":1,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"0f6c","type":4,"text":"","markups":[],"layout":3,"metadata":{"id":"1*cbWmzhcQsly95rHdfYZA1g.png","originalWidth":17538,"originalHeight":5221,"isFeatured":true}},{"name":"012f","type":3,"text":"Insets handling tips for Android 15’s edge-to-edge enforcement","markups":[{"type":1,"start":0,"end":62}]},{"name":"8b47","type":1,"text":"This blog post is part of our series: Spotlight Week on Android 15, where we provide resources — blog posts, videos, sample code, and more — all designed to help you prepare your apps and take advantage of the latest features in Android 15. You can read more in the…","markups":[{"type":3,"start":249,"end":309,"href":"https://android-developers.googleblog.com/2024/09/android-15-spotlight-week.html","title":"","rel":"","anchorType":0},{"type":2,"start":0,"end":353}]}],"sections":[{"name":"38ee","startIndex":0}]},"isFullContent":false,"subtitle":"Tips to ensure your apps handle insets correctly. Provide a seamless edge-to-edge experience on Android 15 devices."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"1dbf4e81b127":{"id":"1dbf4e81b127","versionId":"cb74eab3fe13","creatorId":"b85a51f012d7","homeCollectionId":"95b274b437c2","title":"Now in Android #109","detectedLanguage":"en","latestVersion":"cb74eab3fe13","latestPublishedVersion":"cb74eab3fe13","hasUnpublishedEdits":false,"latestRev":215,"createdAt":1724780118019,"updatedAt":1731862590675,"acceptedAt":0,"firstPublishedAt":1724793355089,"latestPublishedAt":1724793355089,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"The Fourth Beta of Android 15, Samsung’s Galaxy Unpacked event, Google Play’s new Collections feature and more.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*Sy3ea40KCd6LSmU6QFUgDA.png","filter":"","backgroundSize":"","originalWidth":4209,"originalHeight":1253,"strategy":"resample","height":0,"width":0},"wordCount":1072,"imageCount":2,"readingTime":4.428616352201258,"subtitle":"The Fourth Beta of Android 15, Samsung’s Galaxy Unpacked event, Google Play’s new Collections feature and more.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":8,"isBookmarked":false,"tags":[{"slug":"android-15","name":"Android 15","postCount":152,"metadata":{"postCount":152,"coverImage":{"id":"1*o9Cb9xSsB8ujXZdNE95xlQ.jpeg","originalWidth":1472,"originalHeight":832,"isFeatured":true}},"type":"Tag"},{"slug":"google-play","name":"Google Play","postCount":2065,"metadata":{"postCount":2065,"coverImage":{"id":"0*pETwxMy8JQPm7pJY","originalWidth":3840,"originalHeight":2160,"isFeatured":true,"alt":"A grid of apps","unsplashPhotoId":"Xe21OFRpqvk"}},"type":"Tag"},{"slug":"featured","name":"Featured","postCount":21971,"metadata":{"postCount":21971,"coverImage":{"id":"0*nNNyAghOG14FnvLy","originalWidth":4504,"originalHeight":3005,"isFeatured":true,"unsplashPhotoId":"wdLHQhAIYQQ"}},"type":"Tag"},{"slug":"now-in-android","name":"Now In Android","postCount":114,"metadata":{"postCount":114,"coverImage":{"id":"0*EUh5iWsPNCiAJm93","originalWidth":1600,"originalHeight":477,"isFeatured":true,"alt":"Now in Android title, showing a timer, the Android Developers pixelated brackets, a green Android head, and a caption bubble."}},"type":"Tag"},{"slug":"androidx","name":"Androidx","postCount":267,"metadata":{"postCount":267,"coverImage":{"id":"1*CROblt7xj6Qey6lf46LKUw.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"http://android-developers.googleblog.com/2024/07/making-security-easy-vuln-remediation.html","alts":[],"httpStatus":200},{"url":"https://adbackstage.libsyn.com/episode-208-micro-optimizations","alts":[],"httpStatus":200},{"url":"https://nowinandroid.libsyn.com/109-android-15-beta-4-samsung-galaxy-unpacked-google-plays-new-feature-and-more","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/07/the-fourth-beta-of-android-15.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/07/making-security-easy-vuln-remediation.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/07/weareplay-stories-from-people-creating-apps-and-games-in-the-us.html","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/08/android-device-streaming-announcing-early-access.html","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/07/updates-samsung-galaxy-unpacked.html","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/08/weareplay-how-jakub-is-infusing-czech-mythology-into-his-games.html","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/transition#1.5.1","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/playcore/engage","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/games#games-frame-pacing-2.1.2","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=Z9-Z16glXRU","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/versions/all-channel","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/annotation#1.8.2","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/collection#1.4.3","alts":[],"httpStatus":200},{"url":"https://youtu.be/x3sVb-Inu0c?si=oaqFXRkcBN_hekvX","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/wear-protolayout#1.2.0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/wear-tiles#1.4.0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/activity#1.9.1","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/compose-compiler#1.5.15","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/fragment#1.8.2","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/paging#3.3.2","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/media3#1.4.0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/lifecycle#2.8.4","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/work#2.9.1","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/games#games-text-input-3.0.4","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/games#games-activity-3.0.5","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/games#games-performance-tuner-2.0.0","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1724793357472},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":142,"sectionCount":2,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"now-in-android-109","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"now-in-android-109-1dbf4e81b127","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*Sy3ea40KCd6LSmU6QFUgDA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"Now in Android #109","alignment":1},{"name":"previewSubtitle","type":13,"text":"The Fourth Beta of Android 15, Samsung’s Galaxy Unpacked event, Google Play’s new…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"The Fourth Beta of Android 15, Samsung’s Galaxy Unpacked event, Google Play’s new Collections feature and more."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"95b274b437c2","isNewsletter":false,"newsletterId":"9f20342c0976","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"7f31","type":4,"text":"","markups":[],"layout":3,"metadata":{"id":"1*Sy3ea40KCd6LSmU6QFUgDA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},{"name":"ab9c","type":3,"text":"Now in Android #109","markups":[]},{"name":"5f2f","type":1,"text":"Welcome to episode 109 of Now in Android: your ongoing guide to what’s new and notable in the world of Android development.","markups":[]},{"name":"0af4","type":1,"text":"In this episode, we’ll cover The Fourth Beta of Android 15, Samsung’s Galaxy Unpacked event, Google Play’s new Collections feature and security enhancements, inspirational stories from #WeArePlay series…","markups":[{"type":3,"start":29,"end":58,"href":"https://android-developers.googleblog.com/2024/07/the-fourth-beta-of-android-15.html","title":"","rel":"","anchorType":0},{"type":3,"start":60,"end":91,"href":"http://android-developers.googleblog.com/2024/07/updates-samsung-galaxy-unpacked.html","title":"","rel":"","anchorType":0},{"type":3,"start":107,"end":130,"href":"http://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html","title":"","rel":"","anchorType":0},{"type":3,"start":135,"end":156,"href":"https://android-developers.googleblog.com/2024/07/making-security-easy-vuln-remediation.html","title":"","rel":"","anchorType":0},{"type":3,"start":207,"end":239,"href":"https://developer.android.com/jetpack/androidx/versions/all-channel","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"9d78","startIndex":0}]},"isFullContent":false,"subtitle":"The Fourth Beta of Android 15, Samsung’s Galaxy Unpacked event, Google Play’s new Collections feature and more."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"42291f14ba37":{"id":"42291f14ba37","versionId":"3bf3a62ec674","creatorId":"54b43884b5c2","homeCollectionId":"95b274b437c2","title":"Now in Android #108","detectedLanguage":"en","latestVersion":"3bf3a62ec674","latestPublishedVersion":"3bf3a62ec674","hasUnpublishedEdits":false,"latestRev":194,"createdAt":1719443792353,"updatedAt":1732255394371,"acceptedAt":0,"firstPublishedAt":1719523773822,"latestPublishedAt":1719523773822,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Android 15 Beta 3, two Compose case studies, Google AI Studio, Gemini in Android Studio, and lots of stable AndroidX releases.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*0VEHBhtQU_6AvaaIhR1kCA.png","filter":"","backgroundSize":"","originalWidth":4209,"originalHeight":1253,"strategy":"resample","height":0,"width":0},"wordCount":822,"imageCount":2,"readingTime":3.4852201257861637,"subtitle":"Android 15 Beta 3, two Compose case studies, Google AI Studio, Gemini in Android Studio, and lots of stable AndroidX releases.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":13,"isBookmarked":false,"tags":[{"slug":"android-15","name":"Android 15","postCount":152,"metadata":{"postCount":152,"coverImage":{"id":"1*o9Cb9xSsB8ujXZdNE95xlQ.jpeg","originalWidth":1472,"originalHeight":832,"isFeatured":true}},"type":"Tag"},{"slug":"android-studio","name":"Android Studio","postCount":3620,"metadata":{"postCount":3620,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"google-ai-studio","name":"Google Ai Studio","postCount":38,"metadata":{"postCount":38,"coverImage":{"id":"1*PLGzFAb-eHsVS1yfbIdyNw.png","originalWidth":1280,"originalHeight":720,"isFeatured":true}},"type":"Tag"},{"slug":"featured","name":"Featured","postCount":21971,"metadata":{"postCount":21971,"coverImage":{"id":"0*nNNyAghOG14FnvLy","originalWidth":4504,"originalHeight":3005,"isFeatured":true,"unsplashPhotoId":"wdLHQhAIYQQ"}},"type":"Tag"},{"slug":"now-in-android","name":"Now In Android","postCount":114,"metadata":{"postCount":114,"coverImage":{"id":"0*EUh5iWsPNCiAJm93","originalWidth":1600,"originalHeight":477,"isFeatured":true,"alt":"Now in Android title, showing a timer, the Android Developers pixelated brackets, a green Android head, and a caption bubble."}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://nowinandroid.libsyn.com/108-android-15-beta-3-google-ai-studio-gemini-in-android-studio-and-more","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/06/max-implemented-ui-changes-faster-using-jetpack-compose.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/06/the-third-beta-of-android-15.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/06/3-fun-experiments-to-try-for-your-next-android-app-using-google-ai-studio.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/06/weareplay-meet-people-creating-apps-and-games-australia.html","alts":[],"httpStatus":200},{"url":"https://medium.com/androiddevelopers/building-jetcaster-on-all-form-factors-8e3418eeac13","alts":[{"type":3,"url":"medium://p/8e3418eeac13"},{"type":2,"url":"medium://p/8e3418eeac13"}],"httpStatus":200},{"url":"https://adbackstage.libsyn.com/episode-207-ai-development-assistance","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/glance#1.1.0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/versions/all-channel","alts":[],"httpStatus":200},{"url":"https://youtu.be/gMh07qifhQE","alts":[{"type":2,"url":"vnd.youtube://www.youtube.com/watch?v=gMh07qifhQE&feature=youtu.be&feature=applinks"},{"type":3,"url":"vnd.youtube://www.youtube.com/watch?v=gMh07qifhQE&feature=youtu.be&feature=applinks"}],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/games#games-controller-2.0.2","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=tprU6FTZrHc","alts":[{"type":2,"url":"vnd.youtube://www.youtube.com/watch?v=tprU6FTZrHc&feature=applinks"},{"type":3,"url":"vnd.youtube://www.youtube.com/watch?v=tprU6FTZrHc&feature=applinks"}],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/compose-animation#1.6.8","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/lifecycle#2.8.2","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/test#espresso-3.6.0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/compose-runtime#1.6.8","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/fragment#1.8.0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/concurrent#1.2.0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/studio/preview/gemini","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/compose-material#1.6.8","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/camera#1.3.4","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/compose-ui#1.6.8","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/core#core-remoteviews-1.1.0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/test#junit_extensions_120_2","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/compose-foundation#1.6.8","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/test#rules_160_3","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/test#runner-1.6.0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/test#truth_extensions_160_2","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/test#orchestrator_150_3","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/test#services_150_3","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/test#monitor_170_3","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/test#core-1.6.0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/test#espresso_device_100_3","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1719523776179},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":31,"sectionCount":2,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"now-in-android-108","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"now-in-android-108-42291f14ba37","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*0VEHBhtQU_6AvaaIhR1kCA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},{"name":"9faf","type":3,"text":"Now in Android #108","markups":[],"alignment":1},{"name":"ff38","type":13,"text":"Android 15 Beta 3, two Compose case studies, Google AI Studio, Gemini in Android…","markups":[{"type":3,"start":0,"end":17,"href":"https://android-developers.googleblog.com/2024/06/the-third-beta-of-android-15.html","title":"","rel":"","anchorType":0},{"type":3,"start":23,"end":43,"href":"https://medium.com/androiddevelopers/building-jetcaster-on-all-form-factors-8e3418eeac13","title":"","rel":"","anchorType":0},{"type":3,"start":45,"end":61,"href":"https://android-developers.googleblog.com/2024/06/3-fun-experiments-to-try-for-your-next-android-app-using-google-ai-studio.html","title":"","rel":"","anchorType":0},{"type":3,"start":63,"end":80,"href":"https://adbackstage.libsyn.com/episode-207-ai-development-assistance","title":"","rel":"","anchorType":0}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Android 15 Beta 3, two Compose case studies, Google AI Studio, Gemini in Android Studio, and lots of stable AndroidX releases."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"95b274b437c2","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":4,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"33ba","type":4,"text":"","markups":[],"layout":3,"metadata":{"id":"1*0VEHBhtQU_6AvaaIhR1kCA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},{"name":"9faf","type":3,"text":"Now in Android #108","markups":[]},{"name":"ff38","type":13,"text":"Android 15 Beta 3, two Compose case studies, Google AI Studio, Gemini in Android Studio, and lots of stable AndroidX releases.","markups":[{"type":3,"start":0,"end":17,"href":"https://android-developers.googleblog.com/2024/06/the-third-beta-of-android-15.html","title":"","rel":"","anchorType":0},{"type":3,"start":23,"end":43,"href":"https://medium.com/androiddevelopers/building-jetcaster-on-all-form-factors-8e3418eeac13","title":"","rel":"","anchorType":0},{"type":3,"start":45,"end":61,"href":"https://android-developers.googleblog.com/2024/06/3-fun-experiments-to-try-for-your-next-android-app-using-google-ai-studio.html","title":"","rel":"","anchorType":0},{"type":3,"start":63,"end":87,"href":"https://adbackstage.libsyn.com/episode-207-ai-development-assistance","title":"","rel":"","anchorType":0},{"type":3,"start":93,"end":125,"href":"https://developer.android.com/jetpack/androidx/versions/all-channel","title":"","rel":"","anchorType":0}]},{"name":"870f","type":1,"text":"Welcome to episode 108 of Now in Android: your ongoing guide to what’s new and notable in the world of Android development.","markups":[]},{"name":"a686","type":1,"text":"In this episode, we’ll cover Android 15 Beta 3, two Compose case studies, Google AI Studio, Gemini in Android Studio, and lots of stable AndroidX releases.","markups":[{"type":3,"start":29,"end":46,"href":"https://android-developers.googleblog.com/2024/06/the-third-beta-of-android-15.html","title":"","rel":"","anchorType":0},{"type":3,"start":74,"end":90,"href":"https://android-developers.googleblog.com/2024/06/3-fun-experiments-to-try-for-your-next-android-app-using-google-ai-studio.html","title":"","rel":"","anchorType":0},{"type":3,"start":92,"end":116,"href":"https://adbackstage.libsyn.com/episode-207-ai-development-assistance","title":"","rel":"","anchorType":0},{"type":3,"start":137,"end":154,"href":"https://developer.android.com/jetpack/androidx/versions/all-channel","title":"","rel":"","anchorType":0}]},{"name":"6e27","type":11,"text":"","markups":[],"layout":1,"iframe":{"mediaResourceId":"9aa29707abec843b01c72b5fa3ee0cef","iframeWidth":854,"iframeHeight":480,"thumbnailUrl":"https://i.embed.ly/1/image?url=https%3A%2F%2Fi.ytimg.com%2Fvi%2FgMh07qifhQE%2Fhqdefault.jpg&key=a19fcc184b9711e1b4764040d3dc5c07"}},{"name":"b26d","type":11,"text":"","markups":[],"layout":1,"iframe":{"mediaResourceId":"ce382ad3995412ba7040ce29ccd7d75d","iframeWidth":600,"iframeHeight":90,"thumbnailUrl":"https://i.embed.ly/1/image?url=https%3A%2F%2Fassets.libsyn.com%2Fsecure%2Fitem%2F31919802&key=a19fcc184b9711e1b4764040d3dc5c07"}},{"name":"566e","type":1,"text":"…","markups":[{"type":3,"start":63,"end":68,"href":"https://youtu.be/gMh07qifhQE","title":"","rel":"","anchorType":0},{"type":3,"start":72,"end":79,"href":"https://nowinandroid.libsyn.com/108-android-15-beta-3-google-ai-studio-gemini-in-android-studio-and-more","title":"","rel":"","anchorType":0},{"type":3,"start":97,"end":102,"href":"https://youtu.be/gMh07qifhQE","title":"","rel":"","anchorType":0},{"type":3,"start":106,"end":112,"href":"https://nowinandroid.libsyn.com/108-android-15-beta-3-google-ai-studio-gemini-in-android-studio-and-more","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"53c0","startIndex":0}]},"isFullContent":false,"subtitle":"Android 15 Beta 3, two Compose case studies, Google AI Studio, Gemini in Android Studio, and lots of stable AndroidX releases."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"d334239c7c5b":{"id":"d334239c7c5b","versionId":"52f6f00372ad","creatorId":"18e39dc8d413","homeCollectionId":"95b274b437c2","title":"Now in Android #107","detectedLanguage":"en","latestVersion":"52f6f00372ad","latestPublishedVersion":"52f6f00372ad","hasUnpublishedEdits":false,"latestRev":440,"createdAt":1718312851255,"updatedAt":1732357568958,"acceptedAt":0,"firstPublishedAt":1718321617965,"latestPublishedAt":1719523815089,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Google @ KotlinConf, Android Studio updates, I/O recaps, AndroidX updates, and more.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*0VEHBhtQU_6AvaaIhR1kCA.png","filter":"","backgroundSize":"","originalWidth":4209,"originalHeight":1253,"strategy":"resample","height":0,"width":0},"wordCount":1227,"imageCount":3,"readingTime":5.1801886792452825,"subtitle":"Google @ KotlinConf, Android Studio updates, I/O recaps, AndroidX updates, and more.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":21,"isBookmarked":false,"tags":[{"slug":"android-studio","name":"Android Studio","postCount":3620,"metadata":{"postCount":3620,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"kotlin","name":"Kotlin","postCount":30983,"metadata":{"postCount":30983,"coverImage":{"id":"1*ykPIAcpLN3vaghlbIH2Trw.jpeg","originalWidth":1100,"originalHeight":617}},"type":"Tag"},{"slug":"jetpack-compose","name":"Jetpack Compose","postCount":6070,"metadata":{"postCount":6070,"coverImage":{"id":"1*bPrF2ZemLaRrMYCmvLmWMQ.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"now-in-android","name":"Now In Android","postCount":114,"metadata":{"postCount":114,"coverImage":{"id":"0*EUh5iWsPNCiAJm93","originalWidth":1600,"originalHeight":477,"isFeatured":true,"alt":"Now in Android title, showing a timer, the Android Developers pixelated brackets, a green Android head, and a caption bubble."}},"type":"Tag"},{"slug":"featured","name":"Featured","postCount":21971,"metadata":{"postCount":21971,"coverImage":{"id":"0*nNNyAghOG14FnvLy","originalWidth":4504,"originalHeight":3005,"isFeatured":true,"unsplashPhotoId":"wdLHQhAIYQQ"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://nowinandroid.libsyn.com/107-kotlinconf-android-studio-updates-io-recaps-androidx-updates-and-more","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/06/enabling-safe-ai-experiences.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/06/android-device-streaming-powered-by-firebse-now-in-beta.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/06/developers-for-adidas-confirmed-build-features-faster-using-jetpack-compose.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/06/weareplay-how-zulal-is-using-ai-to-help-people-with-low-vision.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/06/top-3-updates-around-compose-across-form-factors-google-io.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/05/a-developers-roadmap-to-predictive-back.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/channel/UCVHFbqXqoYvEWM1Ddxl0QDg","alts":[],"httpStatus":200},{"url":"https://developer.android.com/studio/releases","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/versions","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/graphics#graphics-core-1.0.0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/credentials#1.5.0-alpha01","alts":[],"httpStatus":200},{"url":"https://androidstudio.googleblog.com/2024/06/android-studio-jellyfish-202331-patch-2_10.html","alts":[],"httpStatus":200},{"url":"https://developers.googleblog.com/en/google-kotlinconf-2024-a-look-inside-multiplatform-development-with-kmp-and-more/","alts":[],"httpStatus":200},{"url":"https://androidstudio.googleblog.com/2024/06/android-studio-koala-202411-rc-2-now.html","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/biometric#1.4.0-alpha01","alts":[],"httpStatus":200},{"url":"https://youtu.be/y7hHH1phkLM","alts":[{"type":3,"url":"vnd.youtube://www.youtube.com/watch?v=y7hHH1phkLM&feature=youtu.be&feature=applinks"},{"type":2,"url":"vnd.youtube://www.youtube.com/watch?v=y7hHH1phkLM&feature=youtu.be&feature=applinks"}],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=fHUH9730vZE","alts":[{"type":2,"url":"vnd.youtube://www.youtube.com/watch?v=fHUH9730vZE&feature=applinks"},{"type":3,"url":"vnd.youtube://www.youtube.com/watch?v=fHUH9730vZE&feature=applinks"}],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=agGTpNEl2S0","alts":[{"type":2,"url":"vnd.youtube://www.youtube.com/watch?v=agGTpNEl2S0&feature=applinks"},{"type":3,"url":"vnd.youtube://www.youtube.com/watch?v=agGTpNEl2S0&feature=applinks"}],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/test#core-1.6.0-rc01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/compose-runtime#1.7.0-beta02","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/window#1.3.0","alts":[],"httpStatus":200},{"url":"https://medium.com/@yenerm","alts":[{"type":2,"url":"medium://@yenerm"},{"type":3,"url":"medium://@yenerm"}],"httpStatus":200}],"version":"0.3","generatedAt":1719523817001},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":83,"sectionCount":2,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"now-in-android-107","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"now-in-android-107-d334239c7c5b","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*0VEHBhtQU_6AvaaIhR1kCA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},{"name":"2f65","type":3,"text":"Now in Android #107","markups":[],"alignment":1},{"name":"e4f2","type":13,"text":"Google @ KotlinConf, Android Studio updates, I/O recaps, AndroidX updates, and…","markups":[{"type":3,"start":0,"end":19,"href":"https://developers.googleblog.com/en/google-kotlinconf-2024-a-look-inside-multiplatform-development-with-kmp-and-more/","title":"","rel":"","anchorType":0},{"type":3,"start":21,"end":43,"href":"https://developer.android.com/studio/releases","title":"","rel":"","anchorType":0},{"type":3,"start":45,"end":55,"href":"https://www.youtube.com/channel/UCVHFbqXqoYvEWM1Ddxl0QDg","title":"","rel":"","anchorType":0},{"type":3,"start":57,"end":73,"href":"https://developer.android.com/jetpack/androidx/versions","title":"","rel":"","anchorType":0}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Google @ KotlinConf, Android Studio updates, I/O recaps, AndroidX updates, and more."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"95b274b437c2","isNewsletter":false,"newsletterId":"de3d6741d93f","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"fc19","type":4,"text":"","markups":[],"layout":3,"metadata":{"id":"1*0VEHBhtQU_6AvaaIhR1kCA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},{"name":"2f65","type":3,"text":"Now in Android #107","markups":[]},{"name":"e4f2","type":13,"text":"Google @ KotlinConf, Android Studio updates, I/O recaps, AndroidX updates, and more.","markups":[{"type":3,"start":0,"end":19,"href":"https://developers.googleblog.com/en/google-kotlinconf-2024-a-look-inside-multiplatform-development-with-kmp-and-more/","title":"","rel":"","anchorType":0},{"type":3,"start":21,"end":43,"href":"https://developer.android.com/studio/releases","title":"","rel":"","anchorType":0},{"type":3,"start":45,"end":55,"href":"https://www.youtube.com/channel/UCVHFbqXqoYvEWM1Ddxl0QDg","title":"","rel":"","anchorType":0},{"type":3,"start":57,"end":73,"href":"https://developer.android.com/jetpack/androidx/versions","title":"","rel":"","anchorType":0}]},{"name":"e74f","type":1,"text":"Welcome to Now in Android, your ongoing guide to what’s new and notable in the world of Android development. In this episode we’ll cover Google @ KotlinConf, Android Studio updates, I/O recaps, AndroidX updates, and more!","markups":[{"type":3,"start":137,"end":156,"href":"https://developers.googleblog.com/en/google-kotlinconf-2024-a-look-inside-multiplatform-development-with-kmp-and-more/","title":"","rel":"","anchorType":0},{"type":3,"start":158,"end":180,"href":"https://developers.googleblog.com/en/google-kotlinconf-2024-a-look-inside-multiplatform-development-with-kmp-and-more/","title":"","rel":"","anchorType":0},{"type":3,"start":182,"end":192,"href":"https://developers.googleblog.com/en/google-kotlinconf-2024-a-look-inside-multiplatform-development-with-kmp-and-more/","title":"","rel":"","anchorType":0},{"type":3,"start":194,"end":210,"href":"https://developer.android.com/jetpack/androidx/versions","title":"","rel":"","anchorType":0}]},{"name":"84da","type":11,"text":"","markups":[],"layout":1,"iframe":{"mediaResourceId":"4f71049e8eeec88bc78cb4ef62a5eb9b","iframeWidth":854,"iframeHeight":480,"thumbnailUrl":"https://i.embed.ly/1/image?url=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fy7hHH1phkLM%2Fhqdefault.jpg&key=a19fcc184b9711e1b4764040d3dc5c07"}},{"name":"c79c","type":11,"text":"","markups":[],"layout":1,"iframe":{"mediaResourceId":"b2379ce4cbce008346ce5d4eddadf8a0","iframeWidth":600,"iframeHeight":90,"thumbnailUrl":"https://i.embed.ly/1/image?url=https%3A%2F%2Fassets.libsyn.com%2Fsecure%2Fitem%2F31740577&key=a19fcc184b9711e1b4764040d3dc5c07"}},{"name":"60ba","type":1,"text":"Most of the content of this post is available in the form…","markups":[{"type":3,"start":63,"end":68,"href":"https://youtu.be/y7hHH1phkLM","title":"","rel":"","anchorType":0},{"type":3,"start":72,"end":79,"href":"https://nowinandroid.libsyn.com/107-kotlinconf-android-studio-updates-io-recaps-androidx-updates-and-more","title":"","rel":"","anchorType":0},{"type":3,"start":97,"end":102,"href":"https://youtu.be/y7hHH1phkLM","title":"","rel":"","anchorType":0},{"type":3,"start":106,"end":112,"href":"https://nowinandroid.libsyn.com/107-kotlinconf-android-studio-updates-io-recaps-androidx-updates-and-more","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"8d7a","startIndex":0}]},"isFullContent":false,"subtitle":"Google @ KotlinConf, Android Studio updates, I/O recaps, AndroidX updates, and more."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"}}},"paging":{"path":"/_/api/collections/95b274b437c2/stream","next":{"to":"1725387152484","ignoredIds":["1dbf4e81b127","42291f14ba37","d334239c7c5b"],"page":3}},"collection":{"id":"95b274b437c2","name":"Android Developers","slug":"androiddevelopers","tags":["ANDROID DEVELOPERS","ANDROID APP DEVELOPMENT","ANDROID STUDIO","ANDROIDDEV","ANDROID DEVELOPMENT"],"creatorId":"e1f26db83092","description":"Articles on modern tools and resources to help you build experiences that people love, faster and easier, across every Android device.","shortDescription":"Articles on modern tools and resources to help you build…","image":{"imageId":"1*4Tg6pPzer7cIarYaszIKaQ.png","filter":"","backgroundSize":"","originalWidth":96,"originalHeight":96,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":52037,"activeAt":1732208584254},"virtuals":{"permissions":{"canPublish":false,"canPublishAll":false,"canRepublish":false,"canRemove":false,"canManageAll":false,"canSubmit":false,"canEditPosts":false,"canAddWriters":false,"canViewStats":false,"canSendNewsletter":false,"canViewLockedPosts":false,"canViewCloaked":false,"canEditOwnPosts":false,"canBeAssignedAuthor":false,"canEnrollInHightower":false,"canLockPostsForMediumMembers":false,"canLockOwnPostsForMediumMembers":false,"canViewNewsletterV2Stats":false,"canCreateNewsletterV3":false},"isSubscribed":false,"isEnrolledInHightower":false,"isEligibleForHightower":false,"isSubscribedToCollectionEmails":false,"isMuted":false,"canToggleEmail":false,"isWriter":false},"logo":{"imageId":"1*5pMw_nx55x_66tk77kutPQ.png","filter":"","backgroundSize":"","originalWidth":600,"originalHeight":72,"strategy":"resample","height":0,"width":0},"twitterUsername":"androiddev","sections":[{"type":2,"collectionHeaderMetadata":{"title":"Android Developers","description":"The official Android Developers publication on Medium","backgroundImage":{},"logoImage":{"id":"1*KismM-jT9LUMr1GMhlSPfg@2x.png","originalWidth":1000,"originalHeight":550,"alt":"Android Developers"},"alignment":2,"layout":5}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":7,"postIds":["255973814ae3","9c60a12a8473","a8ae5802604f","b0074d6fd350","105325a97657","da645c905d78","872774e8839b"]}},{"type":1,"postListMetadata":{"source":4,"layout":4,"number":3,"postIds":["1dbf4e81b127","42291f14ba37","d334239c7c5b"],"tagSlug":"Now In Android","tagName":"Now In Android","sectionHeader":"Now in Android"}},{"type":1,"postListMetadata":{"source":1,"layout":5,"number":7,"postIds":[]}}],"tintColor":"#FF202124","lightText":true,"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FF848488","point":0},{"color":"#FF7B7B7E","point":0.1},{"color":"#FF717275","point":0.2},{"color":"#FF68686B","point":0.3},{"color":"#FF5E5E60","point":0.4},{"color":"#FF545456","point":0.5},{"color":"#FF4A494B","point":0.6},{"color":"#FF3F3E40","point":0.7},{"color":"#FF333334","point":0.8},{"color":"#FF272728","point":0.9},{"color":"#FF1A1A1A","point":1}],"backgroundColor":"#FFFFFFFF"},"tintBackgroundSpectrum":{"colorPoints":[{"color":"#FF202124","point":0},{"color":"#FF3D3E41","point":0.1},{"color":"#FF58585B","point":0.2},{"color":"#FF707073","point":0.3},{"color":"#FF878689","point":0.4},{"color":"#FF9D9C9E","point":0.5},{"color":"#FFB2B1B2","point":0.6},{"color":"#FFC6C5C6","point":0.7},{"color":"#FFDAD8DA","point":0.8},{"color":"#FFEEEBEC","point":0.9},{"color":"#FFFFFEFF","point":1}],"backgroundColor":"#FF202124"},"highlightSpectrum":{"colorPoints":[{"color":"#FFF4F2F3","point":0},{"color":"#FFF2F0F1","point":0.1},{"color":"#FFF0EEEF","point":0.2},{"color":"#FFEEECEE","point":0.3},{"color":"#FFECEAEC","point":0.4},{"color":"#FFEAE8EA","point":0.5},{"color":"#FFE8E7E9","point":0.6},{"color":"#FFE6E5E7","point":0.7},{"color":"#FFE4E3E5","point":0.8},{"color":"#FFE2E1E4","point":0.9},{"color":"#FFE0DFE2","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FF9C9CA0","point":0},{"color":"#FFA5A5A8","point":0.1},{"color":"#FFAEADB0","point":0.2},{"color":"#FFB6B6B8","point":0.3},{"color":"#FFBFBEC0","point":0.4},{"color":"#FFC7C6C8","point":0.5},{"color":"#FFD0CED0","point":0.6},{"color":"#FFD8D6D8","point":0.7},{"color":"#FFE0DEDF","point":0.8},{"color":"#FFE8E6E7","point":0.9},{"color":"#FFF0EEEE","point":1}],"backgroundColor":"#FF000000"}},"navItems":[{"type":5,"title":"Archive","url":"https://medium.com/androiddevelopers/archive"},{"type":1,"title":"Kotlin","tagSlug":"kotlin","url":"https://medium.com/androiddevelopers/tagged/kotlin","source":"tagSlug"},{"type":1,"title":"Design","tagSlug":"design","url":"https://medium.com/androiddevelopers/tagged/design","source":"tagSlug"},{"type":1,"title":"Android Studio","tagSlug":"android-studio","url":"https://medium.com/androiddevelopers/tagged/android-studio","source":"tagSlug"},{"type":1,"title":"Now in Android","tagSlug":"now-in-android","url":"https://medium.com/androiddevelopers/tagged/now-in-android","source":"tagSlug"},{"type":1,"title":"Modern Android Development","tagSlug":"mad-skills","url":"https://medium.com/androiddevelopers/tagged/mad-skills","source":"tagSlug"},{"type":3,"title":"developer.android.com","url":"https://developer.android.com"}],"colorBehavior":2,"collectionFeatures":[30,25],"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"title":"Android Developers","description":"The official Android Developers publication on Medium","backgroundImage":{},"logoImage":{"id":"1*KismM-jT9LUMr1GMhlSPfg@2x.png","originalWidth":1000,"originalHeight":550,"alt":"Android Developers"},"alignment":2,"layout":5},"subscriberCount":52037,"tagline":"The official Android Developers publication on Medium","isOptedIntoAurora":false,"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"ptsQualifiedAt":1616092827591,"type":"Collection"},"header":{"title":"Android Developers","description":"The official Android Developers publication on Medium","backgroundImage":{},"logoImage":{"id":"1*KismM-jT9LUMr1GMhlSPfg@2x.png","originalWidth":1000,"originalHeight":550,"alt":"Android Developers"},"alignment":2,"layout":5},"streamItems":[{"createdAt":1732663359881,"randomId":"5b9cc9747ea1","section":{"items":[{"post":{"postId":"255973814ae3"},"itemType":"post"},{"post":{"postId":"9c60a12a8473"},"itemType":"post"},{"post":{"postId":"a8ae5802604f"},"itemType":"post"},{"post":{"postId":"b0074d6fd350"},"itemType":"post"},{"post":{"postId":"105325a97657"},"itemType":"post"},{"post":{"postId":"da645c905d78"},"itemType":"post"},{"post":{"postId":"872774e8839b"},"itemType":"post"}],"layout":4},"itemType":"section","type":"StreamItem"},{"createdAt":1732663359882,"randomId":"8e86f9ec16cb","section":{"items":[{"post":{"postId":"1dbf4e81b127"},"itemType":"post"},{"post":{"postId":"42291f14ba37"},"itemType":"post"},{"post":{"postId":"d334239c7c5b"},"itemType":"post"}],"layout":4,"heading":{"fallbackTitle":"Now in Android","headingBasic":{"title":"Now in Android"},"headingType":"headingBasic"}},"itemType":"section","type":"StreamItem"}]}) // ]]></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:'8e8d9f2daa3c6047',t:'MTczMjY2MzM2MC4wMDAwMDA='};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>