CINXE.COM

Release Notes  |  Android  |  Google for Developers

<!doctype html> <html lang="en" dir="ltr"> <head> <meta name="google-signin-client-id" content="721724668570-nbkv1cfusk7kk4eni4pjvepaus73b13t.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award"> <meta property="og:site_name" content="Google for Developers"> <meta property="og:type" content="website"><meta name="theme-color" content="#fff"><meta charset="utf-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="/_pwa/developers/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//www.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.googleapis.com" crossorigin> <link rel="preconnect" href="//apis.google.com" crossorigin> <link rel="preconnect" href="//www.google-analytics.com" crossorigin><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"> <link rel="stylesheet" href="//fonts.googleapis.com/css2?family=Material+Icons&family=Material+Symbols+Outlined&display=block"><link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/developers/css/app.css"> <link rel="shortcut icon" href="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/developers/images/favicon-new.png"> <link rel="apple-touch-icon" href="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/developers/images/touchicon-180-new.png"><link rel="canonical" href="https://developers.google.com/admob/android/rel-notes"><link rel="search" type="application/opensearchdescription+xml" title="Google for Developers" href="https://developers.google.com/s/opensearch.xml"> <link rel="alternate" hreflang="en" href="https://developers.google.com/admob/android/rel-notes" /><link rel="alternate" hreflang="x-default" href="https://developers.google.com/admob/android/rel-notes" /><link rel="alternate" hreflang="ar" href="https://developers.google.com/admob/android/rel-notes?hl=ar" /><link rel="alternate" hreflang="bn" href="https://developers.google.com/admob/android/rel-notes?hl=bn" /><link rel="alternate" hreflang="zh-Hans" href="https://developers.google.com/admob/android/rel-notes?hl=zh-cn" /><link rel="alternate" hreflang="zh-Hant" href="https://developers.google.com/admob/android/rel-notes?hl=zh-tw" /><link rel="alternate" hreflang="fa" href="https://developers.google.com/admob/android/rel-notes?hl=fa" /><link rel="alternate" hreflang="fr" href="https://developers.google.com/admob/android/rel-notes?hl=fr" /><link rel="alternate" hreflang="de" href="https://developers.google.com/admob/android/rel-notes?hl=de" /><link rel="alternate" hreflang="he" href="https://developers.google.com/admob/android/rel-notes?hl=he" /><link rel="alternate" hreflang="hi" href="https://developers.google.com/admob/android/rel-notes?hl=hi" /><link rel="alternate" hreflang="id" href="https://developers.google.com/admob/android/rel-notes?hl=id" /><link rel="alternate" hreflang="it" href="https://developers.google.com/admob/android/rel-notes?hl=it" /><link rel="alternate" hreflang="ja" href="https://developers.google.com/admob/android/rel-notes?hl=ja" /><link rel="alternate" hreflang="ko" href="https://developers.google.com/admob/android/rel-notes?hl=ko" /><link rel="alternate" hreflang="pl" href="https://developers.google.com/admob/android/rel-notes?hl=pl" /><link rel="alternate" hreflang="pt-BR" href="https://developers.google.com/admob/android/rel-notes?hl=pt-br" /><link rel="alternate" hreflang="ru" href="https://developers.google.com/admob/android/rel-notes?hl=ru" /><link rel="alternate" hreflang="es-419" href="https://developers.google.com/admob/android/rel-notes?hl=es-419" /><link rel="alternate" hreflang="th" href="https://developers.google.com/admob/android/rel-notes?hl=th" /><link rel="alternate" hreflang="tr" href="https://developers.google.com/admob/android/rel-notes?hl=tr" /><link rel="alternate" hreflang="vi" href="https://developers.google.com/admob/android/rel-notes?hl=vi" /><title>Release Notes &nbsp;|&nbsp; Android &nbsp;|&nbsp; Google for Developers</title> <meta property="og:title" content="Release Notes &nbsp;|&nbsp; Android &nbsp;|&nbsp; Google for Developers"><meta property="og:url" content="https://developers.google.com/admob/android/rel-notes"><meta property="og:image" content="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/developers/images/opengraph/white.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="675"><meta property="og:locale" content="en"><meta name="twitter:card" content="summary_large_image"><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "headline": "Release Notes" } </script><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{ "@type": "ListItem", "position": 1, "name": "AdMob", "item": "https://developers.google.com/admob" },{ "@type": "ListItem", "position": 2, "name": "Mobile Ads SDK (Android)", "item": "https://developers.google.com/admob/android/quick-start" },{ "@type": "ListItem", "position": 3, "name": "Release Notes", "item": "https://developers.google.com/admob/android/rel-notes" }] } </script> <link rel="stylesheet" href="/extras.css"></head> <body class="" template="page" theme="white" type="article" layout="docs" display-toc pending> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <a href="#main-content" class="skip-link button"> Skip to main content </a> <section class="devsite-wrapper"> <devsite-cookie-notification-bar></devsite-cookie-notification-bar><devsite-header role="banner"> <div class="devsite-header--inner nocontent"> <div class="devsite-top-logo-row-wrapper-wrapper"> <div class="devsite-top-logo-row-wrapper"> <div class="devsite-top-logo-row"> <button type="button" id="devsite-hamburger-menu" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Navigation menu button" visually-hidden aria-label="Open menu"> </button> <div class="devsite-product-name-wrapper"> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" aria-label="Product breadcrumb"> <li class="devsite-breadcrumb-item devsite-has-google-wordmark"> <a href="https://developers.google.com/admob" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Google AdMob" > <svg class="devsite-google-wordmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 148 48"> <title>Google</title> <path class="devsite-google-wordmark-svg-path" d="M19.58,37.65c-9.87,0-18.17-8.04-18.17-17.91c0-9.87,8.3-17.91,18.17-17.91c5.46,0,9.35,2.14,12.27,4.94l-3.45,3.45c-2.1-1.97-4.93-3.49-8.82-3.49c-7.21,0-12.84,5.81-12.84,13.02c0,7.21,5.64,13.02,12.84,13.02c4.67,0,7.34-1.88,9.04-3.58c1.4-1.4,2.32-3.41,2.66-6.16H19.58v-4.89h16.47c0.18,0.87,0.26,1.92,0.26,3.06c0,3.67-1.01,8.21-4.24,11.44C28.93,35.9,24.91,37.65,19.58,37.65z M61.78,26.12c0,6.64-5.1,11.53-11.36,11.53s-11.36-4.89-11.36-11.53c0-6.68,5.1-11.53,11.36-11.53S61.78,19.43,61.78,26.12z M56.8,26.12c0-4.15-2.96-6.99-6.39-6.99c-3.43,0-6.39,2.84-6.39,6.99c0,4.11,2.96,6.99,6.39,6.99C53.84,33.11,56.8,30.22,56.8,26.12z M87.25,26.12c0,6.64-5.1,11.53-11.36,11.53c-6.26,0-11.36-4.89-11.36-11.53c0-6.68,5.1-11.53,11.36-11.53C82.15,14.59,87.25,19.43,87.25,26.12zM82.28,26.12c0-4.15-2.96-6.99-6.39-6.99c-3.43,0-6.39,2.84-6.39,6.99c0,4.11,2.96,6.99,6.39,6.99C79.32,33.11,82.28,30.22,82.28,26.12z M112.09,15.29v20.7c0,8.52-5.02,12.01-10.96,12.01c-5.59,0-8.95-3.76-10.22-6.81l4.41-1.83c0.79,1.88,2.71,4.1,5.81,4.1c3.8,0,6.16-2.36,6.16-6.77v-1.66h-0.18c-1.14,1.4-3.32,2.62-6.07,2.62c-5.76,0-11.05-5.02-11.05-11.49c0-6.51,5.28-11.57,11.05-11.57c2.75,0,4.93,1.22,6.07,2.58h0.18v-1.88H112.09z M107.64,26.16c0-4.06-2.71-7.03-6.16-7.03c-3.49,0-6.42,2.97-6.42,7.03c0,4.02,2.93,6.94,6.42,6.94C104.93,33.11,107.64,30.18,107.64,26.16z M120.97,3.06v33.89h-5.07V3.06H120.97z M140.89,29.92l3.93,2.62c-1.27,1.88-4.32,5.11-9.61,5.11c-6.55,0-11.28-5.07-11.28-11.53c0-6.86,4.77-11.53,10.71-11.53c5.98,0,8.91,4.76,9.87,7.34l0.52,1.31l-15.42,6.38c1.18,2.31,3.01,3.49,5.59,3.49C137.79,33.11,139.58,31.84,140.89,29.92zM128.79,25.77l10.31-4.28c-0.57-1.44-2.27-2.45-4.28-2.45C132.24,19.04,128.66,21.31,128.79,25.77z"/> </svg>AdMob </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/admob/android/quick-start" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="Google Mobile Ads SDK for Android" > Mobile Ads SDK (Android) </a> </li> </ul> </span> </div> <div class="devsite-top-logo-row-middle"> <div class="devsite-header-upper-tabs"> </div> <devsite-search enable-signin enable-search enable-suggestions enable-query-completion project-name="Android" tenant-name="Google for Developers" project-scope="/admob/android/quick-start" url-scoped="https://developers.google.com/s/results/admob/android/quick-start" > <form class="devsite-search-form" action="https://developers.google.com/s/results" method="GET"> <div class="devsite-search-container"> <button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> <div class="devsite-searchbox"> <input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-expanded="false" aria-haspopup="listbox" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" role="combobox" type="text" value="" > <div class="devsite-search-image material-icons" aria-hidden="true"> </div> <div class="devsite-search-shortcut-icon-container" aria-hidden="true"> <kbd class="devsite-search-shortcut-icon">/</kbd> </div> </div> </div> </form> <button type="button" search-close class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Close search"></button> </devsite-search> </div> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es" >Español</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> <devsite-user enable-profiles fp-auth id="devsite-user"> <span class="button devsite-top-button" aria-hidden="true" visually-hidden>Sign in</span> </devsite-user> </div> </div> </div> <div class="devsite-collapsible-section "> <div class="devsite-header-background"> <div class="devsite-doc-set-nav-row"> <devsite-tabs class="lower-tabs"> <nav class="devsite-tabs-wrapper" aria-label="Lower tabs"> <tab > <a href="https://developers.google.com/admob/android/quick-start" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developers.google.com/admob/android/quick-start" track-type="nav" track-metadata-position="nav - guides" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Guides" track-name="guides" > Guides </a> </tab> <tab > <a href="https://developers.google.com/android/reference/com/google/android/gms/ads/package-summary" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developers.google.com/android/reference/com/google/android/gms/ads/package-summary" track-type="nav" track-metadata-position="nav - reference" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Reference" track-name="reference" > Reference </a> </tab> <tab class="devsite-active"> <a href="https://developers.google.com/admob/android/sdk" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developers.google.com/admob/android/sdk" track-type="nav" track-metadata-position="nav - sdk" track-metadata-module="primary nav" aria-label="SDK, selected" data-category="Site-Wide Custom Events" data-label="Tab: SDK" track-name="sdk" > SDK </a> </tab> <tab > <a href="//github.com/googleads/googleads-mobile-android-examples" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="//github.com/googleads/googleads-mobile-android-examples" track-type="nav" track-metadata-position="nav - samples" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Samples" track-name="samples" > Samples </a> </tab> <tab > <a href="https://developers.google.com/admob/support" class="devsite-tabs-content gc-analytics-event " track-metadata-eventdetail="https://developers.google.com/admob/support" track-type="nav" track-metadata-position="nav - support" track-metadata-module="primary nav" data-category="Site-Wide Custom Events" data-label="Tab: Support" track-name="support" > Support </a> </tab> </nav> </devsite-tabs> </div> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars > <div class="devsite-book-nav-filter" > <span class="filter-list-icon material-icons" aria-hidden="true"></span> <input type="text" placeholder="Filter" aria-label="Type to filter" role="searchbox"> <span class="filter-clear-button hidden" data-title="Clear filter" aria-label="Clear filter" role="button" tabindex="0"></span> </div> <nav class="devsite-book-nav devsite-nav nocontent" aria-label="Side menu"> <div class="devsite-mobile-header"> <button type="button" id="devsite-close-nav" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close navigation" aria-label="Close navigation"> </button> <div class="devsite-product-name-wrapper"> <span class="devsite-product-name"> <ul class="devsite-breadcrumb-list" aria-label="Upper header breadcrumb"> <li class="devsite-breadcrumb-item devsite-has-google-wordmark"> <a href="https://developers.google.com/admob" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="Google AdMob" > <svg class="devsite-google-wordmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 148 48"> <title>Google</title> <path class="devsite-google-wordmark-svg-path" d="M19.58,37.65c-9.87,0-18.17-8.04-18.17-17.91c0-9.87,8.3-17.91,18.17-17.91c5.46,0,9.35,2.14,12.27,4.94l-3.45,3.45c-2.1-1.97-4.93-3.49-8.82-3.49c-7.21,0-12.84,5.81-12.84,13.02c0,7.21,5.64,13.02,12.84,13.02c4.67,0,7.34-1.88,9.04-3.58c1.4-1.4,2.32-3.41,2.66-6.16H19.58v-4.89h16.47c0.18,0.87,0.26,1.92,0.26,3.06c0,3.67-1.01,8.21-4.24,11.44C28.93,35.9,24.91,37.65,19.58,37.65z M61.78,26.12c0,6.64-5.1,11.53-11.36,11.53s-11.36-4.89-11.36-11.53c0-6.68,5.1-11.53,11.36-11.53S61.78,19.43,61.78,26.12z M56.8,26.12c0-4.15-2.96-6.99-6.39-6.99c-3.43,0-6.39,2.84-6.39,6.99c0,4.11,2.96,6.99,6.39,6.99C53.84,33.11,56.8,30.22,56.8,26.12z M87.25,26.12c0,6.64-5.1,11.53-11.36,11.53c-6.26,0-11.36-4.89-11.36-11.53c0-6.68,5.1-11.53,11.36-11.53C82.15,14.59,87.25,19.43,87.25,26.12zM82.28,26.12c0-4.15-2.96-6.99-6.39-6.99c-3.43,0-6.39,2.84-6.39,6.99c0,4.11,2.96,6.99,6.39,6.99C79.32,33.11,82.28,30.22,82.28,26.12z M112.09,15.29v20.7c0,8.52-5.02,12.01-10.96,12.01c-5.59,0-8.95-3.76-10.22-6.81l4.41-1.83c0.79,1.88,2.71,4.1,5.81,4.1c3.8,0,6.16-2.36,6.16-6.77v-1.66h-0.18c-1.14,1.4-3.32,2.62-6.07,2.62c-5.76,0-11.05-5.02-11.05-11.49c0-6.51,5.28-11.57,11.05-11.57c2.75,0,4.93,1.22,6.07,2.58h0.18v-1.88H112.09z M107.64,26.16c0-4.06-2.71-7.03-6.16-7.03c-3.49,0-6.42,2.97-6.42,7.03c0,4.02,2.93,6.94,6.42,6.94C104.93,33.11,107.64,30.18,107.64,26.16z M120.97,3.06v33.89h-5.07V3.06H120.97z M140.89,29.92l3.93,2.62c-1.27,1.88-4.32,5.11-9.61,5.11c-6.55,0-11.28-5.07-11.28-11.53c0-6.86,4.77-11.53,10.71-11.53c5.98,0,8.91,4.76,9.87,7.34l0.52,1.31l-15.42,6.38c1.18,2.31,3.01,3.49,5.59,3.49C137.79,33.11,139.58,31.84,140.89,29.92zM128.79,25.77l10.31-4.28c-0.57-1.44-2.27-2.45-4.28-2.45C132.24,19.04,128.66,21.31,128.79,25.77z"/> </svg>AdMob </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/admob/android/quick-start" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Upper Header" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="Google Mobile Ads SDK for Android" > Mobile Ads SDK (Android) </a> </li> </ul> </span> </div> </div> <div class="devsite-book-nav-wrapper"> <div class="devsite-mobile-nav-top"> <ul class="devsite-nav-list"> <li class="devsite-nav-item"> <a href="/admob/android/quick-start" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Guides" track-name="guides" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Guides" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Guides </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="/android/reference/com/google/android/gms/ads/package-summary" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Reference" track-name="reference" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Reference" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Reference </span> </a> </li> <li class="devsite-nav-item"> <a href="/admob/android/sdk" class="devsite-nav-title gc-analytics-event devsite-nav-has-children devsite-nav-active" data-category="Site-Wide Custom Events" data-label="Tab: SDK" track-name="sdk" data-category="Site-Wide Custom Events" data-label="Responsive Tab: SDK" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > SDK </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> <li class="devsite-nav-item"> <a href="//github.com/googleads/googleads-mobile-android-examples" class="devsite-nav-title gc-analytics-event " data-category="Site-Wide Custom Events" data-label="Tab: Samples" track-name="samples" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Samples" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Samples </span> </a> </li> <li class="devsite-nav-item"> <a href="/admob/support" class="devsite-nav-title gc-analytics-event devsite-nav-has-children " data-category="Site-Wide Custom Events" data-label="Tab: Support" track-name="support" data-category="Site-Wide Custom Events" data-label="Responsive Tab: Support" track-type="navMenu" track-metadata-eventDetail="globalMenu" track-metadata-position="nav"> <span class="devsite-nav-text" tooltip > Support </span> <span class="devsite-nav-icon material-icons" data-icon="forward" > </span> </a> </li> </ul> </div> <div class="devsite-mobile-nav-bottom"> <ul class="devsite-nav-list" menu="_book"> <li class="devsite-nav-item"><a href="/admob/android/sdk" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /admob/android/sdk" track-type="bookNav" track-name="click" track-metadata-eventdetail="/admob/android/sdk" ><span class="devsite-nav-text" tooltip>SDK</span></a></li> <li class="devsite-nav-item"><a href="/admob/android/rel-notes" class="devsite-nav-title gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Book nav link, pathname: /admob/android/rel-notes" track-type="bookNav" track-name="click" track-metadata-eventdetail="/admob/android/rel-notes" ><span class="devsite-nav-text" tooltip>Release notes</span></a></li> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" id="main-content" class="devsite-main-content" has-book-nav has-sidebar > <div class="devsite-sidebar"> <div class="devsite-sidebar-content"> <devsite-toc class="devsite-nav" role="navigation" aria-label="On this page" depth="2" scrollbars ></devsite-toc> <devsite-recommendations-sidebar class="nocontent devsite-nav"> </devsite-recommendations-sidebar> </div> </div> <devsite-content> <article class="devsite-article"> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" aria-label="Breadcrumb"> <li class="devsite-breadcrumb-item "> <a href="https://developers.google.com/" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="1" track-type="globalNav" track-name="breadcrumb" track-metadata-position="1" track-metadata-eventdetail="" > Home </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/products" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="2" track-type="globalNav" track-name="breadcrumb" track-metadata-position="2" track-metadata-eventdetail="" > Products </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/admob" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="3" track-type="globalNav" track-name="breadcrumb" track-metadata-position="3" track-metadata-eventdetail="Google AdMob" > AdMob </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/admob/android/quick-start" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="4" track-type="globalNav" track-name="breadcrumb" track-metadata-position="4" track-metadata-eventdetail="Google Mobile Ads SDK for Android" > Mobile Ads SDK (Android) </a> </li> <li class="devsite-breadcrumb-item "> <div class="devsite-breadcrumb-guillemet material-icons" aria-hidden="true"></div> <a href="https://developers.google.com/admob/android/sdk" class="devsite-breadcrumb-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Breadcrumbs" data-value="5" track-type="globalNav" track-name="breadcrumb" track-metadata-position="5" track-metadata-eventdetail="" > SDK </a> </li> </ul> <devsite-thumb-rating position="header"> </devsite-thumb-rating> </div> <h1 class="devsite-page-title" tabindex="-1"> Release Notes </h1> <devsite-feature-tooltip ack-key="AckCollectionsBookmarkTooltipDismiss" analytics-category="Site-Wide Custom Events" analytics-action-show="Callout Profile displayed" analytics-action-close="Callout Profile dismissed" analytics-label="Create Collection Callout" class="devsite-page-bookmark-tooltip nocontent" dismiss-button="true" id="devsite-collections-dropdown" dismiss-button-text="Dismiss" close-button-text="Got it"> <devsite-bookmark></devsite-bookmark> <span slot="popout-heading"> Stay organized with collections </span> <span slot="popout-contents"> Save and categorize content based on your preferences. </span> </devsite-feature-tooltip> <div class="devsite-page-title-meta"><devsite-view-release-notes></devsite-view-release-notes></div> <devsite-toc class="devsite-nav" depth="2" devsite-toc-embedded > </devsite-toc> <devsite-recommendations-dropdown class="nocontent"></devsite-recommendations-dropdown> <div class="devsite-article-body clearfix "> <table class="fixed"> <tr> <th width="8%">Version</th> <th width="11%">Release Date</th> <th>Notes</th> </tr> <tr> <td id="23.6.0">23.6.0</td> <td>2024&#8209;12&#8209;03</td> <td> <ul> <li>Deprecated all APIs related to the interscroller ad format. For example, <code translate="no" dir="ltr">AdSize.getCurrentOrientationInterscrollerAdSize()</code>.</li> </ul> </td> </tr> <tr> <td id="23.5.0">23.5.0</td> <td>2024&#8209;10&#8209;29</td> <td> <ul> <li>Updated ad load failure logcat messages introduced in 23.4.0 release from error to info level.</li> <li>Improved monetization of personalized ads in Custom Tabs for WebView API for ads.</li> </ul> </td> </tr> <tr> <td id="23.4.0">23.4.0</td> <td>2024&#8209;09&#8209;30</td> <td> <ul> <li>Ad load failures now invoke a logcat message that says <code translate="no" dir="ltr">ad failed to load</code> in the failure's stack trace. The stack trace logs this message as an error, but doesn't imply a crash. Consult <a href="/admob/android/ad-load-errors#error_logging_messages">Debug common error logging messages</a> to interpret common ad loading failures. If you see a recurring error related to ad serving that’s not documented, share the stack trace with <a href="//developers.google.com/admob/support">Mobile Ads SDK support</a>. </li> <li>Added <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder#addCustomTargeting(java.lang.String,%20java.util.List<java.lang.String>)">addCustomTargeting()</a></code> methods to <code translate="no" dir="ltr">AdRequest</code>. </li> </ul> </td> </tr> <tr> <td id="23.3.0">23.3.0</td> <td>2024&#8209;08&#8209;12</td> <td> <ul> <li>Updated User Messaging Platform SDK dependency to version 3.0.0.</li> </ul> </td> </tr> <tr> <td id="23.2.0">23.2.0</td> <td>2024&#8209;06&#8209;27</td> <td> <ul> <li>Added <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/BaseAdView#public-boolean-iscollapsible">AdView.isCollapsible()</a></code> to indicate whether the last loaded banner is collapsible.</li> </ul> </td> </tr> <tr> <td id="23.1.0">23.1.0</td> <td>2024&#8209;05&#8209;09</td> <td> <ul> <li>Requires a minimum <code translate="no" dir="ltr">compileSdkVersion</code> of 34.</li> <li><b>Native Mediation adapters</b>: Deprecated <code translate="no" dir="ltr">loadNativeAd</code> and <code translate="no" dir="ltr">loadRtbNativeAd()</code> in favor of <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/mediation/Adapter#public-void-loadnativeadmapper-mediationnativeadconfiguration-adconfiguration,-mediationadloadcallbacknativeadmapper,-mediationnativeadcallback-callback">loadNativeAdMapper()</code></a> and <a href="/android/reference/com/google/android/gms/ads/mediation/rtb/RtbAdapter#public-void-loadrtbnativeadmapper-mediationnativeadconfiguration-adconfiguration,-mediationadloadcallbacknativeadmapper,-mediationnativeadcallback-callback"><code translate="no" dir="ltr">loadRtbNativeAdMapper()</code></a>. Adapters should migrate to using these new load methods and related objects.</li> </ul> </td> </tr> <tr> <td id="23.0.0">23.0.0</td> <td>2024&#8209;03&#8209;07</td> <td> <aside class="warning">This release is a MAJOR version update with several breaking changes. See <a href="/admob/android/migration#migrate-to-v23">Migrate to SDK v23</a> for more information on how to migrate.</aside> <ul> <li>Breaking changes: <ul> <li>Increased the minimum Android API level to 21.</li> <li>To <a href="//support.google.com/admob/answer/13973847">continue collecting user metrics in AdMob</a>, link your AdMob app to Firebase and integrate the Google Analytics for Firebase SDK into your app.</li> <li>Removed the deprecated <code translate="no" dir="ltr">MobileAds.enableSameAppKey()</code> API and updated the alternative method <code translate="no" dir="ltr">MobileAds.putPublisherFirstPartyIdEnabled()</code> to return a boolean about whether the control persistence is successful or not.</li> <li><code translate="no" dir="ltr">Native Ads</code>: <ul> <li>Removed <code translate="no" dir="ltr">AdLoader.forUnifiedNativeAd()</code>. Use <code translate="no" dir="ltr">AdLoader.forNativeAd()</code> instead.</li> <li>Removed <code translate="no" dir="ltr">AdLoader.forCustomTemplateAd()</code>. Use <code translate="no" dir="ltr">AdLoader.forCustomFormatAd()</code> instead.</li> </ul> </li> <li>Removed <code translate="no" dir="ltr">AdFormat.UNKNOWN</code> with no replacement. Apps using <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/query/QueryInfo#generate(android.content.Context,%20com.google.android.gms.ads.AdFormat,%20com.google.android.gms.ads.AdRequest,%20java.lang.String,%20com.google.android.gms.ads.query.QueryInfoGenerationCallback)">QueryInfo.generate()</a></code> must pass an ad format.</li> <li><code translate="no" dir="ltr">AdManagerAdRequest.Builder</code> methods inherited from its parent can now be chained together to build an object from a single call. This required a change in the inheritance structure such that <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/admanager/AdManagerAdRequest.Builder">AdManagerAdRequest.Builder</a></code> no longer inherits from <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder">AdRequest.Builder</a></code>.</li> </ul> </li> <li>Adds <a href="/android/reference/com/google/android/gms/ads/MobileAds#registerCustomTabsSession(android.content.Context,%20androidx.browser.customtabs.CustomTabsClient,%20java.lang.String,%20androidx.browser.customtabs.CustomTabsCallback)">MobileAds.registerCustomTabsSession()</a> to improve monetization for ads in Custom Tabs. See <a href="/admob/android/webview/custom-tabs">Optimize Custom Tabs</a> for more information.</li> <li>Updated User Messaging Platform SDK dependency to version 2.2.0.</li> </ul> </td> </tr> <tr> <td id="22.6.0">22.6.0</td> <td>2023&#8209;12&#8209;06</td> <td> <ul> <li>Deprecated <code translate="no" dir="ltr">MobileAds.setSameAppKeyEnabled()</code> and renamed the method to <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/MobileAds#putPublisherFirstPartyIdEnabled(boolean)">MobileAds.putPublisherFirstPartyIdEnabled()</a></code>.</li> <li>Deprecated <code translate="no" dir="ltr">AdFormat.UNKNOWN</code> with no replacement. Apps using <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/query/QueryInfo#generate(android.content.Context,%20com.google.android.gms.ads.AdFormat,%20com.google.android.gms.ads.AdRequest,%20com.google.android.gms.ads.query.QueryInfoGenerationCallback)">QueryInfo.generate()</a></code> must pass an ad format.</li> </ul> </td> </tr> <tr> <td id="22.5.0">22.5.0</td> <td>2023&#8209;10&#8209;30</td> <td> <ul> <li>Updated User Messaging Platform SDK dependency to version 2.1.0.</li> <li>Added the <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/RequestConfiguration.Builder#setPublisherPrivacyPersonalizationState(com.google.android.gms.ads.RequestConfiguration.PublisherPrivacyPersonalizationState)">setPublisherPrivacyPersonalizationState()</a></code> method for the <a href="//support.google.com/admob/answer/14323214">Publisher Privacy Treatment API (Beta)</a>. </li> </ul> </td> </tr> <tr> <td id="22.4.0">22.4.0</td> <td>2023&#8209;09&#8209;13</td> <td> <ul> <li> Requires a minimum <code translate="no" dir="ltr">compileSdkVersion</code> of <code translate="no" dir="ltr">33</code>. </li> <li><b>Ad inspector:</b> Added SDK support for requesting and showing ads requested through Ad Inspector UI. </li> <li>Added a new <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/query/QueryInfo#generate(android.content.Context,%20com.google.android.gms.ads.AdFormat,%20com.google.android.gms.ads.AdRequest,%20java.lang.String,%20com.google.android.gms.ads.query.QueryInfoGenerationCallback)">QueryInfo.generate()</a></code> method that takes an ad unit ID. </li> <li>Enables initial testing of the Attribution Reporting Beta and Topics Beta <a href="https://developer.android.com/design-for-safety/privacy-sandbox/introduction#privacy-preserving-apis">privacy-preserving APIs</a>. See the AdMob <a href="/admob/android/privacy/sandbox">Privacy Sandbox on Android</a> guide for more information. </li> </ul> </td> </tr> <tr> <td id="22.3.0">22.3.0</td> <td>2023&#8209;08&#8209;22</td> <td> <ul> <li>Added support for creating adaptive sizes using <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/AdSize#FULL_WIDTH">AdSize.FULL_WIDTH</a></code> as the width. Previously, ad sizes created using <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/AdSize#FULL_WIDTH">AdSize.FULL_WIDTH</a></code> would be treated as <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/AdSize#SMART_BANNER">AdSize.SMART_BANNER</a></code>.</li> </ul> </td> </tr> <tr> <td id="22.2.0">22.2.0</td> <td>2023&#8209;07&#8209;05</td> <td> <ul> <li><b>Custom events:</b> <ul> <li>Deprecated <code translate="no" dir="ltr">AdRequest.Builder.addCustomEventExtrasBundle()</code>. <a href="/admob/android/custom-events/setup#initialize_the_adapter">Extend Adapter</a> and interact with the extra parameters through <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder#public-adrequest.builder-addnetworkextrasbundle-class-extends-mediationextrasreceiver-adapterclass,-bundle-networkextras">AdRequest.Builder.addNetworkExtrasBundle()</a></code> instead.</li> <li>Deprecated <code translate="no" dir="ltr">AdRequest.getCustomEventExtrasBundle()</code>. <a href="/admob/android/custom-events/setup#initialize_the_adapter">Extend Adapter</a> and interact with the extra parameters through <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/AdRequest#public-bundle-getnetworkextrasbundle-classt-adapterclass">AdRequest.getNetworkExtrasBundle()</a></code> instead.</li> </ul> </li> </ul> </td> </tr> <tr> <td id="22.1.0">22.1.0</td> <td>2023&#8209;05&#8209;18</td> <td> <ul> <li><b>Ad inspector:</b> Enabled ability to trigger ad requests from the ad inspector UI on devices that don't have Google Play services.</li> </ul> </td> </tr> <tr> <td id="22.0.0">22.0.0</td> <td>2023&#8209;03&#8209;29</td> <td> <aside class="warning">This release is a MAJOR version update with several breaking changes. See <a href="/admob/android/migration#migrate-to-v22">Migrate to SDK v22</a> for more information on how to migrate.</aside> <ul> <li>Breaking changes: <ul> <li>Removed <code translate="no" dir="ltr">NativeCustomFormatAd.getVideoController()</code> and <code translate="no" dir="ltr">NativeCustomFormatAd.getVideoMediaView()</code> in favor of <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/nativead/NativeCustomFormatAd#getMediaContent()">NativeCustomFormatAd.getMediaContent()</a></code>.</li> <li>Removed <code translate="no" dir="ltr">MobileAds.getVersionString()</code> in favor of <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/MobileAds#getVersion()">MobileAds.getVersion()</a></code>.</li> <li>Removed <code translate="no" dir="ltr">AdRequest.Builder.setAdInfo()</code> in favor of <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder#setAdString()">AdRequest.Builder.setAdString()</a></code>.</li> <li><code translate="no" dir="ltr">AdManager.Builder.setAdString()</code> now returns an <code translate="no" dir="ltr">AdRequest.Builder</code> type.</li> <li>Removed <code translate="no" dir="ltr">MediationRewardedVideoAdAdapter</code> and associated APIs in favor of <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/mediation/Adapter">Adapter</a></code>.</li> </ul> </li> <li>Added <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/AdRequest#getRequestAgent()">AdRequest.getRequestAgent()</a></code>. <li><b>Mediation:</b> The return value for <code translate="no" dir="ltr">Adapter.getVersionInfo()</code> and <code translate="no" dir="ltr">Adapter.getSDKVersionInfo()</code> changed from type <code translate="no" dir="ltr">com.google.android.gms.ads.mediation.VersionInfo</code> to <code translate="no" dir="ltr">com.google.android.gms.ads.VersionInfo</code>. We recommend adapters return the new type since <code translate="no" dir="ltr">com.google.android.gms.ads.mediation.VersionInfo</code> is deprecated.</li> </ul> </td> </tr> <tr> <td id="21.5.0">21.5.0</td> <td>2023&#8209;01&#8209;31</td> <td> <ul> <li><b>App Open Ads:</b> Deprecated <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/appopen/AppOpenAd#load(android.content.Context,%20java.lang.String,%20com.google.android.gms.ads.AdRequest,%20int,%20com.google.android.gms.ads.appopen.AppOpenAd.AppOpenAdLoadCallback)">AppOpenAd.load()</a></code> methods that accept an orientation input parameter and added new methods that don't take an orientation input. The new methods determine the orientation at request time, matching the behavior of other full-screen formats. </li> <li><b>Mediation:</b> Added mediation support for app open ads. </li> <li>Removed the <code translate="no" dir="ltr">RECEIVE_BOOT_COMPLETED</code> permission from the <code translate="no" dir="ltr">androidx.work:work-runtime</code> dependency. If you're using Gradle versions earlier than 7.2.0 and require permission for your app, you may need to declare permission explicitly in your Android manifest. </li> </ul> </td> </tr> <tr> <td id="21.4.0">21.4.0</td> <td>2022&#8209;12&#8209;14</td> <td> <ul> <li>The Ad Manager App ID is now required for all Ad Manager apps and requires the <code translate="no" dir="ltr">ca-app-pub-################~##########</code> format. See <a href="/admob/android/quick-start#import_the_mobile_ads_sdk">Configure your app</a> for more details. </li> <li><b>Ad inspector:</b> Extend SDK support for showing banner ads and native ads requested through the ad inspector UI. </li> <li>Added support for Publisher first-party ID (formerly known as same app key) to help you deliver more relevant and personalized ads by using data collected from your apps. </li> <li>Official release version for <code translate="no" dir="ltr">QueryInfo</code> generation.</li> </ul> </td> </tr> <tr> <td id="21.3.0">21.3.0</td> <td>2022&#8209;10&#8209;10</td> <td> <ul> <li><b>Ad inspector:</b> Added SDK support for requesting and showing ads requested through the ad inspector UI. </li> <li><b>Native Ads:</b> <ul> <li>Added <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/nativead/MediaView#getMediaContent()">getMediaContent()</a></code> to <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/nativead/MediaView">MediaView</a></code>.</li> </ul> </li> <li><b>Custom Native Ads:</b> <ul> <li>Added <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/nativead/NativeCustomFormatAd#getMediaContent()">getMediaContent()</a></code> to <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/nativead/NativeCustomFormatAd">NativeCustomFormatAd</a></code>.</li> <li>Deprecated <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/nativead/NativeCustomFormatAd#getVideoMediaView()">getVideoMediaView()</a></code>. Create your own <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/nativead/MediaView">MediaView</a></code> and use <code translate="no" dir="ltr">NativeCustomFormatAd.<a href="/android/reference/com/google/android/gms/ads/nativead/NativeCustomFormatAd#getMediaContent()">getMediaContent()</a></code> instead.</li> <li>Deprecated <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/nativead/NativeCustomFormatAd#getVideoController()">getVideoController()</a></code>. Use <code translate="no" dir="ltr">NativeCustomFormatAd.getMediaContent().<a href="/android/reference/com/google/android/gms/ads/MediaContent#getVideoController()">getVideoController()</a></code> instead.</li> </ul> </li> </ul> </td> </tr> <tr> <td id="21.2.0">21.2.0</td> <td>2022&#8209;09&#8209;06</td> <td> <ul> <li><b>Ad inspector:</b> Added SDK support for exporting ad request logs through Android Sharesheet. </li> </ul> </td> </tr> <tr> <td id="21.1.0">21.1.0</td> <td>2022&#8209;07&#8209;14</td> <td> <ul> <li>Added support for ad monetization within <code translate="no" dir="ltr">WebView</code>. See <a href="/admob/android/webview">Integrate the WebView API for ads</a> for more details. </li> <li>Added <code translate="no" dir="ltr">getResponseExtras()</code> to <a href="/android/reference/com/google/android/gms/ads/ResponseInfo"><code translate="no" dir="ltr">ResponseInfo</code></a> which may return extra information about the ad response. <aside class="beta"><b>Beta:</b> The <code translate="no" dir="ltr">getResponseExtras()</code> API is in beta. The return value might change without an SDK release. </aside> </li> </ul> </td> </tr> <tr> <td id="21.0.0">21.0.0</td> <td>2022&#8209;05&#8209;25</td> <td> <aside class="warning">This release is a MAJOR version update with several breaking changes. See the <a href="/admob/android/migration#migrate-to-v21">Migrate to SDK v21</a> guide for more information on how to migrate.</aside> <ul> <li>Breaking changes: <ul> <li>Google Mobile Ads SDK now requires all apps to be on a minimum Android API level 19 to run.</li> <li>Added <code translate="no" dir="ltr">@NonNull</code> annotations in every method that previously did not explicitly define nullability.</li> <li>Removed <code translate="no" dir="ltr">AdRequest.Builder.addNetworkExtras()</code> method. Use <code translate="no" dir="ltr">AdRequest.Builder.addNetworkExtrasBundle()</code> instead.</li> <li>Removed the following location methods: <ul> <li><code translate="no" dir="ltr">setLocation()</code> on <code translate="no" dir="ltr">AdRequest.Builder</code></li> <li><code translate="no" dir="ltr">getLocation()</code> on <code translate="no" dir="ltr">AdRequest</code></li> <li><code translate="no" dir="ltr">getLocation()</code> on <code translate="no" dir="ltr">MediationAdConfiguration</code></li> </ul> </li> </ul> </li> <li>Added manifest flags to optimize initialization and ad loading, see <a href="/admob/android/optimize-initialization">Optimize initialization and ad loading guide</a> for more details.</li> <li>Deprecated <code translate="no" dir="ltr">MobileAds.getVersionString()</code>. Use <a href="/android/reference/com/google/android/gms/ads/MobileAds#getVersion()"><code translate="no" dir="ltr">MobileAds.getVersion()</code></a> instead.</li> <li>Added the <a href="/android/reference/com/google/android/gms/ads/ResponseInfo#getLoadedAdapterResponseInfo()"> <code translate="no" dir="ltr">getLoadedAdapterResponseInfo()</code></a> method in <code translate="no" dir="ltr">ResponseInfo</code>. </li> <li>Added the following methods in <a href="/android/reference/com/google/android/gms/ads/AdapterResponseInfo"> <code translate="no" dir="ltr">AdapterResponseInfo</code></a>: <ul> <li><code translate="no" dir="ltr">getAdSourceName()</code></li> <li><code translate="no" dir="ltr">getAdSourceId()</code></li> <li><code translate="no" dir="ltr">getAdSourceInstanceName()</code></li> <li><code translate="no" dir="ltr">getAdSourceInstanceId()</code></li> </ul> <aside class="beta"><b>Beta:</b> These APIs are in beta. The return values might change without an SDK release.</aside> </li> <li>Added support for custom events in ad inspector.</li> </ul> </td> </tr> <tr> <td id="20.6.0">20.6.0</td> <td>2022&#8209;02&#8209;22</td> <td> <ul> <li>Deprecated all the <a href="/android/reference/com/google/android/gms/ads/mediation/customevent/package-summary#interfaces"> custom event interfaces</a>. Use the <a href="/android/reference/com/google/android/gms/ads/mediation/Adapter"><code translate="no" dir="ltr">Adapter</code></a> class and <a href="/android/reference/com/google/android/gms/ads/mediation/MediationAdLoadCallback"> <code translate="no" dir="ltr">MediationAdLoadCallback</code></a> interface instead. </li> <li>Added support for the <a href="//developer.android.com/reference/android/content/SharedPreferences"> SharedPreferences</a> <code translate="no" dir="ltr">gad_has_consent_for_cookies</code>. The Google Mobile Ads SDK will enable <a href="//support.google.com/admob/answer/10105530"> limited ads (LTD)</a> when the <code translate="no" dir="ltr">gad_has_consent_for_cookies</code> preference is set to 0. See <a href="/admob/android/global-settings#setting_consent_for_cookies"> setting consent for cookies</a> for more details. </li> <li>The Google Mobile Ads SDK will disable transmission of the Android advertising identifier (AAID) when the <code translate="no" dir="ltr">RequestConfiguration.Builder.setTagForChildDirectedTreatment()</code> is called with <code translate="no" dir="ltr">TAG_FOR_CHILD_DIRECTED_TREATMENT_TRUE</code> (see <a href="/admob/android/targeting#child-directed_setting"> child-directed setting</a>), or <code translate="no" dir="ltr">RequestConfiguration.Builder.setTagForUnderAgeOfConsent()</code> is called with <code translate="no" dir="ltr">TAG_FOR_UNDER_AGE_OF_CONSENT_TRUE</code> (see <a href="/admob/android/targeting#users_under_the_age_of_consent"> users under the age of consent setting</a>). </li> </ul> </td> </tr> <tr> <td id="20.5.0">20.5.0</td> <td>2021&#8209;11&#8209;18</td> <td> <ul> <li>Added support for Android 12 devices for apps targeting API 31.</li> <li>Added support for <a href="//developer.android.com/training/articles/app-set-id"> app set ID </a> for use cases such as reporting and fraud prevention.</li> </ul> </td> </tr> <tr> <td id="20.4.0">20.4.0</td> <td>2021&#8209;09&#8209;22</td> <td> <aside>This release and all previous versions require an explicit dependency on <code translate="no" dir="ltr">androidx.work:work-runtime:2.7.0</code> to fix a bug causing app crashes on Android S with the following stack trace: <div></div><devsite-code><pre translate="no" dir="ltr" is-upgraded>Fatal Exception: java.lang.IllegalArgumentException: com.mycompany.myapp: Targeting S+ (version 10000 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent. Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles. at android.app.PendingIntent.checkFlags(PendingIntent.java:386) at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:657) at android.app.PendingIntent.getBroadcast(PendingIntent.java:644) at androidx.work.impl.utils.ForceStopRunnable.getPendingIntent(ForceStopRunnable.java:174) at androidx.work.impl.utils.ForceStopRunnable.isForceStopped(ForceStopRunnable.java:108) at androidx.work.impl.utils.ForceStopRunnable.run(ForceStopRunnable.java:86) at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:75) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:920)</pre></devsite-code> <p>To fix this bug, add the following dependencies for the Google Mobile Ads SDK to your module's app-level Gradle file:</p> <div></div><devsite-code><pre translate="no" dir="ltr" is-upgraded>dependencies { implementation 'com.google.android.gms:play-services-ads:20.4.0' // For apps targeting Android 12, add WorkManager dependency. constraints { implementation('androidx.work:work-runtime:2.7.0') { because '''androidx.work:work-runtime:2.1.0 pulled from play-services-ads has a bug using PendingIntent without FLAG_IMMUTABLE or FLAG_MUTABLE and will fail in Apps targeting S+.''' } } }</pre></devsite-code> </aside> <ul> <li> Starting from version 20.4.0, Google Mobile Ads SDK includes the <code translate="no" dir="ltr">com.google.android.gms.permission.AD_ID</code> permission in the SDK's manifest that is automatically merged into the app manifest by Android build tools. To learn more about the <code translate="no" dir="ltr">AD_ID</code> permission declaration, including how to disable it, refer to <a href="//support.google.com/googleplay/android-developer/answer/6048248"> this Play Console Help article</a>.</li> <li>Added the <a href="/android/reference/com/google/android/gms/ads/AdListener#onAdClicked()"> <code translate="no" dir="ltr">onAdClicked()</code> </a> callback to <code translate="no" dir="ltr">FullScreenContentCallback</code>.</li> <li>Enabled the <a href="/android/reference/com/google/android/gms/ads/AdListener#onAdClicked()"> <code translate="no" dir="ltr">onAdClicked()</code> </a> callback in the <code translate="no" dir="ltr">AdListener</code> class for native ad format.</li> </ul> </td> </tr> <tr> <td id="20.3.0">20.3.0</td> <td>2021&#8209;08&#8209;23</td> <td> <ul> <li>Deprecated the <a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder#addNetworkExtras(com.google.android.gms.ads.mediation.NetworkExtras)"> <code translate="no" dir="ltr">AdRequest.Builder.addNetworkExtras()</code> </a> method. Use <a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder#public-adrequest.builder-addnetworkextrasbundle-class-extends-mediationextrasreceiver-adapterclass,-bundle-networkextras"> <code translate="no" dir="ltr">AdRequest.Builder.addNetworkExtrasBundle()</code> </a> instead.</li> <li><b>Native ads</b>: <a href="/android/reference/com/google/android/gms/ads/AdLoader.Builder#forCustomFormatAd(java.lang.String,%20com.google.android.gms.ads.nativead.NativeCustomFormatAd.OnCustomFormatAdLoadedListener,%20com.google.android.gms.ads.nativead.NativeCustomFormatAd.OnCustomClickListener)"> <code translate="no" dir="ltr">AdLoader.Builder.forCustomFormatAd()</code> </a> now accepts a nullable <code translate="no" dir="ltr">OnCustomClickListener</code>.</li> <li><b>Mediation adapters</b>: Fixed nullability annotation for the <code translate="no" dir="ltr">mediationExtras</code> parameter in all mediation adapter load calls.</li> </ul> </td> </tr> <tr> <td id="20.2.0">20.2.0</td> <td>2021&#8209;06&#8209;08</td> <td> <ul> <li>Added ad inspector (Beta) support for Google Ad Manager publishers.</li> </ul> </td> </tr> <tr> <td id="20.1.0">20.1.0</td> <td>2021&#8209;04&#8209;29</td> <td> <ul> <li><b>Adaptive Banner</b>: Added <a href="/android/reference/com/google/android/gms/ads/AdSize#getInlineAdaptiveBannerAdSize(int,%20int)"> <code translate="no" dir="ltr">AdSize.getInlineAdaptiveBannerAdSize()</code> </a> to request inline adaptive banner ads with a maximum height.</li> <li>Added <a href="/android/reference/com/google/android/gms/ads/AdError#toString()"> <code translate="no" dir="ltr">AdError.toString()</code></a> for easier logging.</li> </ul> </td> </tr> <tr> <td id="20.0.0">20.0.0</td> <td>2021&#8209;04&#8209;05</td> <td> <aside class="warning">This release is a MAJOR version update with several breaking changes. See the <a href="/admob/android/migration#migrate-to-v20">prepare for SDK v20</a> guide for more information on how to migrate.</aside> <ul> <li>Breaking changes: <ul> <li>Removed legacy <code translate="no" dir="ltr">Interstitial</code> API.</li> <li>Removed legacy <code translate="no" dir="ltr">RewardedVideoAd</code> API.</li> <li>Removed classes prefixed with <code translate="no" dir="ltr">Publisher</code> (e.g.: <code translate="no" dir="ltr">PublisherAdView</code>).</li> <li>Removed <code translate="no" dir="ltr">CustomRenderedAd</code>.</li> <li>Removed <code translate="no" dir="ltr">InstreamAd</code>.</li> <li>Removed <code translate="no" dir="ltr">SearchAdRequest</code>.</li> <li>Removed <code translate="no" dir="ltr">AdListener.onAdLeftApplication()</code>.</li> <li>Removed <code translate="no" dir="ltr">NativeAppInstallAd</code>, <code translate="no" dir="ltr">NativeContentAd</code>, and <code translate="no" dir="ltr">UnifiedNativeAd</code>. There is now one native ad format named <code translate="no" dir="ltr">NativeAd</code>.</li> <li><code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/rewarded/RewardedAd">RewardedAd</a></code> is now an abstract class. Use the <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/rewarded/RewardedAd#load(android.content.Context,%20java.lang.String,%20com.google.android.gms.ads.AdRequest,%20com.google.android.gms.ads.rewarded.RewardedAdLoadCallback)">RewardedAd.load()</a></code> static method to load a rewarded ad.</li> </ul> </li> <li>Added <a href="/admob/android/ad-inspector"> ad inspector</a> (Beta).</li> <li>Deprecated <code translate="no" dir="ltr">AdSize.SMART_BANNER</code> in favor of <a href="/admob/android/banner/adaptive">adaptive banner ads</a>.</li> <li>Added explicit nullability annotations on all public APIs.</li> </ul> </td> </tr> <tr> <td id="19.8.0">19.8.0</td> <td>2021&#8209;03&#8209;15</td> <td> <ul> <li>Added a dependency on the <a href="/admob/android/privacy"> User Messaging Platform SDK</a>.</li> <li>Added the <code translate="no" dir="ltr">onAdImpression()</code> callback to <code translate="no" dir="ltr">FullScreenContentCallback</code>. <li>Deprecated the <code translate="no" dir="ltr">InstreamAd</code> format. <li><b>Mediation Adapters:</b> <ul> <li>Deprecated <code translate="no" dir="ltr">MediationBannerAdapter</code>, <code translate="no" dir="ltr">MediationInterstitialAdapter</code>, and <code translate="no" dir="ltr">MediationNativeAdapter</code>. New adapters should implement the <a href="/android/reference/com/google/android/gms/ads/mediation/Adapter"><code translate="no" dir="ltr">Adapter</code></a> class to load these formats. <aside><b>Note:</b> These deprecated mediation adapter classes won't be removed in version 20.0.0 in order to give mediation adapters time to transition to the new API.</aside></li> <li>Bidding adapters can now implement distinct load methods in the <a href="/android/reference/com/google/android/gms/ads/mediation/Adapter"><code translate="no" dir="ltr">Adapter</code></a> class for RTB-specific formats.</li> </ul> </li> </ul> </td> </tr> <tr> <td id="19.7.0">19.7.0</td> <td>2021&#8209;01&#8209;20</td> <td> <ul> <li>Major changes to: <ul> <li><code translate="no" dir="ltr">InterstitialAd</code></li> <li><code translate="no" dir="ltr">RewardedAd</code></li> <li><code translate="no" dir="ltr">NativeAd</code></li> <li><code translate="no" dir="ltr">AppOpenAd</code></code></li> </ul> </li> <li>Deprecated <code translate="no" dir="ltr">CustomRenderedAd</code>.</li> <li>Classes and packages with the prefix <code translate="no" dir="ltr">Publisher</code> have been deprecated and replaced with the prefix <code translate="no" dir="ltr">AdManager</code>. </li> <li>Last minor release before version 20.0.0. All APIs marked as deprecated in this and prior releases will be removed in version 20.0.0. See <a href="/admob/android/migration#migrate-to-v20">version 20.0.0 migration guide</a> for more details. </li> </ul> </td> </tr> <tr> <td id="19.6.0">19.6.0</td> <td>2020&#8209;12&#8209;04</td> <td> <ul> <li>Deprecated the <code translate="no" dir="ltr">onAdLeftApplication() AdListener</code> method.</li> <li>Fixed a bug where users on Android 11 devices are asked to select a browser when clicking an ad.</li> </ul> </td> </tr> <tr> <td id="19.5.0">19.5.0</td> <td>2020&#8209;10&#8209;20</td> <td> <ul> <li><b>Banner Ads:</b> The <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/AdListener#public-void-onadimpression">onAdImpression()</a> AdListener</code> method is now called for banner ads.</li> <li>Added the <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder#setHttpTimeoutMillis(int)">setHttpTimeoutMillis()</a></code> method to customize the timeout for HTTPS calls made by the Google Mobile Ads SDK.</li> </ul> </td> </tr> <tr> <td id="19.4.0">19.4.0</td> <td>2020&#8209;09&#8209;10</td> <td> <ul> <li>Added support for Android 11 devices for apps targeting API 30.</li> <li><b>App Open Ads:</b> Changed the <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/appopen/AppOpenAd">AppOpenAd</a></code> format to operate more like a full screen format than a banner view. Added <code translate="no" dir="ltr">getResponseInfo()</code> and <code translate="no" dir="ltr">show()</code> methods to <code translate="no" dir="ltr">AppOpenAd</code>. Deprecated <code translate="no" dir="ltr">AppOpenAdView</code> and <code translate="no" dir="ltr">AppOpenAdPresentationCallback</code> classes.</li> <li><b>Mediation:</b> Mediation status reporting is now available. Use <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/ResponseInfo#getAdapterResponses()">ResponseInfo.getAdapterResponses()</a></code> to get response information for each ad network that participated in an ad request.</li> <li><b>Legacy Rewarded Ads:</b> Deprecated <code translate="no" dir="ltr">RewardedVideoAd</code>.</li> <li>Fixed a bug where <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/MobileAds#initialize(android.content.Context,%20com.google.android.gms.ads.initialization.OnInitializationCompleteListener)">MobileAds.initialize()</a></code> only calls back completion handler once. Every call to <code translate="no" dir="ltr">MobileAds.initialize()</code> now invokes the completion callback.</li> </ul> </td> </tr> <tr> <td id="19.3.0">19.3.0</td> <td>2020&#8209;07&#8209;20</td> <td> <aside class="caution"><b>Caution:</b> SDK versions 19.3.0 and lower do not support Android 11 (API 30). We recommend using SDK version 19.4.0 or higher if you plan on setting your <a href="//developer.android.com/guide/topics/manifest/uses-sdk-element#target"> <code translate="no" dir="ltr">targetSdkVersion</code></a> to API 30. </aside> <ul> <li>Added <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/AdError#getDomain()">getDomain()</a></code> and <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/AdError#getCause()">getCause()</a></code> methods to <code translate="no" dir="ltr">AdError</code>.</li> <li>Added new load failure callbacks to all ad formats that return a <code translate="no" dir="ltr">LoadAdError</code>. E.g., <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/AdListener#onAdFailedToLoad(com.google.android.gms.ads.LoadAdError)">onAdFailedToLoad(LoadAdError)</a></code>.</li> <li>Deprecated load failure callbacks that return an int. E.g., <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/AdListener#onAdFailedToLoad(int)">onAdFailedToLoad(int)</a></code>.</li> <li><b>Rewarded Ads:</b> Added <code translate="no" dir="ltr">onRewardedAdFailedToShow(AdError)</code> and deprecated <code translate="no" dir="ltr">onRewardedAdFailedToShow(int)</code>. <li><b>Rewarded Mediation:</b> Added the <code translate="no" dir="ltr">MEDIATION_SHOW_ERROR</code> presentation error code. All presentation errors related to mediated ads now return <code translate="no" dir="ltr">MEDIATION_SHOW_ERROR</code> for <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/AdError#getCode()">AdError.getCode()</a></code> and a NonNull <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/AdError#getCause()">AdError.getCause()</a></code> representing the underlying mediation error.</li> </ul> </td> </tr> <tr> <td id="19.2.0">19.2.0</td> <td>2020&#8209;06&#8209;18</td> <td> <ul> <li>Added the <code translate="no" dir="ltr">RewardedInterstitialAd</code> format. This feature is currently in private beta. Reach out to your account manager to request access.</li> <li><b>Native Ads:</b> Added a Native Validator UI on test requests to help you catch and fix native policy violations.</li> <li>Added the <a href="/android/reference/com/google/android/gms/ads/MobileAds#disableMediationAdapterInitialization()"><code translate="no" dir="ltr">MobileAds.disableMediationAdapterInitialization()</code></a> method. Call this method prior to initializing the Google Mobile Ads SDK to disable mediation adapter initialization. <aside class="warning"><b>Warning:</b> Calling this method may negatively impact your Google mediation performance. This method should only be called if you include Google mediation adapters in your app but aren't mediating through Google during a particular app session (for example, you're running an A/B mediation test).</aside></li> </ul> </td> </tr> <tr> <td id="19.1.0">19.1.0</td> <td>2020&#8209;04&#8209;16</td> <td> <ul> <li>Deprecated <a href="/android/reference/com/google/android/gms/ads/MobileAds#initialize(android.content.Context,%20java.lang.String)"><code translate="no" dir="ltr">MobileAds.initialize(Context, String)</code></a> in favor of <a href="/android/reference/com/google/android/gms/ads/MobileAds#initialize(android.content.Context,%20com.google.android.gms.ads.initialization.OnInitializationCompleteListener)"><code translate="no" dir="ltr">MobileAds.initialize(Context, OnInitializationCompleteListener)</code></a>. </li> <li><code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/AdRequest#isTestDevice(android.content.Context)">AdRequest.isTestDevice()</a></code> now returns <code translate="no" dir="ltr">true</code> for test devices set through <code translate="no" dir="ltr"><a href="/android/reference/com/google/android/gms/ads/MobileAds#setRequestConfiguration(com.google.android.gms.ads.RequestConfiguration)">MobileAds.setRequestConfiguration()</a></code>. </li> <li>Fixed NullPointerException crash in <code translate="no" dir="ltr">MobileAds.initialize()</code> that occurred on some devices on apps using the <a href="/admob/android/lite-sdk">Lite SDK</a>. </li> </ul> </td> </tr> <tr> <td id="19.0.1">19.0.1</td> <td>2020&#8209;03&#8209;18</td> <td> <ul> <li><b>Native Ads:</b> Fixed memory leak that occurred when using <code translate="no" dir="ltr">NativeCustomTemplateAd</code>. </li> </ul> </td> </tr> <tr> <td id="19.0.0">19.0.0</td> <td>2020&#8209;03&#8209;02</td> <td> <ul> <li><aside class="warning">This release is a MAJOR version update with the following breaking changes: <ul> <li>Updated minimum Android SDK version to API 16 to align with the <a href="//android-developers.googleblog.com/2018/12/google-play-services-discontinuing.html"> Google Play services distribution policy</a>. </li> <li><b>Native Ads:</b> Moved <code translate="no" dir="ltr">MediaContent</code> to the <code translate="no" dir="ltr">com.google.android.gms.ads</code> package.</li> </ul></aside> </li> <li>Added support for reading consent parameters from IAB TCF v2.0 and the IAB <code translate="no" dir="ltr">us_privacy</code> string.</li> <li>Added <code translate="no" dir="ltr">setNeighboringContentUrls()</code> and <code translate="no" dir="ltr">getNeighboringContentUrls()</code> to <code translate="no" dir="ltr">AdRequest</code>.</li> <li>Added the <code translate="no" dir="ltr">ResponseInfo</code> class which provides information about a loaded ad.</li> <li>For all ad formats, deprecated <code translate="no" dir="ltr">getMediationAdapterClassName()</code> in favor of <code translate="no" dir="ltr">getResponseInfo()</code>.</li> <li><b>Native Ads:</b> Added <code translate="no" dir="ltr">getDuration()</code> and <code translate="no" dir="ltr">getCurrentTime()</code> methods to <code translate="no" dir="ltr">MediaContent</code>.</li> <li><b>Native Mediation:</b> Added <code translate="no" dir="ltr">getDuration()</code> and <code translate="no" dir="ltr">getCurrentTime()</code> methods to <code translate="no" dir="ltr">UnifiedNativeAdMapper</code> for adapters to implement.</li> <li>Deprecated <a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder#addTestDevice(java.lang.String)"> <code translate="no" dir="ltr">AdRequest.Builder.addTestDevice()</code></a>. Use <a href="/android/reference/com/google/android/gms/ads/RequestConfiguration.Builder#setTestDeviceIds(java.util.List%3Cjava.lang.String%3E)"> <code translate="no" dir="ltr">RequestConfiguration.Builder.setTestDeviceIds()</code></a> instead.</li> </ul> </td> </tr> <tr> <td id="18.3.0">18.3.0</td> <td>2019&#8209;11&#8209;05</td> <td> <ul> <li>Added APIs for the <code translate="no" dir="ltr">InstreamAd</code> ad format. This feature is currently in private beta. Reach out to your account manager to request access.</li> <li><b>Adaptive Banner</b>: Changed adaptive banner creation methods in the <a href="/android/reference/com/google/android/gms/ads/AdSize"><code translate="no" dir="ltr">AdSize</code></a> class. For example, renamed <code translate="no" dir="ltr">AdSize.getCurrentOrientationBannerAdSizeWithWidth()</code> to <code translate="no" dir="ltr">AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize()</code>.</li> <li><b>Mediation</b>: The Google Mobile Ads SDK now catches exceptions thrown by mediation adapters.</li> <li><b>Rewarded Mediation</b>: Fixed a bug where if multiple mediated rewarded ads are cached, only one would show.</li> <li>Added the <a href="/android/reference/com/google/android/gms/ads/RequestConfiguration.Builder#setTestDeviceIds(java.util.List<java.lang.String>)"> <code translate="no" dir="ltr">setTestDeviceIds()</code></a> method to enable setting test devices once for all ad requests.</li> </ul> </td> </tr> <tr> <td id="18.2.0">18.2.0</td> <td>2019&#8209;08&#8209;29</td> <td> <ul> <li>Added APIs for the <a href="/android/reference/com/google/android/gms/ads/appopen/AppOpenAd"> <code translate="no" dir="ltr">AppOpenAd</code></a> format. This feature is currently in private beta. Reach out to your account manager to request access. </li> </ul> </td> </tr> <tr> <td id="18.1.1">18.1.1</td> <td>2019&#8209;07&#8209;23</td> <td> <ul> <li><b>Mediation</b>: Adapters are now initialized when apps call <a href="/android/reference/com/google/android/gms/ads/MobileAds#initialize(android.content.Context,%20com.google.android.gms.ads.initialization.OnInitializationCompleteListener)"> <code translate="no" dir="ltr">MobileAds.initialize(Context, OnInitializationCompleteListener)</code></a>.</li> <li><b>Mediation</b>: Adapter exceptions whose stack traces include the Google Mobile Ads SDK are now caught and handled by the Google Mobile Ads SDK.</li> </ul> </td> </tr> <tr> <td id="18.1.0">18.1.0</td> <td>2019&#8209;07&#8209;09</td> <td> <ul> <li>Official release for App Measurement support.</li> <li>App measurement initializes and sends data on app start by default. Added an option to <a href="/admob/android/eu-consent#delay_app_measurement_optional">delay app measurement</a> until the Google Mobile Ads SDK is explicitly called.</li> <li>Added a new initialization method, <a href="/android/reference/com/google/android/gms/ads/MobileAds#initialize(android.content.Context,%20com.google.android.gms.ads.initialization.OnInitializationCompleteListener)"> <code translate="no" dir="ltr">MobileAds.initialize(Context, OnInitializationCompleteListener)</code></a>, that notifies you when the Google Mobile Ads SDK and all configured mediation adapters have completed initialization.</li> <li>Added <a href="/android/reference/com/google/android/gms/ads/MobileAds#getInitializationStatus()"><code translate="no" dir="ltr">MobileAds.getInitializationStatus()</code></a> to provide initialization status of all ad networks configured for your app.</li> <li>Added <a href="/android/reference/com/google/android/gms/ads/MobileAds#getRequestConfiguration()"><code translate="no" dir="ltr">MobileAds.getRequestConfiguration()</code></a>. Targeting parameters set on this configuration object are used for all ad requests.</li> <li><b>Native ads</b>: Added the <a href="/android/reference/com/google/android/gms/ads/formats/NativeAdOptions.Builder#setMediaAspectRatio(int)"> <code translate="no" dir="ltr">NativeAdOptions.Builder.setMediaAspectRatio()</code></a> method to request a specific aspect ratio for a native ad's media asset. This option takes precedence over the now deprecated <a href="/android/reference/com/google/android/gms/ads/formats/NativeAdOptions.Builder#setImageOrientation(int)"> <code translate="no" dir="ltr">setImageOrientation()</code></a> method.</li> <li><b>Native ads</b>: For non-video ads, the MediaView's image scale type can now be set using <a href="/android/reference/com/google/android/gms/ads/formats/MediaView#setImageScaleType(android.widget.ImageView.ScaleType)"> <code translate="no" dir="ltr">MediaView.setImageScaleType()</code></a>.</li> <li><b>Native ads</b>: Added <code translate="no" dir="ltr">UnifiedNativeAd.getMediaContent()</code>. Publishers who only load images via URLs can now get the ad's media content, supply an image to it, and call <a href="/android/reference/com/google/android/gms/ads/formats/MediaView#setMediaContent(com.google.android.gms.ads.formats.UnifiedNativeAd.MediaContent)"> <code translate="no" dir="ltr">MediaView.setMediaContent()</code></a> to populate image data through <code translate="no" dir="ltr">MediaView</code> for non-video ads.</li> <li><b>Native ads Mediation</b>: Adapters can now provide aspect ratio via <a href="/android/reference/com/google/android/gms/ads/mediation/UnifiedNativeAdMapper#setMediaContentAspectRatio(float)"> <code translate="no" dir="ltr">UnifiedNativeAdMapper.setMediaContentAspectRatio()</code></a>. </li> <li>Added dependencies on <code translate="no" dir="ltr">play-services-measurement</code> and <code translate="no" dir="ltr">play-services-measurement-sdk</code>. Apps no longer need to add these dependencies explicitly.</li> </ul> </td> </tr> <tr> <tr> <td id="18.0.0">18.0.0</td> <td>2019&#8209;06&#8209;17</td> <td> <ul> <li>Migration from Android Support Libraries to Jetpack (AndroidX) Libraries. Refer to the <a href="/android/guides/releases#june_17_2019"> Google Play services release notes</a> for more information.</li> <li>To avoid a crash that occurs on first launch after app install from the play store, this release requires publishers to declare additional dependencies in their build.gradle: <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Text only">com.google.android.gms:play-services-measurement:17.0.0 com.google.android.gms:play-services-measurement-sdk:17.0.0</pre></devsite-code></li> </ul> <aside><b>Note:</b> This release is a MAJOR version update and breaking change.</aside> </td> </tr> <tr> <td id="17.2.1">17.2.1</td> <td>2019&#8209;05&#8209;21</td> <td> <ul> <li>Fix for ANR originating at <code translate="no" dir="ltr">android.media.AudioManager.getStreamVolume</code>.</li> </ul> </td> </tr> <tr> <td id="17.2.0">17.2.0</td> <td>2019&#8209;03&#8209;11</td> <td> <ul> <li><b>Rewarded Video:</b> Added a new set of rewarded APIs (see the <a href="/android/reference/com/google/android/gms/ads/rewarded/package-summary">rewarded</a> package) that enable you to load multiple rewarded ads concurrently. </li> <li><b>Mediation:</b> Added a new set of mediation adapter APIs that support initialization. Adapters implementing the new API implement the <a href="/android/reference/com/google/android/gms/ads/mediation/Adapter"><code translate="no" dir="ltr">Adapter</code></a> class. </li> <li>Publishers using <code translate="no" dir="ltr">firebase-analytics</code> along with version <code translate="no" dir="ltr">17.2.0</code> of any of the ads library (e.g., <code translate="no" dir="ltr">com.google.android.gms:play-services-ads:17.2.0</code>) must use <code translate="no" dir="ltr">com.google.firebase:firebase-analytics:16.3.0</code>.</li> </ul> </td> </tr> <tr> <td>17.1.3</td> <td>2019&#8209;01&#8209;31</td> <td> <ul> <li>Publishers using <code translate="no" dir="ltr">firebase-analytics</code> along with version <code translate="no" dir="ltr">17.1.3</code> of any of the ads library (e.g., <code translate="no" dir="ltr">com.google.android.gms:play-services-ads:17.1.3</code>) must use <code translate="no" dir="ltr">com.google.firebase:firebase-analytics:16.3.0</code>.</li> </ul> </td> </tr> <tr> <td>17.1.2</td> <td>2018&#8209;12&#8209;03</td> <td> <ul> <li>Publishers using <code translate="no" dir="ltr">firebase-analytics</code> along with version <code translate="no" dir="ltr">17.1.2</code> of any of the ads library (e.g., <code translate="no" dir="ltr">com.google.android.gms:play-services-ads:17.1.2</code>) must use <code translate="no" dir="ltr">com.google.firebase:firebase-analytics:16.0.6</code>.</li> </ul> </td> </tr> <tr> <td>17.1.1</td> <td>2018&#8209;11&#8209;12</td> <td> <ul> <li>Fixed a bug where certain combinations of <code translate="no" dir="ltr">play-services-ads</code> & <code translate="no" dir="ltr">firebase-analytics</code> (e.g., <code translate="no" dir="ltr">ads:17.1.0</code> & <code translate="no" dir="ltr">analytics:16.0.5</code>) resulted in a <code translate="no" dir="ltr">duplicate entry</code> compiler error. Publishers using <code translate="no" dir="ltr">firebase-analytics</code> along with version <code translate="no" dir="ltr">17.1.1</code> of any of the ads library (e.g., <code translate="no" dir="ltr">com.google.android.gms:play-services-ads:17.1.1</code>) must use <code translate="no" dir="ltr">com.google.firebase:firebase-analytics:16.0.5</code>.</li> </ul> </td> </tr> <tr> <td>17.1.0</td> <td>2018&#8209;11&#8209;02</td> <td> <ul> <li>Added the <a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder#setMaxAdContentRating(java.lang.String)"><code translate="no" dir="ltr">setMaxAdContentRating()</code></a> and <a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder#setTagForUnderAgeOfConsent(int)"><code translate="no" dir="ltr">setTagForUnderAgeOfConsent()</code></a> methods to <a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder"><code translate="no" dir="ltr">AdRequest.Builder</code></a>.</li> <li>Added the following constants to use with <a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder#setMaxAdContentRating(java.lang.String)"><code translate="no" dir="ltr">AdRequest.Builder.setMaxAdContentRating()</code></a> and <a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder#setTagForUnderAgeOfConsent(int)"><code translate="no" dir="ltr">AdRequest.Builder.setTagForUnderAgeOfConsent()</code></a>: <ul> <li><code translate="no" dir="ltr">MAX_AD_CONTENT_RATING_G</code></li> <li><code translate="no" dir="ltr">MAX_AD_CONTENT_RATING_PG</code></li> <li><code translate="no" dir="ltr">MAX_AD_CONTENT_RATING_T</code></li> <li><code translate="no" dir="ltr">MAX_AD_CONTENT_RATING_MA</code></li> <li><code translate="no" dir="ltr">TAG_FOR_UNDER_AGE_OF_CONSENT_FALSE</code></li> <li><code translate="no" dir="ltr">TAG_FOR_UNDER_AGE_OF_CONSENT_TRUE</code></li> <li><code translate="no" dir="ltr">TAG_FOR_UNDER_AGE_OF_CONSENT_UNSPECIFIED</code></li> </ul> </li> </ul> </td> </tr> <tr> <td>17.0.0</td> <td>2018&#8209;10&#8209;05</td> <td> <ul> <li>Google AdMob publishers are required to specify a <code translate="no" dir="ltr">&lt;meta-data&gt;</code> tag with key <code translate="no" dir="ltr">com.google.android.gms.ads.APPLICATION_ID</code> in their AndroidManifest.xml. Refer to the <a href="/admob/android/quick-start#update_your_androidmanifestxml">Get Started guide</a> for more details.</li> <li><b>Native ads:</b> <code translate="no" dir="ltr">NativeAppInstallAd</code>, <code translate="no" dir="ltr">NativeContentAd</code>, and associated APIs are deprecated in favor of <code translate="no" dir="ltr">UnifiedNativeAd</code>. Refer to <a href="/admob/android/native">Native Ads Advanced Unified</a> for further instructions on using the new APIs.</li> <li><b>Native ads:</b> Added the "Mute this Ad" feature.</li> <li><b>Native ads:</b> The benign warning log: "UnconfirmedClickListener must not be null while ClickConfirmingView is set." has been removed.</li> <li><b>Rewarded Ads:</b> Added the <code translate="no" dir="ltr">setAdMetadataListener</code> method on <code translate="no" dir="ltr">RewardedVideoAd</code> to listen for ad metadata changes.</li> <li><b>Rewarded ads:</b> Calling <code translate="no" dir="ltr">destroy()</code> will null out the listener.</li> <li>Deprecated the following methods on <a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder"><code translate="no" dir="ltr">AdRequest.Builder</code></a>. <ul> <li><a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder#setGender(int)"><code translate="no" dir="ltr">setGender()</code></a></li> <li><a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder#setBirthday(java.util.Date)"><code translate="no" dir="ltr">setBirthday()</code></a></li> <li><a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder#setIsDesignedForFamilies(boolean)"><code translate="no" dir="ltr">setIsDesignedForFamiles()</code></a></li> </ul> </li> <li>Fixed a bug where <code translate="no" dir="ltr">onRewardedVideoCompleted()</code> wasn't firing on emulators.</li> </ul> </td> </tr> <tr> <td>16.0.0</td> <td>2018&#8209;10&#8209;02</td> <td> <ul> <li>No ads changes. Refer to Google play services <a href="/android/guides/releases#october_2nd_2018">release notes</a> for more information.</li> </ul> </td> </tr> <tr> <td>15.0.0</td> <td>2018&#8209;04&#8209;12</td> <td> <ul> <li>MRAID v3 beta version.</li> <li><b>Native ads:</b> Added the Unified Native Ad API. This combines <code translate="no" dir="ltr">NativeAppInstallAds</code> and <code translate="no" dir="ltr">NativeContentAds</code> into one new type: <code translate="no" dir="ltr">UnifiedNativeAd</code>.</li> <li><b>Note:</b> When using native ads, there is a benign warning that shows up in the logs when the native ad is clicked: "<em>UnconfirmedClickListener must not be null while ClickConfirmingView is set.</em>" This warning can be ignored, and it will be removed in the next release.</li> </ul> </td> </tr> <tr> <td>12.0.1</td> <td>2018&#8209;03&#8209;28</td> <td> <ul> <li>No ads changes. See the Google play services <a href="/android/guides/releases#march_28_2018_-_version_1201">release notes</a> for more details.</li> </ul> </td> </tr> <tr> <td>12.0.0</td> <td>2018&#8209;03&#8209;20</td> <td> <ul> <li>Rewarded video: Added the <code translate="no" dir="ltr">onRewardedVideoCompleted()</code> callback method to <code translate="no" dir="ltr">RewardedVideoAdListener</code>. <aside>To avoid a compilation error when updating to version 12.0.0, apps need to override this callback in their <code translate="no" dir="ltr">RewardedVideoAdListener</code> implementation. </aside></li> <li>Native mediation: Added the <code translate="no" dir="ltr">trackViews()</code> method to <code translate="no" dir="ltr">NativeAdMapper</code>, giving adapters access to <code translate="no" dir="ltr">View</code> objects corresponding to individual native ad assets. Deprecated <code translate="no" dir="ltr">trackView()</code> in favor of <code translate="no" dir="ltr">trackViews()</code>.</li> </ul> </td> </tr> <tr> <td>11.8.0</td> <td>2017&#8209;12&#8209;18</td> <td> <ul> <li>Bug fixes and general improvements.</li> </ul> </td> </tr> <tr> <td>11.6.0</td> <td>2017&#8209;11&#8209;07</td> <td> <ul> <li>Added the <code translate="no" dir="ltr">NativeAdViewHolder</code> class and related methods in <code translate="no" dir="ltr">NativeAppInstallAd</code> and <code translate="no" dir="ltr">NativeContentAd</code>. </li> <li>Deprecated <code translate="no" dir="ltr">AdLoader.getMediationAdapterClassName</code> (publishers should instead use the methods of the same name in <code translate="no" dir="ltr">NativeAppInstallAd</code> and <code translate="no" dir="ltr">NativeContentAd</code>). </li> <li>Test ads now show a label on top of the ad. See the <a href="/admob/android/test-ads">testing guide</a> for more details.</li> </ul> </td> </tr> <tr> <td>11.4.0</td> <td>2017&#8209;09&#8209;19</td> <td> <ul> <li>Added <code translate="no" dir="ltr">getMediationAdapterClassName()</code> methods to the <code translate="no" dir="ltr">NativeAppInstallAd</code> and <code translate="no" dir="ltr">NativeContentAd</code> classes. The method of the same name in <code translate="no" dir="ltr">AdLoader</code> will be deprecated. </li> <li>Added an <a href="/android/reference/com/google/android/gms/ads/mediation/MediationNativeListener#onVideoEnd(com.google.android.gms.ads.mediation.MediationNativeAdapter)"><code translate="no" dir="ltr">onVideoEnd()</code></a> method to the <a href="/android/reference/com/google/android/gms/ads/mediation/MediationNativeListener"><code translate="no" dir="ltr">MediationNativeListener</code></a> class, <code translate="no" dir="ltr">hasVideoContent()</code>, <code translate="no" dir="ltr">setHasVideoContent()</code>, and <code translate="no" dir="ltr">setMediaView()</code> methods to the <code translate="no" dir="ltr">NativeAdMapper</code> class, and <a href="/android/reference/com/google/android/gms/ads/mediation/NativeMediationAdRequest#getAdVolume()"><code translate="no" dir="ltr">getAdVolume()</code></a> and <a href="/android/reference/com/google/android/gms/ads/mediation/NativeMediationAdRequest#isAdMuted()"><code translate="no" dir="ltr">isAdMuted()</code></a> methods to the <a href="/android/reference/com/google/android/gms/ads/mediation/NativeMediationAdRequest"><code translate="no" dir="ltr">NativeMediationAdRequest</code></a> class to support native video mediation. </li> <li> Removed the <code translate="no" dir="ltr">SearchAdRequest</code> class. </li> </ul> </td> </tr> <tr> <td>11.2.2</td> <td>2017&#8209;09&#8209;05</td> <td> <ul> <li>Added a new <code translate="no" dir="ltr">loadAd()</code> method that takes in a <code translate="no" dir="ltr">PublisherAdRequest</code> object to the <code translate="no" dir="ltr">RewardedVideoAd</code> class.</li> </ul> </td> </tr> <tr> <td>11.2.0</td> <td>2017&#8209;08&#8209;14</td> <td> <ul> <li>Added the <a href="/android/reference/com/google/android/gms/ads/AdLoader#loadAds(com.google.android.gms.ads.AdRequest, int)"><code translate="no" dir="ltr">loadAds()</code></a> method to the <code translate="no" dir="ltr">AdLoader</code> class, which allows apps to load multiple unique ads in a single request.</li> <li>When you upgrade your app to version 11.2.0 or higher of the Google Mobile Ads SDK, your app's <code translate="no" dir="ltr">build.gradle</code> must also be updated to specify a <code translate="no" dir="ltr">compileSdkVersion</code> of at least <code translate="no" dir="ltr">26</code> (Android O). This does not change the way your app runs. You will not be required to update <code translate="no" dir="ltr">targetSdkVersion</code>.</li> <li>Beginning with version 11.2.0, the Google Mobile Ads SDK is available via Google's Maven repository. For more information, see the Google Play services <a href="/android/guides/releases">release notes</a>.</li> </ul> </td> </tr> <tr> <td>11.0.0</td> <td>2017&#8209;06&#8209;07</td> <td> <ul> <li>Added the <a href="/android/reference/com/google/android/gms/ads/AdListener#onAdClicked()"><code translate="no" dir="ltr">onAdClicked()</code></a> and <a href="/android/reference/com/google/android/gms/ads/AdListener#onAdImpression()"><code translate="no" dir="ltr">onAdImpression()</code></a> methods to the <a href="/android/reference/com/google/android/gms/ads/AdListener"><code translate="no" dir="ltr">AdListener</code></a> class. These methods are only invoked for native app install and native content ads.</li> <li>Removed the <code translate="no" dir="ltr">getInAppPurchaseListener()</code> and <code translate="no" dir="ltr">setInAppPurchaseListener()</code> methods from the <a href="/android/reference/com/google/android/gms/ads/AdView"><code translate="no" dir="ltr">AdView</code></a>, <a href="/android/reference/com/google/android/gms/ads/interstitial/InterstitialAd"><code translate="no" dir="ltr">InterstitialAd</code></a>, and <code translate="no" dir="ltr">NativeExpressAdView</code> classes. Also removed related in-app purchase classes.</li> <li>Added the <a href="/android/reference/com/google/android/gms/ads/VideoController.VideoLifecycleCallbacks#onVideoMute(boolean)"><code translate="no" dir="ltr">OnVideoMute()</code></a>, <a href="/android/reference/com/google/android/gms/ads/VideoController.VideoLifecycleCallbacks#onVideoPause()"><code translate="no" dir="ltr">OnVideoPause()</code></a>, <a href="/android/reference/com/google/android/gms/ads/VideoController.VideoLifecycleCallbacks#onVideoPlay()"><code translate="no" dir="ltr">OnVideoPlay()</code></a> and <a href="/android/reference/com/google/android/gms/ads/VideoController.VideoLifecycleCallbacks#onVideoStart()"><code translate="no" dir="ltr">OnVideoStart()</code></a> methods to the <a href="/android/reference/com/google/android/gms/ads/VideoController.VideoLifecycleCallbacks"><code translate="no" dir="ltr">VideoController.VideoLifecycleCallbacks</code></a> class.</li> <li>Added the ability to enable immersive mode on full-screen ads by adding the <code translate="no" dir="ltr">setImmersiveMode()</code> method to the <code translate="no" dir="ltr">PublisherInterstitialAd</code> and <code translate="no" dir="ltr">RewardedVideoAd</code> classes.</li> <li>Added the <code translate="no" dir="ltr">OnPublisherAdViewLoadedListener</code> interface, <code translate="no" dir="ltr">PublisherAdViewOptions</code> class, and <code translate="no" dir="ltr">PublisherAdViewOptions.Builder</code> class for use with <a href="/android/reference/com/google/android/gms/ads/AdLoader"><code translate="no" dir="ltr">AdLoader</code></a> for native-plus-banner requests.</li> <li>Added the optional <a href="/android/reference/com/google/android/gms/ads/mediation/OnImmersiveModeUpdatedListener"><code translate="no" dir="ltr">OnImmersiveModeUpdatedListener</code></a> interface that mediation adapters can implement to be informed of immersive mode updates.</li> <li>Added the <code translate="no" dir="ltr">getMediationAdapterClassName()</code> method to the <code translate="no" dir="ltr">RewardedVideoAd</code> class.</li> <li>Added <code translate="no" dir="ltr">keep</code> rules to automatically preserve mediation adapter class names when using <a href="//developer.android.com/studio/build/shrink-code">ProGuard</a>.</li> </ul> </td> </tr> <tr> <td>10.2.0</td> <td>2017&#8209;2&#8209;15</td> <td> <ul> <li> Google Play services 10.2.x is the first release that no longer includes full support for Android version 2.3.x (Gingerbread). Apps developed using SDK release 10.2.x and later require a minimum Android API level of 14 and cannot be installed on devices running an API level below 14. To learn more about your options, including building multiple APKs to extend your app's support for Android Gingerbread, see the <a href="//android-developers.blogspot.com/"> Android Developers Blog</a>. </li> <li> Added support for video assets for Native Advanced content and custom template ads. </li> <li> Added the <code translate="no" dir="ltr">getVideoController()</code>, <code translate="no" dir="ltr">setVideoOptions()</code>, and <code translate="no" dir="ltr">getVideoOptions()</code> methods to the <code translate="no" dir="ltr">PublisherAdView</code> class. </li> <li> Added the <code translate="no" dir="ltr">AdChoicesView</code> class. </li> <li> Added the <code translate="no" dir="ltr">getAdChoicesContent()</code> and <code translate="no" dir="ltr">setAdChoicesContent()</code> methods to the <code translate="no" dir="ltr">NativeAdMapper</code> class. </li> <li> Added the <code translate="no" dir="ltr">InitializableMediationRewardedVideoAdAdapter</code> interface for rewarded video mediation adapters that want to opt in to early initialization before an ad request is made. </li> <li> Added support for in-app preview and troubleshooting in Google Ad Manager. </li> </ul> </td> </tr> <tr> <td>10.0.1</td> <td>2016&#8209;11&#8209;21</td> <td> <ul> <li> Bug fixes and general improvements. </li> </ul> </td> </tr> <tr> <td>9.8.0</td> <td>2016&#8209;10&#8209;24</td> <td> <ul> <li> <a href="/android/reference/com/google/android/gms/ads/MobileAds#initialize(android.content.Context)"> <code translate="no" dir="ltr">MobileAds.Initialize(Context)</code></a> has been un-deprecated. Google Ad Manager publishers should call this method when initializing their apps. AdMob publishers should still use <code translate="no" dir="ltr">MobileAds.Initialize(Context, String)</code> and pass their application code. </li> </ul> </td> </tr> <tr> <td>9.6.0</td> <td>2016&#8209;09&#8209;22</td> <td> <ul> <li> Added the <a href="/android/reference/com/google/android/gms/ads/formats/MediaView"> <code translate="no" dir="ltr">MediaView</code></a> class for Native Ads Advanced video ads. </li> <li> Added an <a href="/android/reference/com/google/android/gms/ads/MobileAds#openDebugMenu(android.content.Context, java.lang.String)"> <code translate="no" dir="ltr">openDebugMenu()</code></a> method to the <a href="/android/reference/com/google/android/gms/ads/MobileAds"> <code translate="no" dir="ltr">MobileAds</code></a> class for creative preview and troubleshooting of Ad Manager ad units. </li> <li> Added support for rewarded video custom events. </li> </ul> </td> </tr> <tr> <td>9.4.0</td> <td>2016&#8209;08&#8209;01</td> <td> <ul> <li> Bug fixes and general improvements. </li> </ul> </td> </tr> <tr> <td>9.2.0</td> <td>2016&#8209;06&#8209;27</td> <td> <ul> <li> Added the <a href="/android/reference/com/google/android/gms/ads/formats/NativeAdOptions.Builder#setAdChoicesPlacement(int)"><code translate="no" dir="ltr">setAdChoicesPlacement()</code></a> method to the <a href="/android/reference/com/google/android/gms/ads/formats/NativeAdOptions.Builder"><code translate="no" dir="ltr">NativeAdOptions.Builder</code></a> class, which app publishers can now use to specify the location of their <code translate="no" dir="ltr">AdChoices</code> in native ads. </li> <li> Video ad playback has been improved with several bug fixes. </li> </ul> </td> </tr> <tr> <td>9.0.1</td> <td>2016&#8209;05&#8209;26</td> <td> <ul> <li> Resolves a ProGuard issue introduced in 9.0.0. Publishers no longer need a <code translate="no" dir="ltr">keep</code> option for <code translate="no" dir="ltr">com.google.android.gms.common.util.DynamiteApi</code>. </li> </ul> </td> </tr> <tr> <td>9.0.0</td> <td>2016&#8209;05&#8209;18</td> <td> <ul> <li> Added auto-population of location information for apps that explicitly grant the location permission. </li> <li> Added support for Rewarded Video mediation custom events. </li> <li> Added video options for Native Express ads. </li> <li> Updated Custom Search Ads API. </li> <li> Added <a href="/android/reference/com/google/android/gms/ads/MobileAds#setAppMuted(boolean)"><code translate="no" dir="ltr">setAppMuted()</code></a> method. </li> <li> The <a href="/android/reference/com/google/android/gms/ads/MobileAds#initialize(android.content.Context)"><code translate="no" dir="ltr">MobileAds.initialize(android.content.Context, java.lang.String)</code></a> method is no longer deprecated. </li> <li> The <a href="/android/reference/com/google/android/gms/ads/MobileAds#initialize(android.content.Context)"><code translate="no" dir="ltr">MobileAds.initialize(android.content.Context)</code></a> method is now deprecated. </li> <li> Added the <a href="/android/reference/com/google/android/gms/ads/mediation/MediationNativeListener#onAdImpression(com.google.android.gms.ads.mediation.MediationNativeAdapter)"><code translate="no" dir="ltr">MediationNativeListener.onAdImpression()</code></a> method for reporting impressions in mediation adapters. </li> <li><b>For this release only</b>, apps that use ProGuard to post-process their application need to add the following <code translate="no" dir="ltr">keep</code> option to their ProGuard configuration file: </p> <code translate="no" dir="ltr">-keep public @com.google.android.gms.common.util.DynamiteApi class * { *; }</code> </li> </ul> </td> </tr> <tr> <td>8.4.0</td> <td>2015&#8209;12&#8209;18</td> <td> <ul> <li> Added a public method, <a href="/android/reference/com/google/android/gms/ads/MobileAds#setAppVolume(float)"><code translate="no" dir="ltr">MobileAds.setAppVolume()</code></a>, to inform the Mobile Ads SDK of an app's current volume level. </li> <li> Implemented bug fixes and improvements. </li> </ul> </td> </tr> <tr> <td>8.3.0</td> <td>2015&#8209;11&#8209;6</td> <td> <ul> <li> Added support for rewarded video ads. </li> <li> Added an <code translate="no" dir="ltr">isLoading()</code> method to <code translate="no" dir="ltr">PublisherAdView</code> and <code translate="no" dir="ltr">PublisherInterstitialAd</code> to check if an ad request is in progress. </li> <li> Added the <code translate="no" dir="ltr">setIsDesignedForFamilies()</code> method to <a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder#setIsDesignedForFamilies(boolean)"><code translate="no" dir="ltr">AdRequest.Builder</code></a> and <code translate="no" dir="ltr">PublisherAdRequest.Builder</code>. </li> <li> Added a <code translate="no" dir="ltr">destroy()</code> method to <code translate="no" dir="ltr">NativeAdView</code>. </li> </ul> </td> </tr> <tr> <td>8.1.0</td> <td>2015&#8209;09&#8209;24</td> <td>Various bug fixes.</td> </tr> <tr> <td>7.8.0</td> <td>2015&#8209;08&#8209;13</td> <td> <ul> <li>MRAID v2 official release version.</li> <li>Added an <code translate="no" dir="ltr">isLoading()</code> method to <a href="/android/reference/com/google/android/gms/ads/AdLoader#isLoading()"><code translate="no" dir="ltr">AdLoader</code></a>, <a href="/android/reference/com/google/android/gms/ads/AdView#isLoading()"><code translate="no" dir="ltr">AdView</code></a>, and <a href="/android/reference/com/google/android/gms/ads/interstitial/InterstitialAd#isLoading()"><code translate="no" dir="ltr">InterstitialAd</code></a> to check if an ad request is in progress.</li> <li>Deprecated <code translate="no" dir="ltr">PublisherAdRequest.Builder#setManualImpressionsEnabled()</code>. Use <code translate="no" dir="ltr">PublisherAdView#setManualImpressionsEnabled()</code> instead.</li> </ul> </td> </tr> <tr> <td>7.5.0</td> <td>2015&#8209;05&#8209;28</td> <td> <ul> <li>Added support for app install and content native ad formats across AdMob and Ad Manager.</li> <li>Added support for custom native ad formats, available for Ad Manager reservations.</li> </ul> </td> </tr> <tr> <td>7.3.0</td> <td>2015&#8209;04&#8209;28</td> <td>Various bug fixes.</td> </tr> <tr> <td id="7.0.0">7.0.0</td> <td>2015&#8209;03&#8209;19</td> <td> <ul> <li>Added <code translate="no" dir="ltr">addCustomTargeting()</code> and <code translate="no" dir="ltr">addCategoryExclusion()</code> methods to <code translate="no" dir="ltr">PublisherAdRequest.Builder</code>.</li> <li>Fixed an issue causing <code translate="no" dir="ltr">PublisherAdView.recordManualImpression()</code></a> to record multiple impressions in Ad Manager when using manual impression counting.</li> <li>Fixed an issue causing ads to render improperly when using the <a href="//developer.android.com/guide/topics/manifest/supports-screens-element#largestWidth"><code translate="no" dir="ltr">android:largestWidthLimitDp</code></a> attribute on the <a href="//developer.android.com/guide/topics/manifest/supports-screens-element"><code translate="no" dir="ltr">&lt;supports-screens&gt;</code></a> tag.</li> <li>Added the <code translate="no" dir="ltr">setRequestAgent()</code> method to <a href="/android/reference/com/google/android/gms/ads/AdRequest.Builder"><code translate="no" dir="ltr">AdRequest.Builder</code></a> and <code translate="no" dir="ltr">PublisherAdRequest.Builder</code>. This method should be used to denote ad request origins by third parties that mediate to the Mobile Ads SDK.</li> </ul> </td> </tr> <td>6.5.87</td> <td>2014&#8209;12&#8209;08</td> <td> <ul> <li>Introduced split JAR architecture--Android Studio developers can now just include the ads portion of Google Play services by depending on <code translate="no" dir="ltr">com.google.android.gms:<b>play&#8209;services&#8209;ads</b>:6.+</code>. <br/><b>Note:</b> Apps that create banner ads in XML must still reference the entire library <code translate="no" dir="ltr">com.google.android.gms:<b>play&#8209;services</b>:6.+</code>. </li> <li>Various bug fixes.</li> </ul> </td> </tr> <tr> <td>6.1</td> <td>2014&#8209;10&#8209;08</td> <td> <ul> <li>Added a <code translate="no" dir="ltr">getLocation()</code> method to <code translate="no" dir="ltr">com.google.android.gms.ads.MediationAdRequest</code>.</li> <li>Added a content description to the interstitial close button for accessibility.</li> <li>Removed logging of "Google Play resources not found" when the library project is linked correctly.</li> <li>Added <code translate="no" dir="ltr">getMediationAdapterClassName()</code> to <code translate="no" dir="ltr">AdView</code> to get the class name of the ad network mediation adapter currently showing an ad.</li> </ul> </td> </tr> <tr> <td>5.0</td> <td>2014&#8209;06&#8209;25</td> <td> <ul> <li>Added new APIs to implement Custom Events.</li> <li>Added default purchase flow for In-App Purchase, using the Google Play Billing API.</li> </ul> </td> </tr> <tr> <td>4.4</td> <td>2014&#8209;05&#8209;07</td> <td> <ul> <li>Added new Mediation Adapter APIs.</li> <li>Added new 320x100 <code translate="no" dir="ltr">LARGE_BANNER</code> ad format for both phones and tablets.</li> <li>Added new interstitial format for In-App Purchase. Set an <code translate="no" dir="ltr">InAppPurchaseListener</code> on <code translate="no" dir="ltr">InterstitialAd</code> to listen for in-app purchase events.</li> <li>Bug fix for <code translate="no" dir="ltr">SecurityException</code> crash due to reading gservices without permission.</li> </ul> </td> </tr> <tr> <td>4.3</td> <td>2014&#8209;03&#8209;17</td> <td> <ul> <li><code translate="no" dir="ltr">InterstitialAd</code> now functions if passed an application context.</li> <li>Added the <code translate="no" dir="ltr">setContentUrl()</code> method to <code translate="no" dir="ltr">PublisherAdRequest.Builder</code>.</li> <li>Fix for exception when <em>Service not registered</em>.</li> </ul> </td> </tr> <tr> <td>4.2</td> <td>2014&#8209;02&#8209;03</td> <td>Various bug fixes.</td> </tr> <tr> <td>4.1</td> <td>2014&#8209;01&#8209;16</td> <td> <ul> <li>Added support for Ad Manager and Search Ads for Mobile Apps.</li> <li><code translate="no" dir="ltr">AdRequest.Builder</code> now has a <code translate="no" dir="ltr">setLocation()</code> method.</li> <li>Fixed a crash that occurred if an interstitial ad was requested but <code translate="no" dir="ltr">AdActivity</code> wasn't specified in the manifest.</li> </ul> </td> </tr> <tr> <td>4.0</td> <td>2013&#8209;10&#8209;31</td> <td> <ul> <li>Google Mobile Ads APIs are now part of <a href="/android/guides/setup">Google Play services</a>.</li> <li>Future updates to the Google Mobile Ads APIs get automatically pushed to devices through Google Play services.</li> <li>Ad Manager and Search Ads for Mobile Apps not yet supported.</li> </ul> </td> </tr> </table> <devsite-hats-survey class="nocontent" hats-id="H2cBaPYE0LHkahqinNfT0XUzhrfG" listnr-id="82128"></devsite-hats-survey> </div> <devsite-recommendations display="in-page" hidden yield> </devsite-recommendations> <devsite-thumb-rating position="footer"> </devsite-thumb-rating> <devsite-recommendations id="recommendations-link" yield></devsite-recommendations> <div class="devsite-floating-action-buttons"> </div> </article> <devsite-content-footer class="nocontent"> <p>Except as otherwise noted, the content of this page is licensed under the <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a>. For details, see the <a href="https://developers.google.com/site-policies">Google Developers Site Policies</a>. Java is a registered trademark of Oracle and/or its affiliates.</p> <p>Last updated 2025-02-20 UTC.</p> </devsite-content-footer> <devsite-notification > </devsite-notification> <div class="devsite-content-data"> <template class="devsite-content-data-template"> [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-02-20 UTC."],[[["The Google Mobile Ads SDK for Android has undergone numerous updates, introducing new features, deprecating older ones, and requiring code adjustments for developers."],["Major version updates, like 23.0.0 and 22.0.0, often include breaking changes that require careful migration."],["New ad formats and functionalities, including improved ad load failure logs and adaptive banner sizes, have been progressively added."],["Developers should consult the detailed release notes for each version to ensure compatibility and leverage new features, paying close attention to deprecations."],["Minimum Android API levels and compileSdkVersion requirements have increased over time, necessitating updates for developers targeting newer Android versions."]]],[]] </template> </div> </devsite-content> </main> <devsite-footer-promos class="devsite-footer"> </devsite-footer-promos> <devsite-footer-linkboxes class="devsite-footer"> <nav class="devsite-footer-linkboxes nocontent" aria-label="Footer links"> <ul class="devsite-footer-linkboxes-list"> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Connect</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="//googledevelopers.blogspot.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Blog </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://www.instagram.com/googlefordevs/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Instagram </a> </li> <li class="devsite-footer-linkbox-item"> <a href="https://www.linkedin.com/showcase/googledevelopers/" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > LinkedIn </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//twitter.com/googledevs" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > X (Twitter) </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//www.youtube.com/user/GoogleDevelopers" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > YouTube </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Programs</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="/community" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Google Developer Groups </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/community/experts" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Google Developer Experts </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/community/accelerators" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Accelerators </a> </li> <li class="devsite-footer-linkbox-item"> <a href="/womentechmakers" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Women Techmakers </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//www.techequitycollective.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > Tech Equity Collective </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Developer consoles</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="//console.developers.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Google API Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//console.cloud.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Google Cloud Platform Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//play.google.com/apps/publish" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Google Play Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//console.firebase.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Firebase Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//console.actions.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > Actions on Google Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//cast.google.com/publish" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 6)" > Cast SDK Developer Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//chrome.google.com/webstore/developer/dashboard" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 7)" > Chrome Web Store Dashboard </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//console.home.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 8)" > Google Home Developer Console </a> </li> </ul> </li> </ul> </nav> </devsite-footer-linkboxes> <devsite-footer-utility class="devsite-footer"> <div class="devsite-footer-utility nocontent"> <nav class="devsite-footer-sites" aria-label="Other Google Developers websites"> <a href="https://developers.google.com/" class="devsite-footer-sites-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Developers Link"> <picture> <img class="devsite-footer-sites-logo" src="https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/developers/images/lockup-google-for-developers.svg" loading="lazy" alt="Google Developers"> </picture> </a> <ul class="devsite-footer-sites-list"> <li class="devsite-footer-sites-item"> <a href="//developer.android.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Android Link" > Android </a> </li> <li class="devsite-footer-sites-item"> <a href="//developer.chrome.com/home" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Chrome Link" > Chrome </a> </li> <li class="devsite-footer-sites-item"> <a href="//firebase.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Firebase Link" > Firebase </a> </li> <li class="devsite-footer-sites-item"> <a href="//cloud.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Cloud Platform Link" > Google Cloud Platform </a> </li> <li class="devsite-footer-sites-item"> <a href="//ai.google.dev/" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google AI Link" > Google AI </a> </li> <li class="devsite-footer-sites-item"> <a href="/products" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer All products Link" > All products </a> </li> </ul> </nav> <nav class="devsite-footer-utility-links" aria-label="Utility links"> <ul class="devsite-footer-utility-list"> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="/terms/site-terms" data-category="Site-Wide Custom Events" data-label="Footer Terms link" > Terms </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link" > Privacy </a> </li> <li class="devsite-footer-utility-item glue-cookie-notification-bar-control"> <a class="devsite-footer-utility-link gc-analytics-event" href="#" data-category="Site-Wide Custom Events" data-label="Footer Manage cookies link" aria-hidden="true" > Manage cookies </a> </li> <li class="devsite-footer-utility-item devsite-footer-utility-button"> <span class="devsite-footer-utility-description">Sign up for the Google for Developers newsletter</span> <a class="devsite-footer-utility-link gc-analytics-event" href="/newsletter/subscribe" data-category="Site-Wide Custom Events" data-label="Footer Subscribe link" > Subscribe </a> </li> </ul> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es" >Español</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> </section></section> <devsite-sitemask></devsite-sitemask> <devsite-snackbar></devsite-snackbar> <devsite-tooltip ></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics> <script type="application/json" analytics>[{&#34;dimensions&#34;: {&#34;dimension6&#34;: &#34;en&#34;, &#34;dimension3&#34;: false, &#34;dimension11&#34;: false, &#34;dimension1&#34;: &#34;Signed out&#34;, &#34;dimension4&#34;: &#34;Android&#34;, &#34;dimension5&#34;: &#34;en&#34;}, &#34;gaid&#34;: &#34;UA-24532603-1&#34;, &#34;metrics&#34;: {&#34;ratings_count&#34;: &#34;metric2&#34;, &#34;ratings_value&#34;: &#34;metric1&#34;}, &#34;purpose&#34;: 1}]</script> <script type="application/json" tag-management>{&#34;at&#34;: &#34;True&#34;, &#34;ga4&#34;: [{&#34;id&#34;: &#34;G-272J68FCRF&#34;, &#34;purpose&#34;: 1}, {&#34;id&#34;: &#34;G-LK8Q4VGKYR&#34;, &#34;purpose&#34;: 0}], &#34;ga4p&#34;: [{&#34;id&#34;: &#34;G-272J68FCRF&#34;, &#34;purpose&#34;: 1}], &#34;gtm&#34;: [], &#34;parameters&#34;: {&#34;internalUser&#34;: &#34;False&#34;, &#34;language&#34;: {&#34;machineTranslated&#34;: &#34;False&#34;, &#34;requested&#34;: &#34;en&#34;, &#34;served&#34;: &#34;en&#34;}, &#34;pageType&#34;: &#34;article&#34;, &#34;projectName&#34;: &#34;Android&#34;, &#34;signedIn&#34;: &#34;False&#34;, &#34;tenant&#34;: &#34;developers&#34;, &#34;recommendations&#34;: {&#34;sourcePage&#34;: &#34;&#34;, &#34;sourceType&#34;: 0, &#34;sourceRank&#34;: 0, &#34;sourceIdenticalDescriptions&#34;: 0, &#34;sourceTitleWords&#34;: 0, &#34;sourceDescriptionWords&#34;: 0, &#34;experiment&#34;: &#34;&#34;}, &#34;experiment&#34;: {&#34;ids&#34;: &#34;&#34;}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <script nonce="S9We4K51TRNp8rbfMVX6dj6H30cGYa"> (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/developers/js/app_loader.js', '[1,"en",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/developers","https://developers-dot-devsite-v2-prod.appspot.com",null,null,["/_pwa/developers/manifest.json","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/images/video-placeholder.svg","https://www.gstatic.com/devrel-devsite/prod/vd2dddc2199cd18ccf014281c77515e1e906f6b98324fd2a8b5fa9e92b09e8018/developers/images/favicon-new.png","https://fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"],1,null,[1,6,8,12,14,17,21,25,50,52,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,112,113,116,117,118,120,122,124,125,126,127,129,130,131,132,133,134,135,136,138,140,141,147,148,149,151,152,156,157,158,159,161,163,164,168,169,170,179,180,182,183,186,191,193,196],"AIzaSyAP-jjEJBzmIyKR4F-3XITp8yM9T1gEEI8","AIzaSyB6xiKGDR5O3Ak2okS4rLkauxGUG7XP0hg","developers.google.com","AIzaSyAQk0fBONSGUqCNznf6Krs82Ap1-NV6J4o","AIzaSyCCxcqdrZ_7QMeLCRY20bh_SXdAYqy70KY",null,null,null,["CloudShell__cloud_code_overflow_menu","MiscFeatureFlags__enable_variable_operator","Cloud__enable_cloudx_ping","Cloud__enable_llm_concierge_chat","Profiles__enable_public_developer_profiles","Cloud__enable_cloud_dlp_service","Significatio__enable_by_tenant","Cloud__enable_free_trial_server_call","Search__enable_ai_eligibility_checks","Concierge__enable_pushui","Search__enable_ai_search_summaries","Profiles__enable_dashboard_curated_recommendations","MiscFeatureFlags__emergency_css","Experiments__reqs_query_experiments","Profiles__enable_release_notes_notifications","Concierge__enable_concierge","Concierge__enable_concierge_restricted","Profiles__enable_page_saving","Profiles__enable_completequiz_endpoint","Cloud__enable_cloud_shell_fte_user_flow","Profiles__enable_profile_collections","Cloud__enable_legacy_calculator_redirect","Profiles__enable_developer_profiles_callout","DevPro__enable_developer_subscriptions","TpcFeatures__enable_unmirrored_page_left_nav","BookNav__enable_tenant_cache_key","MiscFeatureFlags__developers_footer_dark_image","Analytics__enable_clearcut_logging","MiscFeatureFlags__enable_firebase_utm","Profiles__enable_completecodelab_endpoint","MiscFeatureFlags__enable_view_transitions","EngEduTelemetry__enable_engedu_telemetry","DevPro__enable_cloud_innovators_plus","Cloud__enable_cloud_facet_chat","CloudShell__cloud_shell_button","MiscFeatureFlags__enable_explain_this_code","Profiles__enable_stripe_subscription_management","Profiles__enable_complete_playlist_endpoint","TpcFeatures__enable_mirror_tenant_redirects","Concierge__enable_key_takeaways","Profiles__enable_recognition_badges","MiscFeatureFlags__enable_project_variables","Cloud__enable_cloudx_experiment_ids","Profiles__enable_join_program_group_endpoint","Profiles__enable_awarding_url","MiscFeatureFlags__developers_footer_image","Search__enable_ai_search_summaries_restricted","Search__enable_suggestions_from_borg","Search__enable_dynamic_content_confidential_banner","Cloud__enable_cloud_shell","Search__enable_page_map","Profiles__require_profile_eligibility_for_signin"],null,null,"AIzaSyBLEMok-5suZ67qRPzx0qUtbnLmyT_kCVE","https://developerscontentserving-pa.clients6.google.com","AIzaSyCM4QpTRSqP5qI4Dvjt4OAScIN8sOUlO-k","https://developerscontentsearch-pa.clients6.google.com",1,4,null,"https://developerprofiles-pa.clients6.google.com",[1,"developers","Google for Developers","developers.google.com",null,"developers-dot-devsite-v2-prod.appspot.com",null,null,[1,1,[1],null,null,null,null,null,null,null,null,[1],null,null,null,null,null,null,[1],[1,null,null,[1,20],"/recommendations/information"],null,null,null,[1,1,1],[1,1,null,1,1]],null,[null,null,null,null,null,null,"/images/lockup-new.svg","/images/touchicon-180-new.png",null,null,null,null,1,null,null,null,null,null,null,null,null,1,null,null,null,"/images/lockup-dark-theme-new.svg",[]],[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[6,1,14,15,20,22,23,29,32,36],null,[[null,null,null,[3,7,10,2,39,17,4,32,24,11,12,13,34,15,25],null,null,[1,[["docType","Choose a content type",[["Tutorial",null,null,null,null,null,null,null,null,"Tutorial"],["Guide",null,null,null,null,null,null,null,null,"Guide"],["Sample",null,null,null,null,null,null,null,null,"Sample"]]],["product","Choose a product",[["Android",null,null,null,null,null,null,null,null,"Android"],["ARCore",null,null,null,null,null,null,null,null,"ARCore"],["ChromeOS",null,null,null,null,null,null,null,null,"ChromeOS"],["Firebase",null,null,null,null,null,null,null,null,"Firebase"],["Flutter",null,null,null,null,null,null,null,null,"Flutter"],["Assistant",null,null,null,null,null,null,null,null,"Google Assistant"],["GoogleCloud",null,null,null,null,null,null,null,null,"Google Cloud"],["GoogleMapsPlatform",null,null,null,null,null,null,null,null,"Google Maps Platform"],["GooglePay",null,null,null,null,null,null,null,null,"Google Pay & Google Wallet"],["GooglePlay",null,null,null,null,null,null,null,null,"Google Play"],["Tensorflow",null,null,null,null,null,null,null,null,"TensorFlow"]]],["category","Choose a topic",[["AiAndMachineLearning",null,null,null,null,null,null,null,null,"AI and Machine Learning"],["Data",null,null,null,null,null,null,null,null,"Data"],["Enterprise",null,null,null,null,null,null,null,null,"Enterprise"],["Gaming",null,null,null,null,null,null,null,null,"Gaming"],["Mobile",null,null,null,null,null,null,null,null,"Mobile"],["Web",null,null,null,null,null,null,null,null,"Web"]]]]]],[1,1],null,1],[[["UA-24532603-1"],["UA-22084204-5"],null,null,["UA-24532603-5"],null,null,[["G-272J68FCRF"],null,null,[["G-272J68FCRF",2]]],[["UA-24532603-1",2]],null,[["UA-24532603-5",2]],null,1],[[1,1],[3,2],[11,8],[13,10],[12,9],[14,11],[5,4],[4,3],[6,5],[15,12],[16,13]],[[2,2],[1,1]]],null,4,null,null,null,null,null,null,null,null,null,null,null,null,null,"developers.devsite.google"],null,"pk_live_5170syrHvgGVmSx9sBrnWtA5luvk9BwnVcvIi7HizpwauFG96WedXsuXh790rtij9AmGllqPtMLfhe2RSwD6Pn38V00uBCydV4m",1]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10