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.tWIMt8r3Nl52PPi9OfgcVw.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%3Fsource%3D---------7-----------------------&source=--------------------------nav_reg&operation=login" data-action="sign-in-prompt" data-redirect="https://medium.com/androiddevelopers?source=---------7-----------------------" 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%3Fsource%3D---------7-----------------------&source=--------------------------nav_reg&operation=register" data-action="sign-up-prompt" data-redirect="https://medium.com/androiddevelopers?source=---------7-----------------------" 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="d6617517df62" data-index="0"><div class="u-lineHeightBase postItem u-marginRight3"><a href="https://medium.com/androiddevelopers/now-in-android-113-d6617517df62?source=collection_home---4------0-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/now-in-android-113-d6617517df62?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/0*cFhWGbmoP0JqXXsG.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Now in Android #113</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/now-in-android-113-d6617517df62?source=collection_home---4------0-----------------------" data-action-source="collection_home---4------0-----------------------" data-post-id="d6617517df62"><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">Now in Android #113</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">Second Developer Preview of Android 16, Android XR, Camera and Media Spotlight Week, Android Studio Ladybug Feature Drop, 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/@trambui09" data-action="show-user-card" data-action-value="06594c43b26a" data-action-type="hover" data-user-id="06594c43b26a" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*UgHHBHDUYt_zPUl_93RhNQ.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Tram Bui"></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/@trambui09" data-action="show-user-card" data-action-value="06594c43b26a" data-action-type="hover" data-user-id="06594c43b26a" dir="auto">Tram Bui</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2025-01-23T23:44:03.592Z">Jan 23</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="8 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="8a7fa5b76641" data-index="1"><div class="u-lineHeightBase postItem"><a href="https://medium.com/androiddevelopers/create-a-spotlight-effect-with-camerax-and-jetpack-compose-8a7fa5b76641?source=collection_home---4------1-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/create-a-spotlight-effect-with-camerax-and-jetpack-compose-8a7fa5b76641?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*Ay6Qn6hYSX4FzqZFWv2Nkw.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Create a spotlight effect with CameraX and Jetpack 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/create-a-spotlight-effect-with-camerax-and-jetpack-compose-8a7fa5b76641?source=collection_home---4------1-----------------------" data-action-source="collection_home---4------1-----------------------" data-post-id="8a7fa5b76641"><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">Create a spotlight effect with CameraX and Jetpack 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">Part 3 — Explore how to overlay Compose UI elements on top of your camera preview for a richer user experience.</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/@lojanda" data-action="show-user-card" data-action-value="7c4e8b4f1538" data-action-type="hover" data-user-id="7c4e8b4f1538" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*XXxKnGkW5RkuVemStEYjdw.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Jolanda Verhoef"></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/@lojanda" data-action="show-user-card" data-action-value="7c4e8b4f1538" data-action-type="hover" data-user-id="7c4e8b4f1538" dir="auto">Jolanda Verhoef</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2025-01-23T17:03:20.140Z">Jan 23</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="6 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="440853280a6e" data-index="2"><div class="u-lineHeightBase postItem"><a href="https://medium.com/androiddevelopers/tap-to-focus-mastering-camerax-transformations-in-jetpack-compose-440853280a6e?source=collection_home---4------2-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/tap-to-focus-mastering-camerax-transformations-in-jetpack-compose-440853280a6e?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*k-WDMPkp9zsnxyyQ6v1VMA.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Tap to focus: Mastering CameraX Transformations in Jetpack 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/tap-to-focus-mastering-camerax-transformations-in-jetpack-compose-440853280a6e?source=collection_home---4------2-----------------------" data-action-source="collection_home---4------2-----------------------" data-post-id="440853280a6e"><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">Tap to focus: Mastering CameraX Transformations in Jetpack 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">Part 2 — Using the Compose gesture system , graphics, and coroutines to implement a visual tap-to-focus.</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/@lojanda" data-action="show-user-card" data-action-value="7c4e8b4f1538" data-action-type="hover" data-user-id="7c4e8b4f1538" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*XXxKnGkW5RkuVemStEYjdw.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Jolanda Verhoef"></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/@lojanda" data-action="show-user-card" data-action-value="7c4e8b4f1538" data-action-type="hover" data-user-id="7c4e8b4f1538" dir="auto">Jolanda Verhoef</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2025-01-09T17:04:14.280Z">Jan 9</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="6 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="781c722ca0c4" data-index="3"><div class="u-lineHeightBase postItem"><a href="https://medium.com/androiddevelopers/getting-started-with-camerax-in-jetpack-compose-781c722ca0c4?source=collection_home---4------3-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/getting-started-with-camerax-in-jetpack-compose-781c722ca0c4?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*k-WDMPkp9zsnxyyQ6v1VMA.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Getting Started with CameraX in Jetpack 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/getting-started-with-camerax-in-jetpack-compose-781c722ca0c4?source=collection_home---4------3-----------------------" data-action-source="collection_home---4------3-----------------------" data-post-id="781c722ca0c4"><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">Getting Started with CameraX in Jetpack 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">Part 1 — A guide to building a basic camera preview, covering setup, permissions, ViewModel creation, and UI implementation.</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/@lojanda" data-action="show-user-card" data-action-value="7c4e8b4f1538" data-action-type="hover" data-user-id="7c4e8b4f1538" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*XXxKnGkW5RkuVemStEYjdw.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Jolanda Verhoef"></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/@lojanda" data-action="show-user-card" data-action-value="7c4e8b4f1538" data-action-type="hover" data-user-id="7c4e8b4f1538" dir="auto">Jolanda Verhoef</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2025-01-07T17:31:10.871Z">Jan 7</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="7 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="1cfe18163ddd" data-index="4"><div class="u-lineHeightBase postItem"><a href="https://medium.com/androiddevelopers/compose-tips-for-delightful-ui-24-wrap-up-1cfe18163ddd?source=collection_home---4------4-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/compose-tips-for-delightful-ui-24-wrap-up-1cfe18163ddd?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*EKZEUvYLMRmTgd3r5i73Gg.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Compose Tips for Delightful UI — ’24 wrap up</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/androiddevelopers/compose-tips-for-delightful-ui-24-wrap-up-1cfe18163ddd?source=collection_home---4------4-----------------------" data-action-source="collection_home---4------4-----------------------" data-post-id="1cfe18163ddd"><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">Compose Tips for Delightful UI — ’24 wrap up</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">An overview of Season 1 of our brand new YouTube series, “Compose Tips for Delightful UI”, covering best practices to improve your UI.</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/@anomisSi" data-action="show-user-card" data-action-value="f4d5f1a633bb" data-action-type="hover" data-user-id="f4d5f1a633bb" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*JuDXNZF_XDNLQV_-" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Simona Milanović"></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/@anomisSi" data-action="show-user-card" data-action-value="f4d5f1a633bb" data-action-type="hover" data-user-id="f4d5f1a633bb" dir="auto">Simona Milanović</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-12-24T15:56:00.513Z">Dec 24, 2024</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="3 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="fc66ce31550c" data-index="5"><div class="u-lineHeightBase postItem"><a href="https://medium.com/androiddevelopers/now-in-android-112-fc66ce31550c?source=collection_home---4------5-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/now-in-android-112-fc66ce31550c?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*Sy3ea40KCd6LSmU6QFUgDA.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Now in Android #112</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-112-fc66ce31550c?source=collection_home---4------5-----------------------" data-action-source="collection_home---4------5-----------------------" data-post-id="fc66ce31550c"><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 #112</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">First Developer Preview of Android 16, our Spotlight Week on Passkeys, Stability 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/@pux0r3" data-action="show-user-card" data-action-value="e7fe434b60e4" data-action-type="hover" data-user-id="e7fe434b60e4" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/2*XwhbDTUg6pCMjTZj06dmmA.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Patrick Martin"></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/@pux0r3" data-action="show-user-card" data-action-value="e7fe434b60e4" data-action-type="hover" data-user-id="e7fe434b60e4" dir="auto">Patrick Martin</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-12-13T21:30:52.769Z">Dec 13, 2024</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="10 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="53c57e531f5d" data-index="6"><div class="u-lineHeightBase postItem"><a href="https://medium.com/androiddevelopers/vulkan-1-4-faster-app-loads-less-stutter-and-less-memory-usage-host-image-copy-is-a-game-53c57e531f5d?source=collection_home---4------6-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/vulkan-1-4-faster-app-loads-less-stutter-and-less-memory-usage-host-image-copy-is-a-game-53c57e531f5d?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*Uz21_KlpWNb_Zc7qXlM7fw.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Vulkan 1.4: Faster App Loads, Less Stutter and Less Memory Usage — Host Image Copy Is a Game…</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/androiddevelopers/vulkan-1-4-faster-app-loads-less-stutter-and-less-memory-usage-host-image-copy-is-a-game-53c57e531f5d?source=collection_home---4------6-----------------------" data-action-source="collection_home---4------6-----------------------" data-post-id="53c57e531f5d"><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">Vulkan 1.4: Faster App Loads, Less Stutter and Less Memory Usage — Host Image Copy Is a Game…</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 games can leverage Vulkan 1.4’s Host Image Copy to reduce stutter, speed up loading times, and optimize memory.</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/@syoussefi" data-action="show-user-card" data-action-value="589a988a8086" data-action-type="hover" data-user-id="589a988a8086" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*1thOJ-DDFdofqivL" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Shahbaz Youssefi"></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/@syoussefi" data-action="show-user-card" data-action-value="589a988a8086" data-action-type="hover" data-user-id="589a988a8086" dir="auto">Shahbaz Youssefi</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-12-05T17:04:33.409Z">Dec 5, 2024</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 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="9c60a12a8473" data-index="0"><div class="u-lineHeightBase postItem"><a href="https://medium.com/androiddevelopers/now-in-android-111-9c60a12a8473?source=collection_home---4------0-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/now-in-android-111-9c60a12a8473?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 #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------0-----------------------" data-action-source="collection_home---4------0-----------------------" 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, 2024</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------1-----------------------" data-post-id="a8ae5802604f" data-index="1"><div class="u-lineHeightBase postItem"><a href="https://medium.com/androiddevelopers/now-in-android-110-a8ae5802604f?source=collection_home---4------1-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/now-in-android-110-a8ae5802604f?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 #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------1-----------------------" data-action-source="collection_home---4------1-----------------------" 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, 2024</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------2-----------------------" data-post-id="1dbf4e81b127" data-index="2"><div class="u-lineHeightBase postItem"><a href="https://medium.com/androiddevelopers/now-in-android-109-1dbf4e81b127?source=collection_home---4------2-----------------------" data-action="open-post" data-action-value="https://medium.com/androiddevelopers/now-in-android-109-1dbf4e81b127?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 #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------2-----------------------" data-action-source="collection_home---4------2-----------------------" 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, 2024</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 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":"20250214-1839-root","currentUser":{"userId":"lo_cf8bc5891290","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.8Tcu27LFq3PCOR9WxTangw.12.js","common-async":"https://cdn-static-1.medium.com/_/fp/gen-js/main-common-async.bundle.OeYcXrNwP1RO6In97YcKLQ.12.js","hightower":"https://cdn-static-1.medium.com/_/fp/gen-js/main-hightower.bundle.wCbOa67hZjl5Sam6zzVFnA.12.js","home-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-home-screens.bundle.tTmySBFexDB1lciGURkN8g.12.js","misc-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-misc-screens.bundle.a_EBqZVM6AyX_Kp1jlxGyQ.12.js","notes":"https://cdn-static-1.medium.com/_/fp/gen-js/main-notes.bundle.-oShrzSeUmNJS3K6rx04MA.12.js","payments":"https://cdn-static-1.medium.com/_/fp/gen-js/main-payments.bundle.P8k9CfZ1LzppHTJYwJD_Ig.12.js","posters":"https://cdn-static-1.medium.com/_/fp/gen-js/main-posters.bundle.9h8MreH1W2quy7BlStgo8w.12.js","power-readers":"https://cdn-static-1.medium.com/_/fp/gen-js/main-power-readers.bundle.BeGFKpJATbmOvbKtPqdULA.12.js","pubs":"https://cdn-static-1.medium.com/_/fp/gen-js/main-pubs.bundle.7zPJu_iPvZQ7WmBm5quNMw.12.js","stats":"https://cdn-static-1.medium.com/_/fp/gen-js/main-stats.bundle.JdLpnwrzm9Rc1drxpYremQ.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":"1739797968969:b98ca8d09a91","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,"disable_rex_pub_featuring_recirc":true,"enable_abandoned_cart_promotion_email":true,"enable_abandoned_paywall_email_experiment":"experiment","enable_abandoned_paywall_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_bg_post_post":true,"enable_boost_experiment":"control","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_cancellation_discount_v1_1":true,"enable_cancellation_discount_v1_email":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_deviant_get_variant_flag_from_medium2":true,"enable_diversification_rex":true,"enable_engagement_service_publish_response":true,"enable_entities_to_follow_v2":true,"enable_eventstats_event_processing":true,"enable_footer_app_buttons":true,"enable_google_one_tap":true,"enable_google_webhook":true,"enable_group_gifting":true,"enable_hybrid_ranking_model":"experiment","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_medium_com_canonical_urls":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_plans_page_branding":"control","enable_plans_page_branding_v2":"control","enable_plans_page_payment_form":"group_1","enable_post_bottom_responses":true,"enable_post_bottom_responses_input":true,"enable_post_bottom_responses_native":true,"enable_post_publish_permission_check":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_pub_featuring":true,"enable_pub_featuring_post_page_label":true,"enable_pub_featuring_stats":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_trust_service_recaptcha":true,"enable_update_explore_wtf":true,"enable_update_topic_portals_wtf":true,"enable_updated_pub_recs_ui":true,"enable_verifications_service":true,"enable_winback_promotion_email":true,"get_highlights_from_engagement":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":3,"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.8Tcu27LFq3PCOR9WxTangw.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":53898,"activeAt":1737675843686},"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":53898,"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":{"06594c43b26a":{"userId":"06594c43b26a","name":"Tram Bui","username":"trambui09","createdAt":1736450482433,"imageId":"1*UgHHBHDUYt_zPUl_93RhNQ.jpeg","backgroundImageId":"","bio":"Developer Relations Engineer @ Google","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[29],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"7c4e8b4f1538":{"userId":"7c4e8b4f1538","name":"Jolanda Verhoef","username":"lojanda","createdAt":1515144241292,"imageId":"1*XXxKnGkW5RkuVemStEYjdw.jpeg","backgroundImageId":"","bio":"Developer Relations Engineer at Google","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedAndroidApp":1576842313050,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"subdomainCreatedAt":1622790557397,"hasCompletedProfile":false,"userDismissableFlags":[8,50,29,2,1,33],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"f4d5f1a633bb":{"userId":"f4d5f1a633bb","name":"Simona Milanović","username":"anomisSi","createdAt":1642429612637,"imageId":"0*JuDXNZF_XDNLQV_-","backgroundImageId":"","bio":"Android Developer Relations Engineer @Google, working on Jetpack Compose","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[29,12,2,18,33],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"},"e7fe434b60e4":{"userId":"e7fe434b60e4","name":"Patrick Martin","username":"pux0r3","createdAt":1507868887180,"imageId":"2*XwhbDTUg6pCMjTZj06dmmA.jpeg","backgroundImageId":"","bio":"I’ve been a software engineer on everything from games to connected toys. I’m now a developer advocate for Google’s Firebase.","twitterScreenName":"pux0r3","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"Patrick Martin","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[32,29,12,8,30,2,33],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"589a988a8086":{"userId":"589a988a8086","name":"Shahbaz Youssefi","username":"syoussefi","createdAt":1714618815150,"imageId":"0*1thOJ-DDFdofqivL","backgroundImageId":"","bio":"I am the tech lead of ANGLE's Vulkan backend and a participant in the Vulkan Working Group at Khronos.","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[19,29],"hasSeenIcelandOnboarding":false,"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,"firstOpenedIosApp":1737724880579,"firstOpenedAndroidApp":1711681729608,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[8,48,47,50,29,19],"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"}},"Post":{"d6617517df62":{"id":"d6617517df62","versionId":"e83a5f2c5922","creatorId":"06594c43b26a","homeCollectionId":"95b274b437c2","title":"Now in Android #113","detectedLanguage":"en","latestVersion":"e83a5f2c5922","latestPublishedVersion":"e83a5f2c5922","hasUnpublishedEdits":false,"latestRev":720,"createdAt":1737056886446,"updatedAt":1738016516377,"acceptedAt":0,"firstPublishedAt":1737675843592,"latestPublishedAt":1738013111121,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Second Developer Preview of Android 16, Android XR, Camera and Media Spotlight Week, Android Studio Ladybug Feature Drop, and more.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*cFhWGbmoP0JqXXsG.png","filter":"","backgroundSize":"","originalWidth":2000,"originalHeight":595,"strategy":"resample","height":0,"width":0},"wordCount":1794,"imageCount":5,"readingTime":7.60314465408805,"subtitle":"Second Developer Preview of Android 16, Android XR, Camera and Media Spotlight Week, Android Studio Ladybug Feature Drop, and more.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":6,"isBookmarked":false,"tags":[{"slug":"featured","name":"Featured","postCount":22033,"metadata":{"postCount":22033,"coverImage":{"id":"1*fKjh0JbYTDei5dAp_mUrPQ.png","originalWidth":1472,"originalHeight":832,"isFeatured":true}},"type":"Tag"},{"slug":"now-in-android","name":"Now In Android","postCount":119,"metadata":{"postCount":119,"coverImage":{"id":"1*Sy3ea40KCd6LSmU6QFUgDA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},"type":"Tag"},{"slug":"android-16","name":"Android 16","postCount":33,"metadata":{"postCount":33,"coverImage":{"id":"1*Sy3ea40KCd6LSmU6QFUgDA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},"type":"Tag"},{"slug":"android-xr","name":"Android Xr","postCount":23,"metadata":{"postCount":23,"coverImage":{"id":"1*tjcupvZrX4XZHTGwnajt9A.png","originalWidth":2560,"originalHeight":2558,"isFeatured":true}},"type":"Tag"},{"slug":"android-studio","name":"Android Studio","postCount":3727,"metadata":{"postCount":3727,"coverImage":{"id":"1*Q8Z3kXUWQkp_fX8QtFmTdw.png","originalWidth":938,"originalHeight":662,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://medium.com/androiddevelopers/getting-started-with-camerax-in-jetpack-compose-781c722ca0c4","alts":[{"type":3,"url":"medium://p/781c722ca0c4"},{"type":2,"url":"medium://p/781c722ca0c4"}],"httpStatus":200},{"url":"https://androidbuildtime.libsyn.com/ultra-hdr-images","alts":[],"httpStatus":200},{"url":"https://medium.com/androiddevelopers/tap-to-focus-mastering-camerax-transformations-in-jetpack-compose-440853280a6e","alts":[{"type":3,"url":"medium://p/440853280a6e"},{"type":2,"url":"medium://p/440853280a6e"}],"httpStatus":200},{"url":"https://nowinandroid.libsyn.com/113-android-16-developer-preview-2-android-xr-android-studio-ladybug-and-more","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2025/01/android-studio-ladybug-feature-drop-is-stable.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2025/01/performance-class-helps-google-maps-deliver-premium-experiences.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2025/01/media3-150-whats-new.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/12/second-developer-preview-android16.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/12/introducing-android-xr-sdk-developer-preview.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/12/reddit-improved-app-startup-speed-using-baseline-profiles-r8.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2025/01/spotlight-week-android-camera-and-media.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/12/get-your-apps-ready-for-16-kb-page-size-devices.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/12/whats-new-in-camerax-140-and-jetpack-compose-support.html","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/12/reddit-improved-app-startup-speed-using-baseline-profiles-r8.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/12/instagram-on-android-low-light-photos.html","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/xr-scenecore#1.0.0-alpha01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/xr-compose-material3#1.0.0-alpha01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/codelabs/android-camera-foldables#0","alts":[],"httpStatus":200},{"url":"https://source.android.com/docs/core/camera/concurrent-streaming","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/xr/jetpack-xr-sdk/add-spatial-video","alts":[],"httpStatus":200},{"url":"https://developer.android.com/media/camera/camera2/hdr-video-capture","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/transition#1.6.0-alpha01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/camera-media3#1.0.0-alpha01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/versions/all-channel","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/xr-arcore#1.0.0-alpha01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/tv#tv-material-1.1.0-alpha01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/xr/jetpack-xr-sdk/add-spatial-audio","alts":[],"httpStatus":200},{"url":"https://developer.android.com/media/camera/camera-extensions","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/xr-compose#1.0.0-alpha01","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=Mu8VNoZ4sX8&ab_channel=AndroidDevelopers","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/media3#1.6.0-alpha01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/activity#1.10.0","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=VzqYmeA0IbE&ab_channel=AndroidDevelopers","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=UhDx9NMqT7o&list=PLWz5rJ2EKKc-QmKJwwkfSvuJP_uSwQSjE&index=4&t=845s&ab_channel=AndroidDevelopers","alts":[],"httpStatus":200},{"url":"https://youtu.be/Advtp0qApEI","alts":[],"httpStatus":200},{"url":"https://proandroiddev.com/ai-vision-on-android-camerax-imageanalysis-mediapipe-compose-db6afb738248","alts":[{"type":3,"url":"medium://p/db6afb738248"},{"type":2,"url":"medium://p/db6afb738248"}],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/xr-runtime#1.0.0-alpha01","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=nWXmrY8J_nY&t=937s&ab_channel=AndroidDevelopers","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=RQsE0n1xBxo&ab_channel=AndroidDevelopers","alts":[],"httpStatus":200},{"url":"https://developer.android.com/large-screens/gallery/media","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/core#1.16.0-alpha01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/viewpager#1.1.0","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/recyclerview#recyclerview-1.4.0","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1738013113325},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":104,"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-113","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"now-in-android-113-d6617517df62","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*cFhWGbmoP0JqXXsG.png","originalWidth":2000,"originalHeight":595,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"Now in Android #113","alignment":1},{"name":"previewSubtitle","type":13,"text":"Second Developer Preview of Android 16, Android XR, Camera and Media Spotlight…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Second Developer Preview of Android 16, Android XR, Camera and Media Spotlight Week, Android Studio Ladybug Feature Drop, and more."},"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":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"7cfe","type":4,"text":"","markups":[],"layout":3,"metadata":{"id":"0*cFhWGbmoP0JqXXsG.png","originalWidth":2000,"originalHeight":595,"isFeatured":true}},{"name":"595e","type":3,"text":"Now in Android #113","markups":[]},{"name":"1541","type":13,"text":"Second Developer Preview of Android 16, Android XR, Spotlight Week on Android Camera and Media, Android Studio Ladybug Feature Drop and more!","markups":[{"type":3,"start":0,"end":38,"href":"https://android-developers.googleblog.com/2024/12/second-developer-preview-android16.html","title":"","rel":"noopener","anchorType":0},{"type":3,"start":40,"end":50,"href":"https://android-developers.googleblog.com/2024/12/introducing-android-xr-sdk-developer-preview.html","title":"","rel":"noopener","anchorType":0},{"type":3,"start":52,"end":94,"href":"https://android-developers.googleblog.com/2025/01/spotlight-week-android-camera-and-media.html","title":"","rel":"noopener","anchorType":0},{"type":3,"start":96,"end":131,"href":"https://android-developers.googleblog.com/2025/01/android-studio-ladybug-feature-drop-is-stable.html","title":"","rel":"noopener","anchorType":0}]},{"name":"3d02","type":1,"text":"Welcome to the 113th iteration of Now in Android — your ongoing guide to what’s new and notable in the world of Android development.","markups":[]},{"name":"a89a","type":1,"text":"In this edition, we’ll cover the Second Developer Preview of Android 16, Android XR, the Spotlight Week on Android Camera and Media, the Android Studio Ladybug…","markups":[{"type":3,"start":33,"end":71,"href":"https://android-developers.googleblog.com/2024/12/second-developer-preview-android16.html","title":"","rel":"","anchorType":0},{"type":3,"start":73,"end":83,"href":"https://android-developers.googleblog.com/2024/12/introducing-android-xr-sdk-developer-preview.html","title":"","rel":"","anchorType":0},{"type":3,"start":89,"end":131,"href":"https://android-developers.googleblog.com/2025/01/spotlight-week-android-camera-and-media.html","title":"","rel":"","anchorType":0},{"type":3,"start":137,"end":172,"href":"https://android-developers.googleblog.com/2025/01/android-studio-ladybug-feature-drop-is-stable.html","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"9aef","startIndex":0}]},"isFullContent":false,"subtitle":"Second Developer Preview of Android 16, Android XR, Camera and Media Spotlight Week, Android Studio Ladybug Feature Drop, and more."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"8a7fa5b76641":{"id":"8a7fa5b76641","versionId":"5f797857cef6","creatorId":"7c4e8b4f1538","homeCollectionId":"95b274b437c2","title":"Create a spotlight effect with CameraX and Jetpack Compose","detectedLanguage":"en","latestVersion":"5f797857cef6","latestPublishedVersion":"5f797857cef6","hasUnpublishedEdits":false,"latestRev":335,"createdAt":1737114125187,"updatedAt":1737656897678,"acceptedAt":0,"firstPublishedAt":1737651800140,"latestPublishedAt":1737656138247,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Part 3 — Explore how to overlay Compose UI elements on top of your camera preview for a richer user experience.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*Ay6Qn6hYSX4FzqZFWv2Nkw.png","filter":"","backgroundSize":"","originalWidth":17538,"originalHeight":5221,"strategy":"resample","height":0,"width":0},"wordCount":1227,"imageCount":2,"readingTime":5.013522012578616,"subtitle":"Part 3 — Explore how to overlay Compose UI elements on top of your camera preview for a richer user experience.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":26,"isBookmarked":false,"tags":[{"slug":"android","name":"Android","postCount":147067,"metadata":{"postCount":147067,"coverImage":{"id":"1*KvklZWHGXpXjg2U8ARLxlg.jpeg","originalWidth":505,"originalHeight":672}},"type":"Tag"},{"slug":"compose","name":"Compose","postCount":1122,"metadata":{"postCount":1122,"coverImage":{"id":"1*OUAsgvNoNx9VpSk9Eyqgzg.jpeg","originalWidth":2048,"originalHeight":2048,"isFeatured":true}},"type":"Tag"},{"slug":"jetpack-compose","name":"Jetpack Compose","postCount":6691,"metadata":{"postCount":6691,"coverImage":{"id":"1*o3s6tDkZqbCo7bkHTWEJGA.png","originalWidth":6912,"originalHeight":3456,"isFeatured":true}},"type":"Tag"},{"slug":"mobile-app-development","name":"Mobile App Development","postCount":99296,"metadata":{"postCount":99296,"coverImage":{"id":"1*p3LySR2q4D3IzBbCatCNow.png","originalWidth":1010,"originalHeight":548,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://medium.com/androiddevelopers/getting-started-with-camerax-in-jetpack-compose-781c722ca0c4","alts":[{"type":3,"url":"medium://p/781c722ca0c4"},{"type":2,"url":"medium://p/781c722ca0c4"}],"httpStatus":200},{"url":"https://medium.com/androiddevelopers/tap-to-focus-mastering-camerax-transformations-in-jetpack-compose-440853280a6e","alts":[{"type":3,"url":"medium://p/440853280a6e"},{"type":2,"url":"medium://p/440853280a6e"}],"httpStatus":200},{"url":"https://gist.github.com/JolandaVerhoef/74d4696b804736c698450bd34b5c9ff8#file-3_spotlight_effect-kt","alts":[],"httpStatus":200},{"url":"https://issuetracker.google.com/390643162","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/camera/camera2/interop/Camera2Interop","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/CoordinateTransformer","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/hardware/camera2/CaptureRequest#STATISTICS_FACE_DETECT_MODE","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/camera/compose/package-summary#CameraXViewfinder(androidx.camera.core.SurfaceRequest,androidx.compose.ui.Modifier,androidx.camera.viewfinder.core.ImplementationMode,androidx.camera.viewfinder.compose.MutableCoordinateTransformer)","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/camera/core/SurfaceRequest.TransformationInfo","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/hardware/camera2/CameraCaptureSession.CaptureCallback","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Rect","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/compose/ui/graphics/package-summary#Canvas(android.graphics.Canvas)","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/camera/core/SurfaceRequest.TransformationInfo#getSensorToBufferTransform()","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1737656140081},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":105,"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":"create-a-spotlight-effect-with-camerax-and-jetpack-compose","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"create-a-spotlight-effect-with-camerax-and-jetpack-compose-8a7fa5b76641","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*Ay6Qn6hYSX4FzqZFWv2Nkw.png","originalWidth":17538,"originalHeight":5221,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"Create a spotlight effect with CameraX and Jetpack Compose","alignment":1},{"name":"previewSubtitle","type":13,"text":"Part 3 — Explore how to overlay Compose UI…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Part 3 — Explore how to overlay Compose UI elements on top of your camera preview for a richer user experience."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"95b274b437c2","isNewsletter":false,"newsletterId":"9497d4cf9a05","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":"c6ca","type":4,"text":"","markups":[],"layout":3,"metadata":{"id":"1*Ay6Qn6hYSX4FzqZFWv2Nkw.png","originalWidth":17538,"originalHeight":5221,"isFeatured":true}},{"name":"eea0","type":3,"text":"Create a spotlight effect with CameraX and Jetpack Compose","markups":[{"type":1,"start":0,"end":58}]},{"name":"7a94","type":13,"text":"Part 3 of Unlocking the Power of CameraX in Jetpack Compose","markups":[]},{"name":"ed53","type":1,"text":"Hey there! Welcome back to our series on CameraX and Jetpack Compose. In the previous posts, we’ve covered the fundamentals of setting up a camera preview and added tap-to-focus functionality.","markups":[]},{"name":"1ba8","type":9,"text":"🧱 Part 1: Building a basic camera preview using the new camera-compose artifact. We covered permission handling and basic integration.","markups":[{"type":3,"start":3,"end":9,"href":"https://medium.com/androiddevelopers/getting-started-with-camerax-in-jetpack-compose-781c722ca0c4","title":"","rel":"","anchorType":0},{"type":1,"start":0,"end":10}]},{"name":"1dbc","type":9,"text":"…","markups":[{"type":3,"start":3,"end":9,"href":"https://medium.com/androiddevelopers/tap-to-focus-mastering-camerax-transformations-in-jetpack-compose-440853280a6e","title":"","rel":"","anchorType":0},{"type":1,"start":0,"end":10}]}],"sections":[{"name":"8c64","startIndex":0}]},"isFullContent":false,"subtitle":"Part 3 — Explore how to overlay Compose UI elements on top of your camera preview for a richer user experience."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"440853280a6e":{"id":"440853280a6e","versionId":"ee328d9614bd","creatorId":"7c4e8b4f1538","homeCollectionId":"95b274b437c2","title":"Tap to focus: Mastering CameraX Transformations in Jetpack Compose","detectedLanguage":"en","latestVersion":"ee328d9614bd","latestPublishedVersion":"ee328d9614bd","hasUnpublishedEdits":false,"latestRev":440,"createdAt":1733996017363,"updatedAt":1736447676094,"acceptedAt":0,"firstPublishedAt":1736442254280,"latestPublishedAt":1736442254280,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Part 2 — Using the Compose gesture system , graphics, and coroutines to implement a visual tap-to-focus.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*k-WDMPkp9zsnxyyQ6v1VMA.png","filter":"","backgroundSize":"","originalWidth":17538,"originalHeight":5221,"strategy":"resample","height":0,"width":0},"wordCount":1363,"imageCount":3,"readingTime":5.693396226415095,"subtitle":"Part 2 — Using the Compose gesture system , graphics, and coroutines to implement a visual tap-to-focus.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":20,"isBookmarked":false,"tags":[{"slug":"jetpack-compose","name":"Jetpack Compose","postCount":6691,"metadata":{"postCount":6691,"coverImage":{"id":"1*o3s6tDkZqbCo7bkHTWEJGA.png","originalWidth":6912,"originalHeight":3456,"isFeatured":true}},"type":"Tag"},{"slug":"android","name":"Android","postCount":147067,"metadata":{"postCount":147067,"coverImage":{"id":"1*KvklZWHGXpXjg2U8ARLxlg.jpeg","originalWidth":505,"originalHeight":672}},"type":"Tag"},{"slug":"kotlin","name":"Kotlin","postCount":32417,"metadata":{"postCount":32417,"coverImage":{"id":"1*l2Ta0VPNJKpohDzG2CIfQw.png","originalWidth":1780,"originalHeight":1020,"isFeatured":true}},"type":"Tag"},{"slug":"programming","name":"Programming","postCount":477210,"metadata":{"postCount":477210,"coverImage":{"id":"1*uFbaWri2lJTX70PSGZGQeQ.png","originalWidth":1280,"originalHeight":720,"isFeatured":true}},"type":"Tag"},{"slug":"mobile-app-development","name":"Mobile App Development","postCount":99296,"metadata":{"postCount":99296,"coverImage":{"id":"1*p3LySR2q4D3IzBbCatCNow.png","originalWidth":1010,"originalHeight":548,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://medium.com/androiddevelopers/getting-started-with-camerax-in-jetpack-compose-781c722ca0c4","alts":[{"type":3,"url":"medium://p/781c722ca0c4"},{"type":2,"url":"medium://p/781c722ca0c4"}],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2025/01/spotlight-week-android-camera-and-media.html","alts":[],"httpStatus":200},{"url":"https://gist.github.com/JolandaVerhoef/74d4696b804736c698450bd34b5c9ff8#file-2_2_tap_to_focus_konfetti-kt","alts":[],"httpStatus":200},{"url":"https://gist.github.com/JolandaVerhoef/74d4696b804736c698450bd34b5c9ff8#file-2_1_tap_to_focus-kt","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/camera/core/SurfaceOrientedMeteringPointFactory%5C","alts":[],"httpStatus":404},{"url":"https://issuetracker.google.com/383692145","alts":[],"httpStatus":200},{"url":"https://github.com/DanielMartinus/Konfetti","alts":[],"httpStatus":200},{"url":"https://github.com/google/jetpack-camera-app","alts":[],"httpStatus":200},{"url":"https://github.com/google/jetpack-camera-app/blob/41f953fde14bca11fed9534d074a9f5f67e8eaac/core/camera/src/main/java/com/google/jetpackcamera/core/camera/CameraXCameraUseCase.kt#L108","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/camera/view/CameraController","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/compose/foundation/gestures/package-summary#(androidx.compose.ui.input.pointer.PointerInputScope).detectTapGestures(kotlin.Function1,kotlin.Function1,kotlin.coroutines.SuspendFunction2,kotlin.Function1)","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/compose/ui/input/pointer/package-summary#(androidx.compose.ui.Modifier).pointerInput(kotlin.Any,kotlin.Any,kotlin.coroutines.SuspendFunction1)","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/compose/ui/geometry/Offset","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/camera/core/SurfaceRequest","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/camera/compose/package-summary#CameraXViewfinder(androidx.camera.core.SurfaceRequest,androidx.compose.ui.Modifier,androidx.camera.viewfinder.surface.ImplementationMode,androidx.camera.viewfinder.compose.MutableCoordinateTransformer)%5C","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/camera#1.5.0-alpha01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/camera/core/MeteringPoint","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/camera/core/CameraControl","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/camera/viewfinder/compose/MutableCoordinateTransformer","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1736442255890},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":155,"sectionCount":4,"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":"tap-to-focus-mastering-camerax-transformations-in-jetpack-compose","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"tap-to-focus-mastering-camerax-transformations-in-jetpack-compose-440853280a6e","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*k-WDMPkp9zsnxyyQ6v1VMA.png","originalWidth":17538,"originalHeight":5221,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"Tap to focus: Mastering CameraX Transformations in Jetpack Compose","alignment":1},{"name":"previewSubtitle","type":13,"text":"Part 2 — Using the Compose gesture…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Part 2 — Using the Compose gesture system , graphics, and coroutines to implement a visual tap-to-focus."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"95b274b437c2","isNewsletter":false,"newsletterId":"258f026421a2","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":"3a24","type":4,"text":"","markups":[],"layout":3,"metadata":{"id":"1*k-WDMPkp9zsnxyyQ6v1VMA.png","originalWidth":17538,"originalHeight":5221,"isFeatured":true}},{"name":"dd6f","type":3,"text":"Tap to focus: Mastering CameraX Transformations in Jetpack Compose","markups":[]},{"name":"0ed5","type":13,"text":"Part 2 of Unlocking the Power of CameraX in Jetpack Compose","markups":[]},{"name":"50c3","type":1,"text":"This blog post is a part of Camera and Media Spotlight Week. We’re providing resources — blog posts, videos, sample code, and more — all designed to help you uplevel the media experiences in your app.","markups":[{"type":2,"start":0,"end":200}]},{"name":"863d","type":1,"text":"To learn more about what Spotlight Week has to offer and how it can…","markups":[{"type":3,"start":92,"end":119,"href":"https://android-developers.googleblog.com/2025/01/spotlight-week-android-camera-and-media.html","title":"","rel":"noopener ugc nofollow","anchorType":0},{"type":2,"start":0,"end":120}]}],"sections":[{"name":"d70e","startIndex":0}]},"isFullContent":false,"subtitle":"Part 2 — Using the Compose gesture system , graphics, and coroutines to implement a visual tap-to-focus."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"781c722ca0c4":{"id":"781c722ca0c4","versionId":"6b6dd61ef0f4","creatorId":"7c4e8b4f1538","homeCollectionId":"95b274b437c2","title":"Getting Started with CameraX in Jetpack Compose","detectedLanguage":"en","latestVersion":"6b6dd61ef0f4","latestPublishedVersion":"6b6dd61ef0f4","hasUnpublishedEdits":false,"latestRev":527,"createdAt":1733943054810,"updatedAt":1736854098522,"acceptedAt":0,"firstPublishedAt":1736271070871,"latestPublishedAt":1736850703235,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Part 1 — A guide to building a basic camera preview, covering setup, permissions, ViewModel creation, and UI implementation.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*k-WDMPkp9zsnxyyQ6v1VMA.png","filter":"","backgroundSize":"","originalWidth":17538,"originalHeight":5221,"strategy":"resample","height":0,"width":0},"wordCount":1404,"imageCount":5,"readingTime":6.131446540880503,"subtitle":"Part 1 — A guide to building a basic camera preview, covering setup, permissions, ViewModel creation, and UI implementation.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":44,"isBookmarked":false,"tags":[{"slug":"android","name":"Android","postCount":147067,"metadata":{"postCount":147067,"coverImage":{"id":"1*KvklZWHGXpXjg2U8ARLxlg.jpeg","originalWidth":505,"originalHeight":672}},"type":"Tag"},{"slug":"jetpack-compose","name":"Jetpack Compose","postCount":6691,"metadata":{"postCount":6691,"coverImage":{"id":"1*o3s6tDkZqbCo7bkHTWEJGA.png","originalWidth":6912,"originalHeight":3456,"isFeatured":true}},"type":"Tag"},{"slug":"androidx","name":"Androidx","postCount":273,"metadata":{"postCount":273,"coverImage":{"id":"1*k-WDMPkp9zsnxyyQ6v1VMA.png","originalWidth":17538,"originalHeight":5221,"isFeatured":true}},"type":"Tag"},{"slug":"programming","name":"Programming","postCount":477210,"metadata":{"postCount":477210,"coverImage":{"id":"1*uFbaWri2lJTX70PSGZGQeQ.png","originalWidth":1280,"originalHeight":720,"isFeatured":true}},"type":"Tag"},{"slug":"kotlin","name":"Kotlin","postCount":32417,"metadata":{"postCount":32417,"coverImage":{"id":"1*l2Ta0VPNJKpohDzG2CIfQw.png","originalWidth":1780,"originalHeight":1020,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://google.github.io/accompanist/permissions/","alts":[],"httpStatus":200},{"url":"https://medium.com/androiddevelopers/tap-to-focus-mastering-camerax-transformations-in-jetpack-compose-440853280a6e","alts":[{"type":3,"url":"medium://p/440853280a6e"},{"type":2,"url":"medium://p/440853280a6e"}],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2025/01/spotlight-week-android-camera-and-media.html","alts":[],"httpStatus":200},{"url":"https://gist.github.com/JolandaVerhoef/74d4696b804736c698450bd34b5c9ff8","alts":[],"httpStatus":200},{"url":"https://developer.android.com/media/camera/camerax#ease-of-use","alts":[],"httpStatus":200},{"url":"https://developer.android.com/compose","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/camera#viewfinder-compose-1.0.0-alpha01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/androidx/camera/core/Preview.Builder","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/camera/compose/package-summary#CameraXViewfinder(androidx.camera.core.SurfaceRequest,androidx.compose.ui.Modifier,androidx.camera.viewfinder.surface.ImplementationMode,androidx.camera.viewfinder.compose.MutableCoordinateTransformer)","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/kotlin/androidx/camera/core/SurfaceRequest","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/camera","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1736850705588},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":158,"sectionCount":4,"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":"getting-started-with-camerax-in-jetpack-compose","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"getting-started-with-camerax-in-jetpack-compose-781c722ca0c4","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*k-WDMPkp9zsnxyyQ6v1VMA.png","originalWidth":17538,"originalHeight":5221,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"Getting Started with CameraX in Jetpack Compose","alignment":1},{"name":"previewSubtitle","type":13,"text":"Part 1 — A guide to building a basic camera preview…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Part 1 — A guide to building a basic camera preview, covering setup, permissions, ViewModel creation, and UI implementation."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"95b274b437c2","isNewsletter":false,"newsletterId":"288f773107b6","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":"6491","type":4,"text":"","markups":[],"layout":3,"metadata":{"id":"1*k-WDMPkp9zsnxyyQ6v1VMA.png","originalWidth":17538,"originalHeight":5221,"isFeatured":true}},{"name":"0bd1","type":3,"text":"Getting Started with CameraX in Jetpack Compose","markups":[{"type":1,"start":0,"end":47}]},{"name":"89a5","type":13,"text":"Part 1 of Unlocking the Power of CameraX in Jetpack Compose","markups":[]},{"name":"8c71","type":1,"text":"This blog post is a part of Camera and Media Spotlight Week. We’re providing resources — blog posts, videos, sample code, and more — all designed to help you uplevel the media experiences in your app.","markups":[{"type":2,"start":0,"end":200}]},{"name":"7582","type":1,"text":"To learn more about what Spotlight Week has to offer and how it can…","markups":[{"type":3,"start":92,"end":119,"href":"https://android-developers.googleblog.com/2025/01/spotlight-week-android-camera-and-media.html","title":"","rel":"","anchorType":0},{"type":2,"start":0,"end":120}]}],"sections":[{"name":"d4bc","startIndex":0}]},"isFullContent":false,"subtitle":"Part 1 — A guide to building a basic camera preview, covering setup, permissions, ViewModel creation, and UI implementation."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"1cfe18163ddd":{"id":"1cfe18163ddd","versionId":"34e4ec8d4c99","creatorId":"f4d5f1a633bb","homeCollectionId":"95b274b437c2","title":"Compose Tips for Delightful UI — ’24 wrap up","detectedLanguage":"en","latestVersion":"34e4ec8d4c99","latestPublishedVersion":"34e4ec8d4c99","hasUnpublishedEdits":false,"latestRev":543,"createdAt":1734511347153,"updatedAt":1735057781401,"acceptedAt":0,"firstPublishedAt":1735055760513,"latestPublishedAt":1735055760513,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"An overview of Season 1 of our brand new YouTube series, “Compose Tips for Delightful UI”, covering best practices to improve your UI.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*EKZEUvYLMRmTgd3r5i73Gg.png","filter":"","backgroundSize":"","originalWidth":800,"originalHeight":445,"strategy":"resample","height":0,"width":0},"wordCount":658,"imageCount":1,"readingTime":2.6830188679245284,"subtitle":"An overview of Season 1 of our brand new YouTube series, “Compose Tips for Delightful UI”, covering best practices to improve your UI.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":63,"isBookmarked":false,"tags":[{"slug":"jetpack-compose","name":"Jetpack Compose","postCount":6691,"metadata":{"postCount":6691,"coverImage":{"id":"1*o3s6tDkZqbCo7bkHTWEJGA.png","originalWidth":6912,"originalHeight":3456,"isFeatured":true}},"type":"Tag"},{"slug":"api","name":"API","postCount":59256,"metadata":{"postCount":59256,"coverImage":{"id":"0*cPM8RhTgl9Lcv1r2","originalWidth":6720,"originalHeight":4480,"isFeatured":true,"unsplashPhotoId":"oXlXu2qukGE"}},"type":"Tag"},{"slug":"best-practices","name":"Best Practices","postCount":16255,"metadata":{"postCount":16255,"coverImage":{"id":"1*i_sXnafp-COR53e9tgJfdQ.png","originalWidth":1200,"originalHeight":627,"isFeatured":true}},"type":"Tag"},{"slug":"ui","name":"UI","postCount":67666,"metadata":{"postCount":67666,"coverImage":{"id":"0*jLY__m0rmg5Cy9aK.png","originalWidth":1073,"originalHeight":880,"isFeatured":true}},"type":"Tag"},{"slug":"featured","name":"Featured","postCount":22033,"metadata":{"postCount":22033,"coverImage":{"id":"1*fKjh0JbYTDei5dAp_mUrPQ.png","originalWidth":1472,"originalHeight":832,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":7,"links":{"entries":[{"url":"https://www.youtube.com/playlist?list=PLWz5rJ2EKKc9tgU26tbUAy01MzC2Yjztb","alts":[{"type":2,"url":"http://www.youtube.com/playlist?list=PLWz5rJ2EKKc9tgU26tbUAy01MzC2Yjztb&feature=applinks"},{"type":3,"url":"http://www.youtube.com/playlist?list=PLWz5rJ2EKKc9tgU26tbUAy01MzC2Yjztb&feature=applinks"}],"httpStatus":200}],"version":"0.3","generatedAt":1735055760847},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":203,"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":"compose-tips-for-delightful-ui-24-wrap-up","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"compose-tips-for-delightful-ui-24-wrap-up-1cfe18163ddd","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*EKZEUvYLMRmTgd3r5i73Gg.png","originalWidth":800,"originalHeight":445,"isFeatured":true,"alt":"Compose Tips for Delightful UI"}},{"name":"previewTitle","type":3,"text":"Compose Tips for Delightful UI — ’24 wrap up","alignment":1},{"name":"previewSubtitle","type":13,"text":"An overview of Season 1 of our brand new YouTube series…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"An overview of Season 1 of our brand new YouTube series, “Compose Tips for Delightful UI”, covering best practices to improve your UI."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"95b274b437c2","isNewsletter":false,"newsletterId":"4a09f3d4ff06","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":"e92e","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*EKZEUvYLMRmTgd3r5i73Gg.png","originalWidth":800,"originalHeight":445,"isFeatured":true,"alt":"Compose Tips for Delightful UI"}},{"name":"fb41","type":3,"text":"Compose Tips for Delightful UI — ’24 wrap up","markups":[]},{"name":"9885","type":1,"text":"In July 2024, we launched a brand new YouTube series called “Compose Tips for Delightful UI”. The series set out to give short, actionable and technical tips for working with Jetpack Compose and share small examples of APIs that are not as widely known.","markups":[{"type":1,"start":60,"end":93},{"type":1,"start":121,"end":157}]},{"name":"62a4","type":1,"text":"We aimed to show how you…","markups":[{"type":1,"start":20,"end":21},{"type":1,"start":28,"end":61},{"type":1,"start":133,"end":175}]}],"sections":[{"name":"9fd8","startIndex":0}]},"isFullContent":false,"subtitle":"An overview of Season 1 of our brand new YouTube series, “Compose Tips for Delightful UI”, covering best practices to improve your UI."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"fc66ce31550c":{"id":"fc66ce31550c","versionId":"9a76a2aac59f","creatorId":"e7fe434b60e4","homeCollectionId":"95b274b437c2","title":"Now in Android #112","detectedLanguage":"en","latestVersion":"9a76a2aac59f","latestPublishedVersion":"9a76a2aac59f","hasUnpublishedEdits":false,"latestRev":743,"createdAt":1733985314750,"updatedAt":1736116567851,"acceptedAt":0,"firstPublishedAt":1734125452769,"latestPublishedAt":1734125526615,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"First Developer Preview of Android 16, our Spotlight Week on Passkeys, Stability 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":2256,"imageCount":3,"readingTime":9.063207547169812,"subtitle":"First Developer Preview of Android 16, our Spotlight Week on Passkeys, Stability and more.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":7,"isBookmarked":false,"tags":[{"slug":"passkey","name":"Passkey","postCount":412,"metadata":{"postCount":412,"coverImage":{"id":"0*l3lIEz472yVhc_Co","originalWidth":4784,"originalHeight":3194,"isFeatured":true,"alt":"Keys","unsplashPhotoId":"q7h8LVeUgFU"}},"type":"Tag"},{"slug":"android-16","name":"Android 16","postCount":33,"metadata":{"postCount":33,"coverImage":{"id":"1*Sy3ea40KCd6LSmU6QFUgDA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},"type":"Tag"},{"slug":"android-studio","name":"Android Studio","postCount":3727,"metadata":{"postCount":3727,"coverImage":{"id":"1*Q8Z3kXUWQkp_fX8QtFmTdw.png","originalWidth":938,"originalHeight":662,"isFeatured":true}},"type":"Tag"},{"slug":"now-in-android","name":"Now In Android","postCount":119,"metadata":{"postCount":119,"coverImage":{"id":"1*Sy3ea40KCd6LSmU6QFUgDA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},"type":"Tag"},{"slug":"featured","name":"Featured","postCount":22033,"metadata":{"postCount":22033,"coverImage":{"id":"1*fKjh0JbYTDei5dAp_mUrPQ.png","originalWidth":1472,"originalHeight":832,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://developers.google.com/learn/pathways/passkeys_web-2","alts":[],"httpStatus":404},{"url":"https://www.youtube.com/watch?v=NG5c9QjNEx8","alts":[],"httpStatus":200},{"url":"https://developer.android.com/identity/autofill/credential-manager-autofill","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=TDGzLGLmVzY","alts":[],"httpStatus":200},{"url":"https://goo.gle/passkeys-4min-video","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=OjcdophFcTE&list=PLWz5rJ2EKKc9AtgKMBBdphI-mrx8XzW56","alts":[],"httpStatus":200},{"url":"https://ai.google.dev/competition","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/versions/all-channel","alts":[],"httpStatus":200},{"url":"https://developer.android.com/identity/sign-in/credential-manager-troubleshooting-guide","alts":[],"httpStatus":200},{"url":"https://play.google.com/store/apps/details?id=com.demo.opencv","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=w7O6f_wIWZ8","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/10/flipaclip-optimizes-for-tablets-and-stylus.html","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/12/build-high-quality-enagaing-age-appropriate-apps.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/11/weareplay-meet-more-people-creating-apps-games-japan.html","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=P6oWGNWuLeA","alts":[],"httpStatus":200},{"url":"https://nowinandroid.libsyn.com/112-android-16-developer-preview-1-passkeys-spotlight-week-and-more","alts":[],"httpStatus":200},{"url":"https://adbackstage.libsyn.com/episode-211-rules-about-performance-tools","alts":[],"httpStatus":200},{"url":"https://adbackstage.libsyn.com/episode-208-micro-optimizations","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=iKSLwym0Acw","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/09/attestation-format-change-for-android-fido2-api.html","alts":[],"httpStatus":200},{"url":"https://youtube.com/live/HvyIcPfS18s?feature=share","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/11/the-first-developer-preview-android16.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/11/x-improved-login-success-rate-after-adopting-passkeys.html","alts":[],"httpStatus":200},{"url":"https://developer.android.com/identity","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=NDdzo7Uichc","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/12/weareplay-tentang-anak-connects-parents-to-experts-indonesia.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/11/passkeys-spotlight-week.html","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=mxkR1PE0mk0","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=jZbnEIUJk5w","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/webkit#1.13.0-alpha01","alts":[],"httpStatus":200},{"url":"https://developer.android.com/identity/sign-in/restore-credentials","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/11/the-first-developer-preview-android16.html","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/12/user-agent-reduction-on-android-webview.html","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/exifinterface#1.4.0-alpha01","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/11/gaze-link-wins-best-android-app-gemini-api-developer-competition.html","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=rdS4A2YFBHA","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=bvXWQ2NidmQ","alts":[],"httpStatus":200},{"url":"https://developer.android.com/courses/pathways/passkeys","alts":[],"httpStatus":200},{"url":"http://adbackstage.libsyn.com/episode-211-rules-about-performance-tools","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=pvz37J9jIVg","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/11/android-emulator-stability-performance-updates.html","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/11/gaze-link-wins-best-android-app-gemini-api-developer-competition.html","alts":[],"httpStatus":200},{"url":"https://developer.chrome.com/docs/identity/webauthn-signal-api","alts":[],"httpStatus":200},{"url":"https://developers.google.com/learn/pathways/passkeys_web","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=eh-MOwZTzMw","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://www.youtube.com/watch?v=KawI7srRvOM","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/12/making-play-integrity-api-faster-resilient-private.html","alts":[],"httpStatus":200},{"url":"https://developers.google.com/identity/passkeys/developer-guides/server-registration","alts":[],"httpStatus":200},{"url":"https://developer.android.com/design/ui/mobile/guides/patterns/passkeys","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/11/passkeys-spotlight-week.html","alts":[],"httpStatus":200},{"url":"https://developer.android.com/jetpack/androidx/releases/media3#1.5.0","alts":[],"httpStatus":200},{"url":"https://github.com/android/identity-samples/tree/credman-compose/Shrine","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/12/build-high-quality-enagaing-age-appropriate-apps.html","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/user/androiddevelopers","alts":[{"type":3,"url":"https://www.youtube.com/channel/UCVHFbqXqoYvEWM1Ddxl0QDg?feature=applinks"},{"type":2,"url":"vnd.youtube://www.youtube.com/channel/UCVHFbqXqoYvEWM1Ddxl0QDg"}],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=w7O6f_wIWZ8&list=PLWz5rJ2EKKc_QaRSspi6yPx_3R8KTXM10&index=1","alts":[],"httpStatus":200},{"url":"https://android-developers.googleblog.com/2024/11/unlocking-global-growth-google-play-makes-business-easy.html","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=xKk1DYamuPk","alts":[],"httpStatus":200},{"url":"http://android-developers.googleblog.com/2024/11/unlocking-global-growth-google-play-makes-business-easy.html","alts":[],"httpStatus":200},{"url":"https://developer.android.com/identity/sign-in/single-tap-biometric","alts":[],"httpStatus":200},{"url":"https://play.google.com/store/apps/details?id=com.criyos.tentanganak","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=PiwHwa7oiRE","alts":[],"httpStatus":200},{"url":"https://web.dev/case-studies/tokyu-passkeys","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=P2LPxXKMvYI","alts":[],"httpStatus":200},{"url":"https://kristisimakova.medium.com/be62bdb53af8","alts":[{"type":2,"url":"medium://p/be62bdb53af8"},{"type":3,"url":"medium://p/be62bdb53af8"}],"httpStatus":200}],"version":"0.3","generatedAt":1734125526787},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":75,"sectionCount":2,"readingList":0,"topics":[]},"coverless":true,"slug":"now-in-android-112","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"now-in-android-112-fc66ce31550c","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*Sy3ea40KCd6LSmU6QFUgDA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},{"name":"2711","type":3,"text":"Now in Android #112","markups":[],"alignment":1},{"name":"2153","type":13,"text":"First Developer Preview of Android 16, our Spotlight Week on Passkeys, Stability…","markups":[{"type":3,"start":0,"end":37,"href":"http://android-developers.googleblog.com/2024/11/the-first-developer-preview-android16.html","title":"","rel":"noopener","anchorType":0},{"type":3,"start":43,"end":69,"href":"http://android-developers.googleblog.com/2024/11/passkeys-spotlight-week.html","title":"","rel":"noopener","anchorType":0},{"type":3,"start":71,"end":80,"href":"http://android-developers.googleblog.com/2024/11/android-emulator-stability-performance-updates.html","title":"","rel":"noopener","anchorType":0}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"First Developer Preview of Android 16, our Spotlight Week on Passkeys, Stability and more."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"95b274b437c2","isNewsletter":false,"newsletterId":"57938587604e","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":"1cc2","type":4,"text":"","markups":[],"layout":3,"metadata":{"id":"1*Sy3ea40KCd6LSmU6QFUgDA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},{"name":"2711","type":3,"text":"Now in Android #112","markups":[]},{"name":"2153","type":13,"text":"First Developer Preview of Android 16, our Spotlight Week on Passkeys, Stability and Performance Improvements to the Android Emulator and more!","markups":[{"type":3,"start":0,"end":37,"href":"http://android-developers.googleblog.com/2024/11/the-first-developer-preview-android16.html","title":"","rel":"noopener","anchorType":0},{"type":3,"start":43,"end":69,"href":"http://android-developers.googleblog.com/2024/11/passkeys-spotlight-week.html","title":"","rel":"noopener","anchorType":0},{"type":3,"start":71,"end":133,"href":"http://android-developers.googleblog.com/2024/11/android-emulator-stability-performance-updates.html","title":"","rel":"noopener","anchorType":0}]},{"name":"fc16","type":1,"text":"Welcome to the 112th iteration of Now in Android: your ongoing guide to what’s new and notable in the world of Android development.","markups":[]},{"name":"b339","type":1,"text":"In this edition, we’ll cover the First Developer Preview of Android 16, our Spotlight Week on Passkeys, Stability and Performance Improvements to the Android Emulator and more!","markups":[{"type":3,"start":33,"end":70,"href":"http://android-developers.googleblog.com/2024/11/the-first-developer-preview-android16.html","title":"","rel":"","anchorType":0},{"type":3,"start":76,"end":102,"href":"http://android-developers.googleblog.com/2024/11/passkeys-spotlight-week.html","title":"","rel":"","anchorType":0},{"type":3,"start":104,"end":166,"href":"http://android-developers.googleblog.com/2024/11/android-emulator-stability-performance-updates.html","title":"","rel":"","anchorType":0}]},{"name":"adcb","type":11,"text":"","markups":[],"layout":1,"iframe":{"mediaResourceId":"5c0346bbefed7a72fce8180dafc0d70f","iframeWidth":854,"iframeHeight":480,"thumbnailUrl":"https://i.embed.ly/1/image?url=https%3A%2F%2Fi.ytimg.com%2Fvi%2FOjcdophFcTE%2Fhqdefault.jpg&key=a19fcc184b9711e1b4764040d3dc5c07"}}],"sections":[{"name":"df01","startIndex":0}]},"isFullContent":false,"subtitle":"First Developer Preview of Android 16, our Spotlight Week on Passkeys, Stability and more."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"53c57e531f5d":{"id":"53c57e531f5d","versionId":"f5876e091355","creatorId":"589a988a8086","homeCollectionId":"95b274b437c2","title":"Vulkan 1.4: Faster App Loads, Less Stutter and Less Memory Usage — Host Image Copy Is a Game…","detectedLanguage":"en","latestVersion":"f5876e091355","latestPublishedVersion":"f5876e091355","hasUnpublishedEdits":false,"latestRev":305,"createdAt":1732557784563,"updatedAt":1738643402284,"acceptedAt":0,"firstPublishedAt":1733418273409,"latestPublishedAt":1738639874975,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Android games can leverage Vulkan 1.4’s Host Image Copy to reduce stutter, speed up loading times, and optimize memory.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*Uz21_KlpWNb_Zc7qXlM7fw.png","filter":"","backgroundSize":"","originalWidth":4209,"originalHeight":1253,"strategy":"resample","height":0,"width":0},"wordCount":1325,"imageCount":4,"readingTime":5.7,"subtitle":"Android games can leverage Vulkan 1.4’s Host Image Copy to reduce stutter, speed up loading times, and optimize memory.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":12,"isBookmarked":false,"tags":[{"slug":"android","name":"Android","postCount":147067,"metadata":{"postCount":147067,"coverImage":{"id":"1*KvklZWHGXpXjg2U8ARLxlg.jpeg","originalWidth":505,"originalHeight":672}},"type":"Tag"},{"slug":"games","name":"Games","postCount":146300,"metadata":{"postCount":146300,"coverImage":{"id":"1*55Kg2pNsMQrQuCRU_z_MYA.png","originalWidth":1456,"originalHeight":816,"isFeatured":true}},"type":"Tag"},{"slug":"vulkan","name":"Vulkan","postCount":138,"metadata":{"postCount":138,"coverImage":{"id":"1*rvxQ2XOP9kLXFY3VQ4ywUA.png","originalWidth":3296,"originalHeight":1922,"isFeatured":true}},"type":"Tag"},{"slug":"graphics-programming","name":"Graphics Programming","postCount":221,"metadata":{"postCount":221,"coverImage":{"id":"0*Uc60UDqQWsYFDKro","originalWidth":5472,"originalHeight":3648,"isFeatured":true,"unsplashPhotoId":"AT77Q0Njnt0"}},"type":"Tag"},{"slug":"performance","name":"Performance","postCount":30664,"metadata":{"postCount":30664,"coverImage":{"id":"1*5fUjgQy2V26QX23Ir1GiDA.jpeg","originalWidth":1920,"originalHeight":1080,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://registry.khronos.org/vulkan/specs/latest/man/html/vkCopyMemoryToImage.html","alts":[],"httpStatus":200},{"url":"https://registry.khronos.org/vulkan/specs/latest/man/html/VkPhysicalDeviceHostImageCopyProperties.html","alts":[],"httpStatus":200},{"url":"https://registry.khronos.org/vulkan/specs/latest/man/html/vkCmdCopyBufferToImage2.html","alts":[],"httpStatus":200},{"url":"https://registry.khronos.org/vulkan/specs/latest/man/html/VkHostImageCopyDevicePerformanceQuery.html","alts":[],"httpStatus":200},{"url":"https://registry.khronos.org/vulkan/specs/latest/man/html/VK_EXT_host_image_copy.html","alts":[],"httpStatus":200},{"url":"https://en.wikipedia.org/wiki/Uniform_memory_access","alts":[],"httpStatus":200},{"url":"https://www.khronos.org/news/press/khronos-streamlines-development-and-deployment-of-gpu-accelerated-applications-with-vulkan-1.4","alts":[],"httpStatus":200},{"url":"https://www.khronos.org/blog/copying-images-on-the-host-in-vulkan","alts":[],"httpStatus":200},{"url":"https://github.com/KhronosGroup/Vulkan-Profiles/blob/main/profiles/VP_ANDROID_16_minimums.json","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1738639875414},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":16,"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":"vulkan-1-4-faster-app-loads-less-stutter-and-less-memory-usage-host-image-copy-is-a-game","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"vulkan-1-4-faster-app-loads-less-stutter-and-less-memory-usage-host-image-copy-is-a-game-53c57e531f5d","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*Uz21_KlpWNb_Zc7qXlM7fw.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"Vulkan 1.4: Faster App Loads, Less Stutter and Less Memory Usage — Host Image Copy Is a Game","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Android games can leverage Vulkan 1.4’s Host Image Copy to reduce stutter, speed up loading times, and optimize memory."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"95b274b437c2","isNewsletter":false,"newsletterId":"374c34782c3c","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":"89ad","type":4,"text":"","markups":[],"layout":3,"metadata":{"id":"1*Uz21_KlpWNb_Zc7qXlM7fw.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},{"name":"a5c5","type":3,"text":"Vulkan 1.4: Faster app loads, less stutter and less Memory Usage","markups":[{"type":2,"start":0,"end":64}]},{"name":"a9c8","type":13,"text":"Host Image Copy is a game changer for Android","markups":[]},{"name":"160a","type":3,"text":"Overview","markups":[]},{"name":"a637","type":1,"text":"Vulkan 1.4 was released recently, and with it comes a significant feature for Android: Host Image Copy, based on VK_EXT_host_image_copy.","markups":[{"type":10,"start":113,"end":135},{"type":3,"start":24,"end":32,"href":"https://www.khronos.org/news/press/khronos-streamlines-development-and-deployment-of-gpu-accelerated-applications-with-vulkan-1.4","title":"","rel":"","anchorType":0},{"type":3,"start":113,"end":135,"href":"https://registry.khronos.org/vulkan/specs/latest/man/html/VK_EXT_host_image_copy.html","title":"","rel":"","anchorType":0}]},{"name":"a82c","type":1,"text":"We have previously written about this extension in this Khronos blog post, explaining the technical details of using this extension. This extension is particularly useful for Android games as we’ll…","markups":[{"type":3,"start":51,"end":73,"href":"https://www.khronos.org/blog/copying-images-on-the-host-in-vulkan","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"f8da","startIndex":0}]},"isFullContent":false,"subtitle":"Android games can leverage Vulkan 1.4’s Host Image Copy to reduce stutter, speed up loading times, and optimize memory."},"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":1733865005578,"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":14,"isBookmarked":false,"tags":[{"slug":"featured","name":"Featured","postCount":22033,"metadata":{"postCount":22033,"coverImage":{"id":"1*fKjh0JbYTDei5dAp_mUrPQ.png","originalWidth":1472,"originalHeight":832,"isFeatured":true}},"type":"Tag"},{"slug":"jetpack-compose","name":"Jetpack Compose","postCount":6691,"metadata":{"postCount":6691,"coverImage":{"id":"1*o3s6tDkZqbCo7bkHTWEJGA.png","originalWidth":6912,"originalHeight":3456,"isFeatured":true}},"type":"Tag"},{"slug":"google-play","name":"Google Play","postCount":2126,"metadata":{"postCount":2126,"coverImage":{"id":"1*Zg3Bo2X_fMk-agYmXPr-uw.jpeg","originalWidth":3126,"originalHeight":4108,"isFeatured":true}},"type":"Tag"},{"slug":"android-studio","name":"Android Studio","postCount":3727,"metadata":{"postCount":3727,"coverImage":{"id":"1*Q8Z3kXUWQkp_fX8QtFmTdw.png","originalWidth":938,"originalHeight":662,"isFeatured":true}},"type":"Tag"},{"slug":"now-in-android","name":"Now In Android","postCount":119,"metadata":{"postCount":119,"coverImage":{"id":"1*Sy3ea40KCd6LSmU6QFUgDA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},"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":125,"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":7,"isBookmarked":false,"tags":[{"slug":"android-15","name":"Android 15","postCount":171,"metadata":{"postCount":171,"coverImage":{"id":"1*S01_fp4hq7yduIWMdArYVQ.jpeg","originalWidth":1920,"originalHeight":1080,"isFeatured":true}},"type":"Tag"},{"slug":"rcs-messaging","name":"Rcs Messaging","postCount":188,"metadata":{"postCount":188,"coverImage":{"id":"1*EbYwO07Xo4fyf7iCKroXYQ.jpeg","originalWidth":5052,"originalHeight":3338}},"type":"Tag"},{"slug":"android-studio","name":"Android Studio","postCount":3727,"metadata":{"postCount":3727,"coverImage":{"id":"1*Q8Z3kXUWQkp_fX8QtFmTdw.png","originalWidth":938,"originalHeight":662,"isFeatured":true}},"type":"Tag"},{"slug":"now-in-android","name":"Now In Android","postCount":119,"metadata":{"postCount":119,"coverImage":{"id":"1*Sy3ea40KCd6LSmU6QFUgDA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},"type":"Tag"},{"slug":"featured","name":"Featured","postCount":22033,"metadata":{"postCount":22033,"coverImage":{"id":"1*fKjh0JbYTDei5dAp_mUrPQ.png","originalWidth":1472,"originalHeight":832,"isFeatured":true}},"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":56,"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"},"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":171,"metadata":{"postCount":171,"coverImage":{"id":"1*S01_fp4hq7yduIWMdArYVQ.jpeg","originalWidth":1920,"originalHeight":1080,"isFeatured":true}},"type":"Tag"},{"slug":"google-play","name":"Google Play","postCount":2126,"metadata":{"postCount":2126,"coverImage":{"id":"1*Zg3Bo2X_fMk-agYmXPr-uw.jpeg","originalWidth":3126,"originalHeight":4108,"isFeatured":true}},"type":"Tag"},{"slug":"featured","name":"Featured","postCount":22033,"metadata":{"postCount":22033,"coverImage":{"id":"1*fKjh0JbYTDei5dAp_mUrPQ.png","originalWidth":1472,"originalHeight":832,"isFeatured":true}},"type":"Tag"},{"slug":"now-in-android","name":"Now In Android","postCount":119,"metadata":{"postCount":119,"coverImage":{"id":"1*Sy3ea40KCd6LSmU6QFUgDA.png","originalWidth":4209,"originalHeight":1253,"isFeatured":true}},"type":"Tag"},{"slug":"androidx","name":"Androidx","postCount":273,"metadata":{"postCount":273,"coverImage":{"id":"1*k-WDMPkp9zsnxyyQ6v1VMA.png","originalWidth":17538,"originalHeight":5221,"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"}}},"paging":{"path":"/_/api/collections/95b274b437c2/stream","next":{"to":"1733418273409","ignoredIds":["9c60a12a8473","a8ae5802604f","1dbf4e81b127"],"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":53898,"activeAt":1737675843686},"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":["d6617517df62","8a7fa5b76641","440853280a6e","781c722ca0c4","1cfe18163ddd","fc66ce31550c","53c57e531f5d"]}},{"type":1,"postListMetadata":{"source":4,"layout":4,"number":3,"postIds":["9c60a12a8473","a8ae5802604f","1dbf4e81b127"],"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":53898,"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":1739797969033,"randomId":"74eb688bc1d4","section":{"items":[{"post":{"postId":"d6617517df62"},"itemType":"post"},{"post":{"postId":"8a7fa5b76641"},"itemType":"post"},{"post":{"postId":"440853280a6e"},"itemType":"post"},{"post":{"postId":"781c722ca0c4"},"itemType":"post"},{"post":{"postId":"1cfe18163ddd"},"itemType":"post"},{"post":{"postId":"fc66ce31550c"},"itemType":"post"},{"post":{"postId":"53c57e531f5d"},"itemType":"post"}],"layout":4},"itemType":"section","type":"StreamItem"},{"createdAt":1739797969033,"randomId":"489fe27c5d2a","section":{"items":[{"post":{"postId":"9c60a12a8473"},"itemType":"post"},{"post":{"postId":"a8ae5802604f"},"itemType":"post"},{"post":{"postId":"1dbf4e81b127"},"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:'913607f7f9ab5ffc',t:'MTczOTc5Nzk2OS4wMDAwMDA='};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>