[{"data":1,"prerenderedAt":2528},["ShallowReactive",2],{"\u002Fblog\u002Fplay-games-services-v1-shutdown-migrate-to-v2-2027\u002F":3,"\u002Fblog\u002Fplay-games-services-v1-shutdown-migrate-to-v2-2027\u002F-related":655,"\u002Fblog\u002Fplay-games-services-v1-shutdown-migrate-to-v2-2027\u002F-resources":2508},{"id":4,"title":5,"author":6,"body":10,"category":595,"createdAt":596,"description":597,"disclosure":598,"extension":599,"faq":600,"howTo":598,"lastVerified":598,"location":619,"meta":620,"navigation":626,"ogImage":598,"path":627,"primaryKeyword":628,"readingTime":629,"related":630,"seo":634,"sources":635,"stem":645,"tags":646,"takeaways":647,"updatedAt":596,"url":653,"__hash__":654},"blog\u002Fblog\u002Fplay-games-services-v1-shutdown-migrate-to-v2-2027.md","Google Play Games Services v1 Shutdown 2027: Migrate to v2",{"name":7,"social":8},"Simon Dziak",{"twitter":9},"@SzymonDziak",{"type":11,"value":12,"toc":583},"minimark",[13,21,24,30,35,130,141,145,148,164,167,171,196,204,208,223,253,263,319,340,361,371,375,378,457,466,470,481,491,494,498,549,560,567,571],[14,15,16,20],"p",{},[17,18,19],"strong",{},"Google's deprecation page says Play Games Services v1 shuts down in \"May 2027\", when all v1 traffic is blocked and existing v1 APIs stop working in production, and a bullet on the same page says \"From June 2027, the games v1 SDK will be removed.\" Google gives the month, not a day, and the page does not explain the gap."," Two earlier steps are already past: the v1 APIs were removed from the play-services-games SDK on June 15, 2026, and Google Sign-In for Android stopped being supported in September 2026. If your Android game or Flutter app uses leaderboards, achievements or saved games through v1, the page says the only option is to migrate to v2 before the shutdown.",[14,22,23],{},"I checked Google's pages on October 19, 2026. Google can change a date, so open the linked page before you plan around it.",[14,25,26,29],{},[17,27,28],{},"Disclosure:"," App369 is my studio. I build and fix Flutter and Firebase apps, and the last section mentions what I sell. Google doesn't pay me for anything on this page.",[31,32,34],"h2",{"id":33},"the-dated-timeline","The dated timeline",[36,37,38,54],"table",{},[39,40,41],"thead",{},[42,43,44,48,51],"tr",{},[45,46,47],"th",{},"Date (as Google states it)",[45,49,50],{},"What happens",[45,52,53],{},"What to do",[55,56,57,69,80,91,102,116],"tbody",{},[42,58,59,63,66],{},[60,61,62],"td",{},"September 12, 2025",[60,64,65],{},"play-services-games 24.0.0 released and marked Deprecated. Plugin for Unity v0.10.15 (September 17, 2025) also Deprecated.",[60,67,68],{},"Google says existing v1 titles keep working, but Google Play prevents publishing new titles that use the v1 SDK and APIs.",[42,70,71,74,77],{},[60,72,73],{},"\"June 2026\" (table); June 15, 2026 (version table and bullet)",[60,75,76],{},"play-services-games 25.0.0: v1 API removed from the SDK.",[60,78,79],{},"Past. Stay on v1 only at 24.0.0 or lower, and do not upgrade to 25.0.0 until you have migrated.",[42,81,82,85,88],{},[60,83,84],{},"\"as of May 2026\"",[60,86,87],{},"Per the table, play-services-auth no longer provides Google Sign-In (GSI).",[60,89,90],{},"Past. A game not yet on v2 might see compile errors.",[42,92,93,96,99],{},[60,94,95],{},"\"September 2026\" (table); \"Since September 2026\" (bullet)",[60,97,98],{},"Google Sign-In for Android API removal and \"no longer supported\".",[60,100,101],{},"Past. Follow the page's resolution path for compile errors from third-party SDKs, then migrate.",[42,103,104,110,113],{},[60,105,106,109],{},[17,107,108],{},"\"May 2027\""," (table)",[60,111,112],{},"Play Games Services v1 shutdown. All v1 traffic blocked. Existing v1 APIs stop working in production.",[60,114,115],{},"Migrate before this date. Google says it is the only option.",[42,117,118,124,127],{},[60,119,120,123],{},[17,121,122],{},"\"From June 2027\""," (bullet)",[60,125,126],{},"\"the games v1 SDK will be removed. Calls to these APIs will fail, even if you're using previous versions of the SDK.\"",[60,128,129],{},"Same job, and it means older SDK versions do not save you.",[14,131,132,133,140],{},"Google's table lists the rows in a different order from the one above. I sorted them by date for reading. Source: ",[134,135,139],"a",{"href":136,"rel":137},"https:\u002F\u002Fdeveloper.android.com\u002Fgames\u002Fpgs\u002Fdeprecation",[138],"nofollow","the deprecation page",", last updated 2026-10-06 UTC when I read it.",[31,142,144],{"id":143},"the-date-conflict","The date conflict",[14,146,147],{},"The same page gives two dates for the end of v1, and I want to show both as Google states them.",[149,150,151,158],"ul",{},[152,153,154,157],"li",{},[17,155,156],{},"The table"," says \"May 2027\" under the milestone \"Play Games Services v1 shutdown\", with the impact \"All traffic from Play Games Services v1 blocked\".",[152,159,160,163],{},[17,161,162],{},"A bullet"," says \"From June 2027, the games v1 SDK will be removed. Calls to these APIs will fail, even if you're using previous versions of the SDK.\"",[14,165,166],{},"They could describe two steps a month apart, or one step described twice. No page I fetched says which. So I do not pick one. My advice: treat May 2027 as the date to be finished by, and use June 2027 as the outside edge, not as extra time.",[31,168,170],{"id":169},"what-already-happened-and-why-it-matters-now","What already happened (and why it matters now)",[149,172,173,179,190],{},[152,174,175,178],{},[17,176,177],{},"June 15, 2026:"," Google says \"the deprecated APIs have been removed from the SDK\" and lists play-services-games 25.0.0 as the release that removed the Play Games Services v1 API. A game that upgrades to it while still on v1 may find its Play Games Services features stop working.",[152,180,181,184,185,189],{},[17,182,183],{},"May 2026, per the table:"," \"",[186,187,188],"code",{},"play-services-auth"," no longer provides GSI\". So a game not yet on v2 might get compilation errors.",[152,191,192,195],{},[17,193,194],{},"September 2026:"," \"the Google Sign-In for Android API is no longer supported.\" The page says this affects games when a third-party or Google SDK needs an authentication upgrade. The page walks through three scenarios. If the SDK simply upgrades to the latest auth SDK, the page says \"Play Games Services v1 will break\" and your build fails to compile. If it adds Credential Manager instead, you also get compile errors. In every case the page's fix is to revert that SDK's version.",[14,197,198,199,203],{},"My advice: pin your Android dependencies and read changelogs before you update an auth-related SDK. For the wider Google sign-in change, see ",[134,200,202],{"href":201},"\u002Fblog\u002Fgoogle-sign-in-android-deprecated-credential-manager-2026\u002F","my guide to the Google Sign-In deprecation and Credential Manager",".",[31,205,207],{"id":206},"what-changes-from-v1-to-v2","What changes from v1 to v2",[14,209,210,211,216,217,222],{},"Google's ",[134,212,215],{"href":213,"rel":214},"https:\u002F\u002Fdeveloper.android.com\u002Fgames\u002Fpgs\u002Fmigration_overview",[138],"migration overview"," and ",[134,218,221],{"href":219,"rel":220},"https:\u002F\u002Fdeveloper.android.com\u002Fgames\u002Fpgs\u002Fandroid\u002Fmigrate-to-v2",[138],"migration guide"," describe these changes.",[14,224,225,228,229,232,233,236,237,240,241,244,245,248,249,252],{},[17,226,227],{},"Sign-in is automatic."," v2 splits signing in into two layers: platform authentication, handled by the SDK, and in-game authentication, handled by your game. The overview says authentication happens automatically in the background at launch, and that there is no manual \"Sign in\" button required for Play Games Services itself. In code, ",[186,230,231],{},"GoogleSignInClient"," is replaced by ",[186,234,235],{},"GamesSignInClient",", and the guide says to check ",[186,238,239],{},"gamesSignInClient.isAuthenticated()"," instead of calling ",[186,242,243],{},"GoogleSignIn",". If the player is not authenticated, either disable the integration or show a button that calls ",[186,246,247],{},"gamesSignInClient.signIn()",". The guide also says to re-check in ",[186,250,251],{},"onResume()",", because the state can change while the app is inactive.",[14,254,255,258,259,262],{},[17,256,257],{},"Sign-out and account switching go away."," The guide says to remove the ",[186,260,261],{},"GoogleSignInClient.signOut"," code. The overview says the sign-out API is not required because v2 is a persistent platform identity, and that users change their Play Games Services profile in the device settings.",[14,264,265,268,269,272,273,276,277,280,281,280,284,280,286,280,289,280,292,280,295,216,298,301,302,216,305,308,309,312,313,316,317,203],{},[17,266,267],{},"Client classes and removed APIs."," Use ",[186,270,271],{},"PlayGames.getXxxClient()"," instead of ",[186,274,275],{},"Games.getXxxClient()",", for ",[186,278,279],{},"AchievementsClient",", ",[186,282,283],{},"EventsClient",[186,285,235],{},[186,287,288],{},"LeaderboardsClient",[186,290,291],{},"PlayerStatsClient",[186,293,294],{},"RecallClient",[186,296,297],{},"SnapshotsClient",[186,299,300],{},"PlayersClient",". The guide says to remove any ",[186,303,304],{},"GamesClient",[186,306,307],{},"GamesMetadataClient"," code, since v2 has no replacement for them. It also replaces ",[186,310,311],{},"GoogleApiClient"," with connectionless clients, and gives a table that maps old classes, such as ",[186,314,315],{},"com.google.android.gms.games.achievement.Achievements",", to ",[186,318,279],{},[14,320,321,324,325,232,328,331,332,335,336,339],{},[17,322,323],{},"Server-side access."," ",[186,326,327],{},"GoogleSignInAccount.getServerAuthCode()",[186,329,330],{},"GamesSignInClient.requestServerSideAccess(...)",". It takes your OAuth 2.0 web client ID, a ",[186,333,334],{},"forceRefreshToken"," flag and additional scopes, and returns an auth code you send to your server and exchange for an access token. The overview adds that v2 can request three basic OAuth 2.0 identity scopes this way, while v1 could request additional scopes through ",[186,337,338],{},"GoogleSigninClient",". If your backend relies on extra scopes, test this early.",[14,341,342,345,346,349,350,353,354,357,358,203],{},[17,343,344],{},"Dependencies and setup."," Replace ",[186,347,348],{},"com.google.android.gms:play-services-games"," with ",[186,351,352],{},"com.google.android.gms:play-services-games-v2",", using the latest version of the games SDK, as the guide says. Add a ",[186,355,356],{},"com.google.android.gms.games.APP_ID"," meta-data element in your manifest that points to your Games Services project ID from the Play Console Configuration page. Initialize with ",[186,359,360],{},"PlayGamesSdk.initialize(this)",[14,362,363,366,367,370],{},[17,364,365],{},"Your own player accounts."," This is the part most people miss. The guide gives two paths. If your in-game account is bound only to the Play Games Services Player ID, you need a \"Sign in with Google\" login with Credential Manager, and the guide describes retrieving both the OpenID and the Player ID (using the ",[186,368,369],{},"GAMES_LITE"," scope) so existing players are linked to their old accounts. If your in-game account is already bound to an OpenID, you only do the standard SDK steps.",[31,372,374],{"id":373},"how-to-tell-if-you-are-on-v1","How to tell if you are on v1",[14,376,377],{},"Google's pages give no formal detection procedure, so here is the pattern I would look for.",[379,380,381,399,405,419,436,448],"ol",{},[152,382,383,386,387,349,389,391,392,394,395,398],{},[17,384,385],{},"Dependencies."," The migration guide has you replace ",[186,388,348],{},[186,390,352],{},". If your build still has the first, you are on v1. The overview says v1 \"Requires ",[186,393,188],{},"\" (",[186,396,397],{},"com.google.android.gms:play-services-auth",").",[152,400,401,404],{},[17,402,403],{},"Version."," Google lists 24.0.0 as the deprecated v1 release and 25.0.0 as the one that removed v1 APIs. The guide says you can upgrade to 24.0.0 but not to 25.0.0 while still on v1.",[152,406,407,410,411,280,413,216,415,418],{},[17,408,409],{},"Sign-in code."," Search for ",[186,412,231],{},[186,414,243],{},[186,416,417],{},"GoogleSignInAccount",". These are v1 sign-in patterns.",[152,420,421,410,424,280,427,430,431,433,434,203],{},[17,422,423],{},"Client calls.",[186,425,426],{},"Games.getLeaderboardsClient",[186,428,429],{},"Games.getAchievementsClient"," and other ",[186,432,275],{}," calls. v2 uses ",[186,435,271],{},[152,437,438,324,441,280,443,216,445,447],{},[17,439,440],{},"Old classes.",[186,442,311],{},[186,444,304],{},[186,446,307],{}," are on the list of things the guide says to replace or remove.",[152,449,450,324,453,456],{},[17,451,452],{},"Server auth.",[186,454,455],{},"getServerAuthCode()"," is the v1 server-side pattern.",[14,458,459,460,216,463,465],{},"For a Gradle project, I would also print the dependency tree and look for ",[186,461,462],{},"play-services-games",[186,464,188],{},". That is my own check, not something Google's pages describe.",[31,467,469],{"id":468},"flutter","Flutter",[14,471,472,473,476,477,480],{},"In a Flutter app, the Play Games calls sit inside a plugin, and the Android code is the plugin's. I fetched the pub.dev page for ",[17,474,475],{},"games_services"," (5.3.0 when I read it). It says only \"A Flutter plugin to support Game Center and Google Play Games services\", lists ",[186,478,479],{},"games_services_platform_interface"," as a dependency, and does not say which Play Games Services version or sign-in approach the plugin uses. I could not confirm that from a primary source, and I did not find an official Flutter or Google page that says it either.",[14,482,483,484,487,488,490],{},"So I cannot tell you whether a given Flutter plugin version is on v1 or v2. My advice: open the plugin's Android ",[186,485,486],{},"build.gradle",", look at which ",[186,489,462],{}," artifact it pulls, and read your app's merged dependency tree. If it pulls the v1 artifact, ask the maintainer about a v2 release or plan to replace the plugin before May 2027. Do not force the 25.0.0 version into a v1-based plugin, because Google says it removes the v1 APIs.",[14,492,493],{},"Native game engines have their own guides. The deprecation page links a Unity migration guide for the Unity plugin, which I did not read.",[31,495,497],{"id":496},"a-short-plan","A short plan",[379,499,500,509,515,521,533,543],{},[152,501,502,505,506,508],{},[17,503,504],{},"Find out where you are."," Use the checks above, and note your ",[186,507,462],{}," version.",[152,510,511,514],{},[17,512,513],{},"Freeze updates."," Do not move to play-services-games 25.0.0 or a new auth SDK until you have a migration branch.",[152,516,517,520],{},[17,518,519],{},"Pick your account path."," Is your in-game account bound to the Player ID or to an OpenID? That decides how much work the migration is.",[152,522,523,526,527,280,530,532],{},[17,524,525],{},"Swap the SDK."," Dependency, project ID, ",[186,528,529],{},"PlayGamesSdk.initialize",[186,531,235],{},", client class names.",[152,534,535,538,539,542],{},[17,536,537],{},"Fix the server."," Move to ",[186,540,541],{},"requestServerSideAccess"," and check your scopes.",[152,544,545,548],{},[17,546,547],{},"Test saved games, leaderboards and achievements"," and follow the testing section of the migration guide. Then publish through the Play Console.",[14,550,210,551,216,555,559],{},[134,552,554],{"href":553},"\u002Fblog\u002Fgoogle-play-target-api-36-android-16-requirement-2026\u002F","target API requirement",[134,556,558],{"href":557},"\u002Fblog\u002Fgoogle-play-memory-dex-zero-tap-sign-in-requirements-2027\u002F","zero-tap sign-in requirements"," are separate Play deadlines worth checking in the same pass.",[14,561,562,563,203],{},"For every other dated Apple, Google Play and Firebase requirement in 2026 and 2027, see ",[134,564,566],{"href":565},"\u002Fblog\u002Fapp-store-google-play-deadlines-2026-2027\u002F","App Store and Google Play deadlines for 2026 and 2027",[31,568,570],{"id":569},"need-a-hand","Need a hand?",[14,572,573,574,578,579,203],{},"If your Flutter or Android game still uses Play Games Services v1 and you want it moved to v2 before Google shuts it off, the ",[134,575,577],{"href":576},"\u002Ffixed-price\u002Fflutter-firebase-bug-fix\u002F","App Fix Ticket"," covers it in two fixed-price steps. A $450 Diagnosis gives you the root cause with evidence and a fixed repair quote within 3 business days, credited toward the fix. If you go ahead, the $1,200 Fix takes 5 business days and comes as a pull request. Or ",[134,580,582],{"href":581},"\u002Fcontact\u002F","send me a short description",{"title":584,"searchDepth":585,"depth":585,"links":586},"",2,[587,588,589,590,591,592,593,594],{"id":33,"depth":585,"text":34},{"id":143,"depth":585,"text":144},{"id":169,"depth":585,"text":170},{"id":206,"depth":585,"text":207},{"id":373,"depth":585,"text":374},{"id":468,"depth":585,"text":469},{"id":496,"depth":585,"text":497},{"id":569,"depth":585,"text":570},"AI & Technology","2026-10-19T23:00:00.000Z","Google Play Games Services v1 shutdown in 2027 and the move to v2: the dates Google gives, which steps are already past, what changes in code, and how to tell if your Android game or Flutter app is still on v1. Checked October 19, 2026.",null,"md",[601,604,607,610,613,616],{"question":602,"answer":603},"When does Google Play Games Services v1 shut down?","Google's deprecation table lists \"May 2027\" for the v1 shutdown and says all v1 traffic is blocked and existing v1 APIs stop working in production. A bullet on the same page says \"From June 2027, the games v1 SDK will be removed. Calls to these APIs will fail, even if you're using previous versions of the SDK.\" Google gives the month, not a day. I plan around May 2027.",{"question":605,"answer":606},"Do I have to migrate because Google Sign-In was removed?","Not by itself, according to the deprecation page. Its table of three auth-upgrade scenarios ends with \"Game does not need to upgrade from Play Games Services v1 to v2\" in each (in the first, the third-party SDK just stays out of date). But the page also says that if you upgrade the auth SDK, v1 \"will break\" until you revert it, and the May 2027 shutdown requires v2 either way.",{"question":608,"answer":609},"Can I just update play-services-games to the latest version?","Not if you are on v1. Google says games on v1 must not upgrade to play-services-games 25.0.0, because it removes the v1 APIs. A game that upgrades anyway may see its Play Games Services features stop working. The migration guide tells you to swap the dependency for play-services-games-v2 instead.",{"question":611,"answer":612},"Do I need a sign-in button in v2?","Not for Play Games Services itself. Google's overview says there is no manual \"Sign in\" button required for Play Games Services itself, because v2 authenticates players automatically at launch. Your own game account (the in-game authentication layer) is still your job, and the migration guide describes two paths depending on whether it is bound to the Player ID or to an OpenID.",{"question":614,"answer":615},"How do I get a server auth code in v2?","The migration guide replaces GoogleSignInAccount.getServerAuthCode() with GamesSignInClient.requestServerSideAccess(), which takes your OAuth 2.0 web client ID, a forceRefreshToken flag and any extra scopes. You send the returned auth code to your server and exchange it there. The overview says v2 can request three basic OAuth 2.0 identity scopes this way, whereas v1 could request additional scopes.",{"question":617,"answer":618},"Does the Flutter games_services plugin use v2?","I could not confirm it. The plugin's pub.dev page (version 5.3.0 when I read it) describes it as \"A Flutter plugin to support Game Center and Google Play Games services\" and does not say which Play Games Services version or sign-in approach it uses. Check the plugin's Android dependencies in your build before you decide.","Boynton Beach, FL",{"readingTimeStats":621},{"text":622,"minutes":623,"time":624,"words":625},"9 min read",8.21,492600,1642,true,"\u002Fblog\u002Fplay-games-services-v1-shutdown-migrate-to-v2-2027","play games services v1 shutdown","9 min",[631,632,633],"google-sign-in-android-deprecated-credential-manager-2026","google-play-target-api-36-android-16-requirement-2026","google-play-memory-dex-zero-tap-sign-in-requirements-2027",{"title":5,"description":597},[636,638,640,642],{"title":637,"url":136},"Android Developers, Play Games Services v1 deprecation",{"title":639,"url":219},"Android Developers, Migrate to Play Games Services v2 (Java or Kotlin)",{"title":641,"url":213},"Android Developers, Play Games Services migration overview",{"title":643,"url":644},"pub.dev, games_services","https:\u002F\u002Fpub.dev\u002Fpackages\u002Fgames_services","blog\u002Fplay-games-services-v1-shutdown-migrate-to-v2-2027","play games services v1 shutdown, play games services v2 migration, play-services-games-v2, play-services-games 25.0.0, google sign-in android removal, GamesSignInClient, requestServerSideAccess, play games services deprecation 2027, flutter games_services, android leaderboards achievements migration",[648,649,650,651,652],"Google's deprecation table says \"May 2027\" for the Play Games Services v1 shutdown, when \"All traffic from Play Games Services v1 blocked\". A bullet on the same page says \"From June 2027, the games v1 SDK will be removed.\" Google gives the month, not a day, and I could not reconcile the two, so I plan around the earlier one.","Two steps are already past. Google says \"Since June 15, 2026, the deprecated APIs have been removed from the SDK\" (play-services-games 25.0.0), and \"Since September 2026, the Google Sign-In for Android API is no longer supported.\"","If you are still on v1, Google says not to upgrade to play-services-games 25.0.0. The migration guide says you can move up to 24.0.0 before you migrate.","The v2 change is mostly deletion: sign-in happens automatically at launch, GoogleSignInClient gives way to GamesSignInClient, Games.getXxxClient() becomes PlayGames.getXxxClient(), and getServerAuthCode() becomes requestServerSideAccess().","For Flutter, I could not confirm from pub.dev whether the games_services plugin is built on v1 or v2, so check its Android dependency yourself before you assume you are safe.","https:\u002F\u002Fapp369.com\u002Fblog\u002Fplay-games-services-v1-shutdown-migrate-to-v2-2027\u002F","jE0YRfHlqJ6qghMPdJkhE5AHleYQ5rlaRgk8wPnu6us",[656,1234,1703],{"id":657,"title":658,"author":659,"body":661,"category":595,"createdAt":1159,"description":1160,"disclosure":598,"extension":599,"faq":1161,"howTo":598,"lastVerified":598,"location":619,"meta":1180,"navigation":626,"ogImage":598,"path":1186,"primaryKeyword":1187,"readingTime":1188,"related":1189,"seo":1193,"sources":1194,"stem":1224,"tags":1225,"takeaways":1226,"updatedAt":1159,"url":1232,"__hash__":1233},"blog\u002Fblog\u002Fgoogle-sign-in-android-deprecated-credential-manager-2026.md","Google Sign-In for Android Is Deprecated: Moving to Credential Manager",{"name":7,"social":660},{"twitter":9},{"type":11,"value":662,"toc":1149},[663,682,685,689,693,783,786,791,794,828,832,841,957,961,971,1036,1039,1043,1134,1136],[14,664,665,668,669,216,671,674,675,677,678,681],{},[17,666,667],{},"Google Sign-In for Android is deprecated, and Sign in with Google now runs through Credential Manager."," If your app still uses ",[186,670,231],{},[186,672,673],{},"GoogleSignInOptions"," from ",[186,676,188],{},", or One Tap, move it to Credential Manager before Google removes the old code from the SDK. In a Flutter app the move is an upgrade to ",[186,679,680],{},"google_sign_in"," 7, which is a breaking release. Much of the work is in the code, and some of the bugs afterwards are in the setup.",[14,683,684],{},"If you landed here from an old link to Google's Android sign-in guide, that address now redirects to the Credential Manager overview. The dates and behavior below come from Android Developers, the Android Developers Blog and the Flutter plugin pages, as listed in the sources. I checked each page on October 18, 2026.",[14,686,687,29],{},[17,688,28],{},[31,690,692],{"id":691},"what-changed-and-when","What changed, and when",[36,694,695,708],{},[39,696,697],{},[42,698,699,702,705],{},[45,700,701],{},"When",[45,703,704],{},"What happened",[45,706,707],{},"Source",[55,709,710,725,738,751,768],{},[42,711,712,715,718],{},[60,713,714],{},"September 11, 2024",[60,716,717],{},"Google announces that Credential Manager replaces its legacy Android sign-in APIs, and publishes a removal timeline",[60,719,720],{},[134,721,724],{"href":722,"rel":723},"https:\u002F\u002Fandroid-developers.googleblog.com\u002F2024\u002F09\u002Fstreamlining-android-authentication-credential-manager-replaces-legacy-apis.html",[138],"Android Developers Blog",[42,726,727,730,733],{},[60,728,729],{},"Q1 2025",[60,731,732],{},"Smart Lock for Passwords: listed as fully shut down",[60,734,735],{},[134,736,724],{"href":722,"rel":737},[138],[42,739,740,743,746],{},[60,741,742],{},"H1 2025",[60,744,745],{},"Credential Saving API and the Sign in with Google button API: listed for removal",[60,747,748],{},[134,749,724],{"href":722,"rel":750},[138],[42,752,753,758,763],{},[60,754,755],{},[17,756,757],{},"H2 2025",[60,759,760],{},[17,761,762],{},"One Tap and Google Sign-In for Android: listed for removal",[60,764,765],{},[134,766,724],{"href":722,"rel":767},[138],[42,769,770,773,776],{},[60,771,772],{},"Now",[60,774,775],{},"Google's migration page says legacy Google Sign-In is deprecated and will be removed from the Play services Auth SDK in a future release",[60,777,778],{},[134,779,782],{"href":780,"rel":781},"https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Flegacy-gsi-migration",[138],"Android Developers",[14,784,785],{},"The two sources don't give the same date. The 2024 post gave half-year targets; the migration page, last updated March 6, 2026, gives none. What both say is the same: the old APIs are on their way out, and new work belongs on Credential Manager.",[787,788,790],"h3",{"id":789},"what-the-old-addresses-do-today","What the old addresses do today",[14,792,793],{},"Checked on October 18, 2026:",[149,795,796,806,812,822],{},[152,797,798,801,802,805],{},[17,799,800],{},"developers.google.com\u002Fidentity\u002Fsign-in\u002Fandroid\u002Fstart-integrating",", the old setup guide, ",[17,803,804],{},"redirects"," to the Android Credential Manager overview.",[152,807,808,811],{},[17,809,810],{},"developers.google.com\u002Fidentity\u002Fsign-in\u002Fandroid\u002Fsign-in"," redirects there too.",[152,813,814,817,818,821],{},[17,815,816],{},"developers.google.com\u002Fidentity\u002Fsign-in\u002Fandroid\u002Flegacy-gsi-migration"," returned ",[17,819,820],{},"404",". The live migration page is on developer.android.com, linked in the sources.",[152,823,824,827],{},[17,825,826],{},"developers.google.com\u002Fidentity\u002Fone-tap\u002Fandroid\u002Foverview"," redirects to a page that says One Tap for Android is deprecated.",[31,829,831],{"id":830},"moving-a-native-android-app-to-credential-manager","Moving a native Android app to Credential Manager",[14,833,834,835,840],{},"The steps follow Google's ",[134,836,839],{"href":837,"rel":838},"https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Fcredential-manager-siwg-implementation",[138],"Sign in with Google implementation guide",":",[379,842,843,865,875,896,917,923,933,946],{},[152,844,845,848,849,280,852,216,855,858,859,864],{},[17,846,847],{},"Add the dependencies."," Add ",[186,850,851],{},"androidx.credentials:credentials",[186,853,854],{},"androidx.credentials:credentials-play-services-auth",[186,856,857],{},"com.google.android.libraries.identity.googleid:googleid",". Check the ",[134,860,863],{"href":861,"rel":862},"https:\u002F\u002Fdeveloper.android.com\u002Fjetpack\u002Fandroidx\u002Freleases\u002Fcredentials",[138],"androidx.credentials release page"," for the current stable version: on October 18, 2026 the newest stable release listed was 1.6.0, while Google's sample used a 1.7.0 alpha.",[152,866,867,870,871,874],{},[17,868,869],{},"Use your web client ID."," Google's guide passes the ",[17,872,873],{},"Web"," client ID you set up for OAuth in your Google Cloud project as the server client ID, even in an Android app. The project also has to know your Android app: the Flutter plugin's docs list a wrong package name or a missing signing SHA as common causes of failed sign-in.",[152,876,877,880,881,884,885,888,889,892,893,203],{},[17,878,879],{},"Build the request."," For the bottom-sheet flow, use ",[186,882,883],{},"GetGoogleIdOption"," with your web client ID. Google's guide first sets ",[186,886,887],{},"setFilterByAuthorizedAccounts(true)"," to offer accounts that already signed in, with ",[186,890,891],{},"setAutoSelectEnabled(true)"," for returning users. For a \"Sign in with Google\" button, use ",[186,894,895],{},"GetSignInWithGoogleOption",[152,897,898,901,902,905,906,909,910,913,914,203],{},[17,899,900],{},"Call Credential Manager."," Create it with ",[186,903,904],{},"CredentialManager.create(context)"," and call ",[186,907,908],{},"getCredential"," with the request. When the result is a ",[186,911,912],{},"GoogleIdTokenCredential",", read it with ",[186,915,916],{},"GoogleIdTokenCredential.createFrom(credential.data)",[152,918,919,922],{},[17,920,921],{},"Verify the ID token on your server."," Send the ID token to your backend and verify it there. If you use Firebase Authentication, use the Google ID token with Firebase Auth.",[152,924,925,928,929,932],{},[17,926,927],{},"Move scopes to AuthorizationClient."," Google says sign-in and authorization are separate actions now. If your app reads Drive, Calendar or another Google API, request those scopes with the ",[186,930,931],{},"AuthorizationClient"," API when the user needs that feature, not at sign-in.",[152,934,935,938,939,942,943,203],{},[17,936,937],{},"Replace silent sign-in."," Google's migration page says to use a request with ",[186,940,941],{},"filterByAuthorizedAccounts"," set to true and auto-select on, in place of ",[186,944,945],{},"silentSignIn",[152,947,948,951,952,280,954,956],{},[17,949,950],{},"Remove the old code."," Once the new path works, remove ",[186,953,231],{},[186,955,673],{}," and any One Tap code, so an old error can't be mistaken for a new one.",[31,958,960],{"id":959},"moving-a-flutter-app-to-google_sign_in-7","Moving a Flutter app to google_sign_in 7",[14,962,963,964,967,968,970],{},"On Android, ",[186,965,966],{},"google_sign_in_android"," 7.0.0 switched to Credential Manager. Its changelog says it removed the deprecated Google Sign In for Android SDK. ",[186,969,680],{}," 7.0.0 is a breaking release, and its changelog lists the main changes:",[149,972,973,987,1001,1018],{},[152,974,975,268,980,983,984,203],{},[17,976,977,979],{},[186,978,243],{}," is a singleton.",[186,981,982],{},"GoogleSignIn.instance"," instead of creating your own ",[186,985,986],{},"GoogleSignIn(...)",[152,988,989,992,993,996,997,1000],{},[17,990,991],{},"Initialize first."," Call and await ",[186,994,995],{},"initialize",", passing ",[186,998,999],{},"serverClientId"," where needed, before any other method.",[152,1002,1003,1009,1010,1013,1014,1017],{},[17,1004,1005,1006,203],{},"Sign-in is ",[186,1007,1008],{},"authenticate()"," Check ",[186,1011,1012],{},"supportsAuthenticate()"," first, because not every platform supports it. ",[186,1015,1016],{},"attemptLightweightAuthentication()"," covers returning users.",[152,1019,1020,1023,1024,1027,1028,1031,1032,1035],{},[17,1021,1022],{},"Authentication and authorization are separate."," Access tokens and server auth codes come from separate calls through the account's ",[186,1025,1026],{},"authorizationClient",", with ",[186,1029,1030],{},"authorizationForScopes"," to check and ",[186,1033,1034],{},"authorizeScopes"," to ask, from a user interaction.",[14,1037,1038],{},"Plan for the upgrade to touch every place your app signs in, reads the current user or asks for scopes. It isn't a version bump you can make in one line.",[31,1040,1042],{"id":1041},"when-sign-in-breaks-after-the-move","When sign-in breaks after the move",[36,1044,1045,1058],{},[39,1046,1047],{},[42,1048,1049,1052,1055],{},[45,1050,1051],{},"What you see",[45,1053,1054],{},"What it usually means",[45,1056,1057],{},"What to check",[55,1059,1060,1084,1095,1106,1120],{},[42,1061,1062,1065,1068],{},[60,1063,1064],{},"\"serverClientId must be provided on Android\"",[60,1066,1067],{},"The plugin can't find your web OAuth client",[60,1069,1070,1073,1074,1077,1078,1081,1082],{},[186,1071,1072],{},"google-services.json"," needs an ",[186,1075,1076],{},"oauth_client"," entry with ",[186,1079,1080],{},"client_type: 3",". If it's missing, add a web app to the project and download the file again, or pass the web client ID to ",[186,1083,995],{},[42,1085,1086,1089,1092],{},[60,1087,1088],{},"Sign-in reports \"canceled\" when the user didn't cancel",[60,1090,1091],{},"Sometimes a configuration error",[60,1093,1094],{},"The plugin's docs say some configuration errors come back from Credential Manager as \"canceled\", and the plugin can't tell them from a real cancel. Check the client IDs, package name and SHA fingerprints",[42,1096,1097,1100,1103],{},[60,1098,1099],{},"Works in debug, fails in release or from Play",[60,1101,1102],{},"The release signing key's SHA isn't registered",[60,1104,1105],{},"Register the signing SHA for each build configuration that fails, including the Play App Signing key shown in Play Console if you use it",[42,1107,1108,1111,1114],{},[60,1109,1110],{},"Sign-in works, but API calls fail with no token",[60,1112,1113],{},"Authentication and authorization are separate steps now",[60,1115,1116,1117,1119],{},"Request them with AuthorizationClient (",[186,1118,1034],{}," in Flutter)",[42,1121,1122,1125,1128],{},[60,1123,1124],{},"Package name mismatch",[60,1126,1127],{},"The Android client in Google Cloud has a different package name",[60,1129,1130,1131],{},"Match the package name in Google Cloud or Firebase to ",[186,1132,1133],{},"applicationId",[31,1135,570],{"id":569},[14,1137,1138,1139,1141,1142,1146,1147,203],{},"If sign-in still fails after the move, or it works on your phone but not for your users, the ",[134,1140,577],{"href":576}," covers it in two fixed-price steps. A $450 Diagnosis gives you the root cause with evidence and a fixed repair quote within 3 business days, credited toward the fix. If you go ahead, the $1,200 Fix takes 5 business days. For a related Android change, see ",[134,1143,1145],{"href":1144},"\u002Fblog\u002Fsafetynet-shut-down-play-integrity-app-check-2026\u002F","SafetyNet is gone: moving to Play Integrity and App Check",", or ",[134,1148,582],{"href":581},{"title":584,"searchDepth":585,"depth":585,"links":1150},[1151,1155,1156,1157,1158],{"id":691,"depth":585,"text":692,"children":1152},[1153],{"id":789,"depth":1154,"text":790},3,{"id":830,"depth":585,"text":831},{"id":959,"depth":585,"text":960},{"id":1041,"depth":585,"text":1042},{"id":569,"depth":585,"text":570},"2026-10-18T11:00:00.000Z","Google deprecated Google Sign-In for Android, One Tap and Smart Lock for Passwords, and moved Sign in with Google into Credential Manager. What changed and when, how to migrate a native Android app, and how to move a Flutter app to google_sign_in 7, from Google's docs checked October 18, 2026.",[1162,1165,1168,1171,1174,1177],{"question":1163,"answer":1164},"Is Google Sign-In for Android deprecated?","Yes. Google's migration page says legacy Google Sign-In for Android is deprecated and will be removed from the Google Play services Auth SDK (play-services-auth). Google recommends Sign in with Google through Credential Manager instead.",{"question":1166,"answer":1167},"When will GoogleSignInClient stop working?","Google's September 2024 timeline put the removal of Google Sign-In for Android in the second half of 2025. Its current migration page, last updated March 6, 2026, says the API will be removed in a future release, without a date. Google says removal comes in a future release, so migrate now.",{"question":1169,"answer":1170},"What replaced Google One Tap and Smart Lock on Android?","Credential Manager. Google's One Tap page now says One Tap for Android is deprecated and to migrate to Credential Manager, and the Smart Lock for Passwords page says the same.",{"question":1172,"answer":1173},"How do I get an access token for Google APIs after the migration?","Request them in a separate step from sign-in. Credential Manager returns an ID token that proves who the user is. To call Google APIs such as Drive, request the scopes with the AuthorizationClient API, which Google says apps should keep using for authorization.",{"question":1175,"answer":1176},"Why does Flutter say \"serverClientId must be provided on Android\"?","The google_sign_in Android plugin needs your web OAuth client ID. The plugin's documentation says google-services.json should contain a web OAuth client (an oauth_client entry with client_type 3). If it doesn't, add a web app to the project and download the file again, or pass the web client ID as serverClientId when you call initialize.",{"question":1178,"answer":1179},"Why does Google sign-in work in debug but not in release?","A common cause is that the release build's signing SHA isn't registered in your Firebase or Google Cloud project. The plugin's documentation lists a missing or wrong SHA as a common cause of sign-in working in one build configuration but not another.",{"readingTimeStats":1181},{"text":1182,"minutes":1183,"time":1184,"words":1185},"5 min read",5.005,300300,1001,"\u002Fblog\u002Fgoogle-sign-in-android-deprecated-credential-manager-2026","google sign-in android deprecated","8 min",[1190,1191,1192],"safetynet-shut-down-play-integrity-app-check-2026","firebase-deprecations-shutdown-dates-2026","how-to-debug-a-flutter-firebase-bug-2026",{"title":658,"description":1160},[1195,1197,1199,1202,1204,1207,1210,1212,1215,1218,1221],{"title":1196,"url":722},"Android Developers Blog, \"Streamlining Android authentication: Credential Manager replaces legacy APIs\" (September 11, 2024)",{"title":1198,"url":780},"Android Developers, about the migration from legacy Google Sign-In",{"title":1200,"url":1201},"Android Developers, about Sign in with Google","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Fcredential-manager-siwg",{"title":1203,"url":837},"Android Developers, implement Sign in with Google",{"title":1205,"url":1206},"Android Developers, about Credential Manager","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fcredential-manager",{"title":1208,"url":1209},"Android Developers, One Tap for Android (deprecated)","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Flegacy\u002Fone-tap\u002F",{"title":1211,"url":861},"Android Developers, androidx.credentials releases",{"title":1213,"url":1214},"Firebase, authenticate with Google on Android","https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fauth\u002Fandroid\u002Fgoogle-signin",{"title":1216,"url":1217},"pub.dev, google_sign_in_android (Android setup and troubleshooting)","https:\u002F\u002Fpub.dev\u002Fpackages\u002Fgoogle_sign_in_android",{"title":1219,"url":1220},"pub.dev, google_sign_in changelog","https:\u002F\u002Fpub.dev\u002Fpackages\u002Fgoogle_sign_in\u002Fchangelog",{"title":1222,"url":1223},"pub.dev, google_sign_in_android changelog","https:\u002F\u002Fpub.dev\u002Fpackages\u002Fgoogle_sign_in_android\u002Fchangelog","blog\u002Fgoogle-sign-in-android-deprecated-credential-manager-2026","google sign-in android deprecated, googlesigninclient deprecated, credential manager migration, sign in with google android, one tap android deprecated, smart lock for passwords deprecated, play-services-auth migration, google_sign_in 7 migration, flutter google sign in android, serverClientId must be provided on Android",[1227,1228,1229,1230,1231],"Google deprecated the legacy Google Sign-In for Android API and says it will be removed from the Google Play services Auth SDK. Sign in with Google now runs through Credential Manager.","Google's September 11, 2024 timeline listed Smart Lock for Passwords as shut down in Q1 2025, and One Tap and Google Sign-In for Android for removal in the second half of 2025. Its current migration page still says the removal comes in a future release.","Sign-in and access to Google APIs are now separate steps. Credential Manager signs the user in; for scopes such as Google Drive, Google says to use the AuthorizationClient API.","In Flutter, google_sign_in 7.0.0 is a breaking release: GoogleSignIn is a singleton you must initialize first, and authentication and authorization are separate. On Android, google_sign_in_android 7.0.0 switched to Credential Manager.","Several failures after the move come from configuration, not code: a missing web OAuth client (serverClientId), or a missing SHA fingerprint for one build type. Some of these surface as a \"canceled\" error.","https:\u002F\u002Fapp369.com\u002Fblog\u002Fgoogle-sign-in-android-deprecated-credential-manager-2026\u002F","8pSzUx4K9oKqBaZtsSDzuiVeqr7Le04IouFOIJQw-M0",{"id":1235,"title":1236,"author":1237,"body":1239,"category":595,"createdAt":1638,"description":1639,"disclosure":598,"extension":599,"faq":1640,"howTo":598,"lastVerified":598,"location":619,"meta":1656,"navigation":626,"ogImage":598,"path":1661,"primaryKeyword":1662,"readingTime":1663,"related":1664,"seo":1668,"sources":1669,"stem":1692,"tags":1693,"takeaways":1694,"updatedAt":1700,"url":1701,"__hash__":1702},"blog\u002Fblog\u002Fgoogle-play-target-api-36-android-16-requirement-2026.md","Google Play Requires Target API 36: The Android 16 Update",{"name":7,"social":1238},{"twitter":9},{"type":11,"value":1240,"toc":1631},[1241,1251,1254,1259,1263,1303,1312,1315,1335,1339,1347,1421,1428,1432,1451,1495,1498,1501,1563,1581,1585,1588,1618,1622,1624],[14,1242,1243,1246,1247,1250],{},[17,1244,1245],{},"Since August 31, 2026, Google Play only accepts new apps and updates that target Android 16 (API level 36), and Google says you'll be able to request an extension to November 1, 2026."," Raising ",[186,1248,1249],{},"targetSdkVersion"," is one line, but it turns on Android 16 behavior: no edge-to-edge opt-out, predictive back by default, and no orientation lock on tablets. Test those three before you ship. In a Flutter app, the quickest path is usually Flutter 3.35 or later, which targets 36 by default.",[14,1252,1253],{},"The requirements below come from Google's target API page and its Android 16 behavior changes, and the Flutter defaults from Flutter's source code, as listed in the sources. I checked each one on October 18, 2026.",[14,1255,1256,1258],{},[17,1257,28],{}," App369 is my studio. I build and fix Android and iOS apps, mostly in Flutter, and the last section mentions what I sell. Google doesn't pay me for anything on this page.",[31,1260,1262],{"id":1261},"the-requirement","The requirement",[36,1264,1265,1275],{},[39,1266,1267],{},[42,1268,1269,1272],{},[45,1270,1271],{},"App type",[45,1273,1274],{},"Must target, for new apps and updates from August 31, 2026",[55,1276,1277,1287,1295],{},[42,1278,1279,1282],{},[60,1280,1281],{},"Phone and tablet apps",[60,1283,1284],{},[17,1285,1286],{},"Android 16 (API level 36)",[42,1288,1289,1292],{},[60,1290,1291],{},"Wear OS and Android Automotive OS",[60,1293,1294],{},"Android 15 (API level 35)",[42,1296,1297,1300],{},[60,1298,1299],{},"Android TV and Android XR",[60,1301,1302],{},"Android 14 (API level 34)",[14,1304,1305,1306,1311],{},"Source: ",[134,1307,1310],{"href":1308,"rel":1309},"https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Frequirements\u002Ftarget-sdk",[138],"Google Play target API level requirement",", last updated October 16, 2026.",[14,1313,1314],{},"Google's page also says:",[149,1316,1317,1323,1329],{},[152,1318,1319,1322],{},[17,1320,1321],{},"Extension:"," if you need more time, you'll be able to request an extension to November 1, 2026. Google says the extension forms will be in Play Console \"later this year\", so check there for the form.",[152,1324,1325,1328],{},[17,1326,1327],{},"Existing apps:"," to stay available to new users on devices running a newer Android version than the app targets, an existing app must target API 35 or higher. An app that targets API 34 or lower is only available on devices running that Android version or lower.",[152,1330,1331,1334],{},[17,1332,1333],{},"Exception:"," permanently private apps for one organization's internal use.",[31,1336,1338],{"id":1337},"what-changes-when-you-target-api-36","What changes when you target API 36",[14,1340,210,1341,1346],{},[134,1342,1345],{"href":1343,"rel":1344},"https:\u002F\u002Fdeveloper.android.com\u002Fabout\u002Fversions\u002F16\u002Fbehavior-changes-16",[138],"Android 16 behavior changes"," apply to apps that target API 36 and run on Android 16 or higher. These are the three I'd test first:",[36,1348,1349,1362],{},[39,1350,1351],{},[42,1352,1353,1356,1359],{},[45,1354,1355],{},"Change",[45,1357,1358],{},"What Google says",[45,1360,1361],{},"Temporary way out",[55,1363,1364,1381,1405],{},[42,1365,1366,1371,1378],{},[60,1367,1368],{},[17,1369,1370],{},"Edge-to-edge",[60,1372,1373,1374,1377],{},"Apps can no longer opt out of drawing behind the status and navigation bars. ",[186,1375,1376],{},"windowOptOutEdgeToEdgeEnforcement"," is deprecated and disabled",[60,1379,1380],{},"None for API 36",[42,1382,1383,1388,1399],{},[60,1384,1385],{},[17,1386,1387],{},"Predictive back",[60,1389,1390,1391,1394,1395,1398],{},"Predictive back animations are on by default. ",[186,1392,1393],{},"onBackPressed"," is not called and ",[186,1396,1397],{},"KEYCODE_BACK"," is not dispatched",[60,1400,1401,1404],{},[186,1402,1403],{},"android:enableOnBackInvokedCallback=\"false\""," in the manifest",[42,1406,1407,1412,1415],{},[60,1408,1409],{},[17,1410,1411],{},"Large screens",[60,1413,1414],{},"On displays at least 600dp wide, orientation, resizability and aspect ratio restrictions are ignored, so the app fills the window",[60,1416,1417,1420],{},[186,1418,1419],{},"PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY",". Google says it won't apply once you target API 37, which Google Play will require for new apps and updates in August 2027",[14,1422,1423,1424,1427],{},"The large-screen rule doesn't apply to games (based on ",[186,1425,1426],{},"android:appCategory","), to screens smaller than 600dp, or when users opt in to the app's default behavior in the device's aspect ratio settings.",[31,1429,1431],{"id":1430},"flutter-apps","Flutter apps",[14,1433,1434,1435,1438,1439,1442,1443,1446,1447,1450],{},"Flutter's project template sets the target from the Flutter version: ",[186,1436,1437],{},"targetSdk = flutter.targetSdkVersion"," in ",[186,1440,1441],{},"android\u002Fapp\u002Fbuild.gradle.kts"," in Flutter 3.35's template, and ",[186,1444,1445],{},"targetSdkVersion flutter.targetSdkVersion"," in older Groovy templates such as Flutter 3.10's. Flutter's ",[186,1448,1449],{},"FlutterExtension"," source sets it to:",[36,1452,1453,1466],{},[39,1454,1455],{},[42,1456,1457,1460],{},[45,1458,1459],{},"Flutter version",[45,1461,1462,1463],{},"Default ",[186,1464,1465],{},"flutter.targetSdkVersion",[55,1467,1468,1476,1483],{},[42,1469,1470,1473],{},[60,1471,1472],{},"3.29 (February 12, 2025)",[60,1474,1475],{},"35",[42,1477,1478,1481],{},[60,1479,1480],{},"3.32 (May 20, 2025)",[60,1482,1475],{},[42,1484,1485,1490],{},[60,1486,1487],{},[17,1488,1489],{},"3.35 (August 14, 2025) and later",[60,1491,1492],{},[17,1493,1494],{},"36",[14,1496,1497],{},"Release dates from Flutter's release archive.",[14,1499,1500],{},"What that means for a Flutter app:",[379,1502,1503,1526,1540,1553],{},[152,1504,1505,1515,1516,1518,1519,1522,1523,1525],{},[17,1506,1507,1508,1511,1512,203],{},"Check ",[186,1509,1510],{},"android\u002Fapp\u002Fbuild.gradle"," or ",[186,1513,1514],{},"build.gradle.kts"," If it uses ",[186,1517,1465],{},", Flutter 3.35 or later gives you 36. If it has a hard-coded number, change it to 36 yourself (",[186,1520,1521],{},"targetSdk = 36"," in a ",[186,1524,1514],{}," file).",[152,1527,1528,1531,1532,1535,1536,1539],{},[17,1529,1530],{},"Edge-to-edge."," My advice: Flutter draws its own UI, so the visible risk is content under the status or navigation bar. Check every screen with ",[186,1533,1534],{},"SafeArea"," or padding from ",[186,1537,1538],{},"MediaQuery",", including bottom sheets and screens with a bottom bar.",[152,1541,1542,1545,1546,1548,1549,1552],{},[17,1543,1544],{},"Back navigation."," If the app or a plugin overrides ",[186,1547,1393],{}," in Android code, that override won't be called on Android 16. My advice: use ",[186,1550,1551],{},"PopScope"," on the Flutter side for back handling, and check plugins that intercept back.",[152,1554,1555,1558,1559,1562],{},[17,1556,1557],{},"Tablets."," If the app locks orientation with ",[186,1560,1561],{},"SystemChrome.setPreferredOrientations"," or the manifest, test it on a tablet or a large emulator, because Google says that lock is ignored on screens 600dp or wider.",[14,1564,1565,1566,1570,1571,1575,1576,1580],{},"If an older app can't move to Flutter 3.35 because the Android build breaks first, the ",[134,1567,1569],{"href":1568},"\u002Fblog\u002Fflutter-deleted-android-v1-embedding-build-failed-2026\u002F","v1 embedding fix"," and the ",[134,1572,1574],{"href":1573},"\u002Fblog\u002Fflutter-gradle-plugin-applied-imperatively-fix-2026\u002F","Gradle plugin fix"," cover the two errors Flutter 3.29 introduced. If the app sells in-app purchases, the ",[134,1577,1579],{"href":1578},"\u002Fblog\u002Fplay-billing-library-7-deprecated-update-to-8-2026\u002F","Billing Library 8 deadline"," is due at the same time.",[31,1582,1584],{"id":1583},"what-to-do-now","What to do now",[14,1586,1587],{},"This section is my advice, not Google's.",[379,1589,1590,1600,1606,1612],{},[152,1591,1592,1595,1596,1599],{},[17,1593,1594],{},"Check the target your last release used."," Look at ",[186,1597,1598],{},"targetSdk"," in the build file for that release, or the app bundle details in Play Console.",[152,1601,1602,1605],{},[17,1603,1604],{},"Request the extension if the change won't ship in time,"," once the form appears in Play Console. As of October 18, 2026, the November 1 extension date is two weeks away.",[152,1607,1608,1611],{},[17,1609,1610],{},"Raise the target, then test on an Android 16 device or emulator."," Go through every screen for edge-to-edge, try the back gesture everywhere, and rotate on a tablet-sized emulator.",[152,1613,1614,1617],{},[17,1615,1616],{},"Ship to a closed testing track first."," Catch layout and back-gesture issues before your users do.",[14,1619,562,1620,203],{},[134,1621,566],{"href":565},[31,1623,570],{"id":569},[14,1625,1626,1627,578,1629,203],{},"If an app can't ship an update because of the target API requirement, or something broke after raising it, the ",[134,1628,577],{"href":576},[134,1630,582],{"href":581},{"title":584,"searchDepth":585,"depth":585,"links":1632},[1633,1634,1635,1636,1637],{"id":1261,"depth":585,"text":1262},{"id":1337,"depth":585,"text":1338},{"id":1430,"depth":585,"text":1431},{"id":1583,"depth":585,"text":1584},{"id":569,"depth":585,"text":570},"2026-10-18T23:45:00.000Z","Since August 31, 2026, Google Play requires new apps and updates to target Android 16 (API level 36), with an extension to November 1, 2026. What changes when you target API 36 (edge-to-edge, predictive back, large-screen orientation), which Flutter versions target it by default, and what to test, from Google's docs checked October 18, 2026.",[1641,1644,1647,1650,1653],{"question":1642,"answer":1643},"What is the Google Play target API level requirement for 2026?","Google says that starting August 31, 2026, new apps and app updates must target Android 16 (API level 36) or higher. Wear OS and Android Automotive OS apps must target API 35, and Android TV and Android XR apps API 34. Google says you'll be able to request an extension to November 1, 2026.",{"question":1645,"answer":1646},"What happens to my app if it targets an older API level?","Google says existing apps must target API 35 or higher to stay available to new users on devices running a newer Android version than the app targets. An app that targets API 34 or lower is only available on devices running that Android version or lower. New apps and updates must target API 36 to be submitted.",{"question":1648,"answer":1649},"How do I set targetSdkVersion 36 in a Flutter app?","If android\u002Fapp\u002Fbuild.gradle uses targetSdkVersion flutter.targetSdkVersion, upgrading to Flutter 3.35 or later sets it to 36, per Flutter's FlutterExtension source. Otherwise set targetSdkVersion 36 (or targetSdk = 36 in build.gradle.kts) yourself, and check that compileSdk is at least 36.",{"question":1651,"answer":1652},"Why did the back button stop working after targeting Android 16?","Google says that for apps targeting API 36 on Android 16 devices, onBackPressed is not called and KeyEvent.KEYCODE_BACK is not dispatched. Move to the supported back navigation APIs, or opt out temporarily with android:enableOnBackInvokedCallback=\"false\" in the manifest.",{"question":1654,"answer":1655},"Can I still lock my app to portrait on tablets?","Not by default. Google says that for apps targeting API 36, orientation, resizability and aspect ratio restrictions don't apply on displays at least 600dp wide, except for games and when users opt in. A temporary manifest opt-out exists, but Google says it won't apply once you target API 37. Google's Android 17 post says Play will require new apps and updates to target API 37 in August 2027, with no option to opt out.",{"readingTimeStats":1657},{"text":1182,"minutes":1658,"time":1659,"words":1660},4.33,259800,866,"\u002Fblog\u002Fgoogle-play-target-api-36-android-16-requirement-2026","target api level 36","7 min",[1665,1666,1667],"play-billing-library-7-deprecated-update-to-8-2026","flutter-gradle-plugin-applied-imperatively-fix-2026","flutter-deleted-android-v1-embedding-build-failed-2026",{"title":1236,"description":1639},[1670,1672,1674,1677,1680,1683,1686,1689],{"title":1671,"url":1308},"Android Developers, Meet Google Play's target API level requirement (last updated October 16, 2026)",{"title":1673,"url":1343},"Android Developers, Behavior changes: apps targeting Android 16 or higher (last updated October 16, 2026)",{"title":1675,"url":1676},"Android Developers Blog, Prepare your app for the resizability and orientation changes in Android 17","https:\u002F\u002Fdeveloper.android.com\u002Fblog\u002Fposts\u002Fprepare-your-app-for-the-resizability-and-orientation-changes-in-android-17",{"title":1678,"url":1679},"Android Developers, Ignore orientation, resizability and aspect ratio restrictions on Android 17 (last updated October 16, 2026)","https:\u002F\u002Fdeveloper.android.com\u002Fabout\u002Fversions\u002F17\u002Fchanges\u002Fff-restrictions-ignored",{"title":1681,"url":1682},"Flutter on GitHub, FlutterExtension.kt at 3.35.0","https:\u002F\u002Fgithub.com\u002Fflutter\u002Fflutter\u002Fblob\u002F3.35.0\u002Fpackages\u002Fflutter_tools\u002Fgradle\u002Fsrc\u002Fmain\u002Fkotlin\u002FFlutterExtension.kt",{"title":1684,"url":1685},"Flutter on GitHub, app build.gradle.kts template at 3.35.0","https:\u002F\u002Fgithub.com\u002Fflutter\u002Fflutter\u002Fblob\u002F3.35.0\u002Fpackages\u002Fflutter_tools\u002Ftemplates\u002Fapp\u002Fandroid-kotlin.tmpl\u002Fapp\u002Fbuild.gradle.kts.tmpl",{"title":1687,"url":1688},"Flutter on GitHub, app build.gradle template at 3.10.0","https:\u002F\u002Fgithub.com\u002Fflutter\u002Fflutter\u002Fblob\u002F3.10.0\u002Fpackages\u002Fflutter_tools\u002Ftemplates\u002Fapp_shared\u002Fandroid-kotlin.tmpl\u002Fapp\u002Fbuild.gradle.tmpl",{"title":1690,"url":1691},"Flutter release archive (macOS)","https:\u002F\u002Fstorage.googleapis.com\u002Fflutter_infra_release\u002Freleases\u002Freleases_macos.json","blog\u002Fgoogle-play-target-api-36-android-16-requirement-2026","target api level 36, google play target sdk 36, android 16 target api requirement, targetSdkVersion 36 flutter, play console target api level warning, edge to edge opt out android 16, predictive back android 16, onBackPressed not called android 16, flutter targetSdkVersion default",[1695,1696,1697,1698,1699],"Since August 31, 2026, Google Play requires new apps and app updates to target Android 16 (API level 36). Wear OS and Android Automotive OS apps need API 35, and Android TV and Android XR apps need API 34.","Google says you'll be able to request an extension to November 1, 2026, and that the extension forms will be in Play Console.","Existing apps must target API 35 or higher to stay available to new users on devices running a newer Android version than the app targets.","Targeting API 36 changes behavior on Android 16 devices: apps can no longer opt out of edge-to-edge, predictive back is on by default and onBackPressed is no longer called, and orientation and resizability limits are ignored on screens at least 600dp wide.","Flutter 3.35 and later set flutter.targetSdkVersion to 36. Flutter 3.29 and 3.32 set it to 35, so an app on those versions has to upgrade Flutter or set 36 itself.","2026-10-19T13:00:00.000Z","https:\u002F\u002Fapp369.com\u002Fblog\u002Fgoogle-play-target-api-36-android-16-requirement-2026\u002F","oirxL7D0zPACoWLkNYOnNA4wYHFnkQCHyTmn0VaV5qs",{"id":1704,"title":1705,"author":1706,"body":1708,"category":595,"createdAt":2440,"description":2441,"disclosure":598,"extension":599,"faq":2442,"howTo":598,"lastVerified":598,"location":619,"meta":2461,"navigation":626,"ogImage":598,"path":2467,"primaryKeyword":2468,"readingTime":2469,"related":2470,"seo":2472,"sources":2473,"stem":2498,"tags":2499,"takeaways":2500,"updatedAt":2440,"url":2506,"__hash__":2507},"blog\u002Fblog\u002Fgoogle-play-memory-dex-zero-tap-sign-in-requirements-2027.md","Google Play Memory, DEX and Zero-Tap Sign-In Rules 2027",{"name":7,"social":1707},{"twitter":9},{"type":11,"value":1709,"toc":2431},[1710,1716,1719,1723,1727,1816,1819,1823,1826,1839,1844,1861,1866,1989,1994,2103,2106,2111,2152,2159,2163,2187,2190,2194,2200,2205,2219,2224,2244,2262,2265,2308,2314,2318,2332,2335,2341,2347,2351,2412,2415,2418,2422,2424],[14,1711,1712,1715],{},[17,1713,1714],{},"Google Play will enforce three new technical quality requirements: lower memory and bitmap memory use and DEX code optimization from February 2027, and zero-tap sign-in restoration from April 2027."," Google gives the month for each, not a day. Memory is judged at the 90th percentile over a rolling 28 days, DEX optimization must reach at least 25% where your DEX is large enough, and any app with sign-in must restore the signed-in state on a new device with the Restore Credentials API. Google says missing a requirement can affect visibility and publishing capabilities.",[14,1717,1718],{},"I checked Google's pages on October 19, 2026. Google can update these pages, so open the linked pages before you plan around any number.",[14,1720,1721,29],{},[17,1722,28],{},[31,1724,1726],{"id":1725},"the-dated-table","The dated table",[36,1728,1729,1744],{},[39,1730,1731],{},[42,1732,1733,1736,1739,1742],{},[45,1734,1735],{},"Date",[45,1737,1738],{},"What",[45,1740,1741],{},"Who",[45,1743,53],{},[55,1745,1746,1760,1774,1788,1802],{},[42,1747,1748,1751,1754,1757],{},[60,1749,1750],{},"August 26, 2026",[60,1752,1753],{},"Google announces the requirements on the Android Developers Blog",[60,1755,1756],{},"All Play developers",[60,1758,1759],{},"Read the Help Center page and open Android vitals",[42,1761,1762,1765,1768,1771],{},[60,1763,1764],{},"September 30, 2026",[60,1766,1767],{},"Cutoff for Block Store: apps that integrated it on or before this date to restore sign-in state are considered compliant",[60,1769,1770],{},"Apps with sign-in",[60,1772,1773],{},"If you already use Block Store for this, you are covered. Otherwise plan Restore Credentials",[42,1775,1776,1779,1782,1785],{},[60,1777,1778],{},"February 2027 (Google gives the month, not a day.)",[60,1780,1781],{},"Reduced memory usage and DEX code optimization enforced",[60,1783,1784],{},"Apps and games. DEX rule only above 10 MB (apps) or 50 MB (games)",[60,1786,1787],{},"Compare your Android vitals with the thresholds below. Check DEX in the app bundle explorer",[42,1789,1790,1793,1796,1799],{},[60,1791,1792],{},"April 2027 (Google gives the month, not a day.)",[60,1794,1795],{},"Zero-tap sign-in restoration enforced",[60,1797,1798],{},"Apps that support sign-in, mobile and tablet. Games out of scope for now",[60,1800,1801],{},"Implement Restore Credentials. Submit any regulatory exemption request in Play Console before this date",[42,1803,1804,1807,1810,1813],{},[60,1805,1806],{},"Later this year (2026)",[60,1808,1809],{},"The blog post says to expect additional diagnostic tools and deeper insights into the Android Memory Limiter. The Help page says more zero-tap details and exceptions will be published in the coming months",[60,1811,1812],{},"Everyone",[60,1814,1815],{},"Watch the Help Center page for changes",[14,1817,1818],{},"The August blog post says apps that miss the thresholds may see reduced app visibility and publishing capabilities on Google Play.",[31,1820,1822],{"id":1821},"the-memory-and-bitmap-thresholds","The memory and bitmap thresholds",[14,1824,1825],{},"Google's page shows these metrics under the \"Memory\" heading in Android vitals and in the Google Play Developer Reporting API.",[149,1827,1828,1834],{},[152,1829,1830,1833],{},[17,1831,1832],{},"Memory usage (Anonymous RSS + Swap):"," Anon RSS is memory the app allocates directly (Java\u002FKotlin heap, native allocations, anonymous mappings) that can't be paged out without swap. Swap is memory compressed or paged into zRAM.",[152,1835,1836],{},[17,1837,1838],{},"Bitmap memory usage.",[14,1840,1841],{},[17,1842,1843],{},"How it is measured, as Google writes it:",[149,1845,1846,1849,1852,1855,1858],{},[152,1847,1848],{},"Play uses a rolling 28 days of data.",[152,1850,1851],{},"Samples come from opted-in users' devices.",[152,1853,1854],{},"Compliance is judged on the 90th percentile (P90). Measurement covers the app's lifecycle from foreground to background.",[152,1856,1857],{},"Only mobile and tablet form factors are in scope.",[152,1859,1860],{},"Play evaluates all app versions with available data.",[14,1862,1863],{},[17,1864,1865],{},"Apps, P90 by app state and device RAM tier:",[36,1867,1868,1887],{},[39,1869,1870],{},[42,1871,1872,1875,1878,1881,1884],{},[45,1873,1874],{},"Physical RAM (Total Memory)",[45,1876,1877],{},"Foreground",[45,1879,1880],{},"User-perceived services",[45,1882,1883],{},"Background",[45,1885,1886],{},"Cached",[55,1888,1889,1903,1918,1933,1947,1962,1976],{},[42,1890,1891,1894,1897,1899,1901],{},[60,1892,1893],{},"0-4 GB (0-3200 MB)",[60,1895,1896],{},"none listed",[60,1898,1896],{},[60,1900,1896],{},[60,1902,1896],{},[42,1904,1905,1908,1911,1914,1916],{},[60,1906,1907],{},"4 GB (3200-4800 MB)",[60,1909,1910],{},"2 GB",[60,1912,1913],{},"1 GB",[60,1915,1913],{},[60,1917,1896],{},[42,1919,1920,1923,1926,1929,1931],{},[60,1921,1922],{},"6 GB (4800-6800 MB)",[60,1924,1925],{},"2.25 GB",[60,1927,1928],{},"1.25 GB",[60,1930,1928],{},[60,1932,1896],{},[42,1934,1935,1938,1940,1943,1945],{},[60,1936,1937],{},"8 GB (6800-9216 MB)",[60,1939,1925],{},[60,1941,1942],{},"1.5 GB",[60,1944,1942],{},[60,1946,1896],{},[42,1948,1949,1952,1955,1958,1960],{},[60,1950,1951],{},"12 GB (9216-14336 MB)",[60,1953,1954],{},"3.25 GB",[60,1956,1957],{},"1.75 GB",[60,1959,1957],{},[60,1961,1896],{},[42,1963,1964,1967,1970,1972,1974],{},[60,1965,1966],{},"16 GB (14336-18432 MB)",[60,1968,1969],{},"4.25 GB",[60,1971,1910],{},[60,1973,1910],{},[60,1975,1896],{},[42,1977,1978,1981,1983,1985,1987],{},[60,1979,1980],{},"16 GB+ (above 18432 MB)",[60,1982,1896],{},[60,1984,1896],{},[60,1986,1896],{},[60,1988,1896],{},[14,1990,1991],{},[17,1992,1993],{},"Games, P90:",[36,1995,1996,2010],{},[39,1997,1998],{},[42,1999,2000,2002,2004,2006,2008],{},[45,2001,1874],{},[45,2003,1877],{},[45,2005,1880],{},[45,2007,1883],{},[45,2009,1886],{},[55,2011,2012,2024,2037,2051,2064,2078,2091],{},[42,2013,2014,2016,2018,2020,2022],{},[60,2015,1893],{},[60,2017,1896],{},[60,2019,1896],{},[60,2021,1896],{},[60,2023,1896],{},[42,2025,2026,2028,2030,2033,2035],{},[60,2027,1907],{},[60,2029,1925],{},[60,2031,2032],{},"2.0 GB",[60,2034,2032],{},[60,2036,1896],{},[42,2038,2039,2041,2044,2047,2049],{},[60,2040,1922],{},[60,2042,2043],{},"2.75 GB",[60,2045,2046],{},"2.5 GB",[60,2048,2046],{},[60,2050,1896],{},[42,2052,2053,2055,2058,2060,2062],{},[60,2054,1937],{},[60,2056,2057],{},"3.5 GB",[60,2059,2043],{},[60,2061,2043],{},[60,2063,1896],{},[42,2065,2066,2068,2071,2074,2076],{},[60,2067,1951],{},[60,2069,2070],{},"4 GB",[60,2072,2073],{},"3.2 GB",[60,2075,2073],{},[60,2077,1896],{},[42,2079,2080,2082,2085,2087,2089],{},[60,2081,1966],{},[60,2083,2084],{},"5 GB",[60,2086,2057],{},[60,2088,2057],{},[60,2090,1896],{},[42,2092,2093,2095,2097,2099,2101],{},[60,2094,1980],{},[60,2096,1896],{},[60,2098,1896],{},[60,2100,1896],{},[60,2102,1896],{},[14,2104,2105],{},"Google's page shows a dash in the empty cells. I read that as no threshold listed, and I wrote it that way rather than guess. Each RAM tier includes its lowest value, and Total Memory can be lower than the advertised Physical RAM.",[14,2107,2108],{},[17,2109,2110],{},"Bitmap memory, P90:",[36,2112,2113,2123],{},[39,2114,2115],{},[42,2116,2117,2120],{},[45,2118,2119],{},"App state",[45,2121,2122],{},"Threshold",[55,2124,2125,2132,2139,2145],{},[42,2126,2127,2129],{},[60,2128,1877],{},[60,2130,2131],{},"No threshold listed",[42,2133,2134,2136],{},[60,2135,1880],{},[60,2137,2138],{},"Above 200 MB",[42,2140,2141,2143],{},[60,2142,1883],{},[60,2144,2138],{},[42,2146,2147,2149],{},[60,2148,1886],{},[60,2150,2151],{},"Above 400 MB",[14,2153,2154,2155,2158],{},"Google explains that these thresholds sit above zero because apps may be sampled shortly after a state change, while they are still releasing bitmaps in response to ",[186,2156,2157],{},"onTrimMemory",". It also warns that changing an app's category to get different thresholds violates the Metadata policy.",[31,2160,2162],{"id":2161},"the-dex-code-optimization-rule","The DEX code optimization rule",[149,2164,2165,2172,2175,2178,2181,2184],{},[152,2166,2167,2168,2171],{},"Apps and games must reach at least ",[17,2169,2170],{},"25%"," for obfuscation, optimization and shrinking.",[152,2173,2174],{},"It applies only where DEX size is non-negligible: games with DEX over 50 MB, apps with DEX over 10 MB.",[152,2176,2177],{},"It applies across all form factors.",[152,2179,2180],{},"DEX size and optimization percentages are visible per bundle in the app bundle explorer.",[152,2182,2183],{},"Any tool can be used, such as R8 or another shrinker. Google strongly recommends R8.",[152,2185,2186],{},"Builds from CI\u002FCD or enterprise pipelines may differ slightly from the uploaded build, so Google says some minor differences are expected.",[14,2188,2189],{},"The blog post adds that Play Console shows DEX optimization insights for each uploaded bundle \"if the shrinking tool shares metadata\".",[31,2191,2193],{"id":2192},"the-zero-tap-sign-in-requirement","The zero-tap sign-in requirement",[14,2195,2196,2199],{},[17,2197,2198],{},"What it says."," Apps that support sign-in, optional or mandatory, must support zero-tap sign-in restoration when a user moves to a new Android device through a device-to-device transfer or cloud backup. The primary method is the Android Restore Credentials API, available from Android 9. Mobile and tablet form factors only.",[14,2201,2202],{},[17,2203,2204],{},"Exceptions, as written:",[149,2206,2207,2210,2213,2216],{},[152,2208,2209],{},"Apps that integrated Block Store on or before September 30, 2026 to restore sign-in state are considered compliant.",[152,2211,2212],{},"Permanently private apps and enterprise device management apps are out of scope.",[152,2214,2215],{},"Apps under strict regulatory or compliance mandates, such as financial services or healthcare, may qualify for an exemption. The request must be submitted through Play Console before the enforcement date.",[152,2217,2218],{},"Games are currently out of scope. Google expects dedicated guidance in 2027 and encourages games with single-account sign-in to adopt Restore Credentials.",[14,2220,2221],{},[17,2222,2223],{},"Scope details from Google's FAQ:",[149,2225,2226,2229,2232,2235,2238,2241],{},[152,2227,2228],{},"Apps without user accounts are unaffected.",[152,2230,2231],{},"Signed-out or guest users should launch unauthenticated on the new device.",[152,2233,2234],{},"Restore Credentials handles authentication only, not authorization scopes or MFA step-up.",[152,2236,2237],{},"If a user has several accounts, store the restore key for the current or last active account.",[152,2239,2240],{},"The restore key is deleted on uninstall. Apps must actively delete it on logout or account deletion.",[152,2242,2243],{},"Apps that don't meet the requirement will be notified by Google.",[14,2245,2246,2249,2250,2253,2254,2257,2258,2261],{},[17,2247,2248],{},"How the API works."," Per Google's Restore Credentials documentation, it is a Credential Manager feature that lets users restore their app accounts and be signed in on first opening an app after setting up a new device. You generate a restore key silently after the user signs in, and again on a later launch if they are already signed in. For cloud backup the user must be signed in to a Google Account, have Android data backup enabled and have a screen lock. If not, an ",[186,2251,2252],{},"E2eeUnavailableException"," is thrown. The implementation guide's text on handling it is internally inconsistent (it says to call with cloud backup ",[186,2255,2256],{},"true",", then shows a retry with ",[186,2259,2260],{},"false","), so check the current page before copying it.",[14,2263,2264],{},"From the implementation guide:",[149,2266,2267,2274,2288,2298,2301],{},[152,2268,2269,2270,2273],{},"Requirements: Android 9 (API level 28) and higher, Google Play services core version 24220000 or higher, and ",[186,2271,2272],{},"androidx.credentials"," 1.5.0 or higher.",[152,2275,2276,2277,2280,2281,2284,2285,203],{},"On a new device, call it on first launch, or in ",[186,2278,2279],{},"onRestoreFinished"," of ",[186,2282,2283],{},"BackupAgent"," if you use app data backup. The page says not to use ",[186,2286,2287],{},"onRestore",[152,2289,2290,2291,349,2294,2297],{},"Credential Manager does not delete keys for you. Call ",[186,2292,2293],{},"clearCredentialState()",[186,2295,2296],{},"TYPE_CLEAR_RESTORE_CREDENTIAL"," on logout, and also when the server invalidates the session.",[152,2299,2300],{},"Notifications are not automatically restored. If you use Firebase, fetch and send the FCM token to your backend again.",[152,2302,2303,2304,2307],{},"Scope: a restore key is tied to an app's package name, so a main app and sub-apps with different package names each need their own key. The feature works whether or not ",[186,2305,2306],{},"allowBackup"," is set in the manifest.",[14,2309,2310,2311,203],{},"For the sign-in library background, see ",[134,2312,2313],{"href":201},"my Credential Manager guide",[31,2315,2317],{"id":2316},"what-this-means-for-a-flutter-app","What this means for a Flutter app",[14,2319,2320,2323,2324,2327,2328,2331],{},[17,2321,2322],{},"R8 and minify."," Flutter's Android deployment page says R8 \"is enabled by default when you build a release APK or AAB\" and that you can disable it with ",[186,2325,2326],{},"--no-shrink",". The same page later says the ",[186,2329,2330],{},"--[no-]shrink"," flag has no effect and that code shrinking is always enabled in release builds. Those two statements contradict each other, and the page does not say which is current. I would not rely on the flag either way. Check what your own release bundle shows.",[14,2333,2334],{},"The page also says obfuscation and minification can considerably extend compile time. It does not explain custom keep rules for plugins. For that, Android's docs say to add keep rules when optimization causes errors, and to refine them: \"to allow maximum optimization of classes, fields and methods\". Dart obfuscation is a separate feature from R8.",[14,2336,2337,2340],{},[17,2338,2339],{},"Large images."," Flutter's performance best practices page has no guidance on large images, the image cache or decoding at a reduced size, so I can't cite Flutter docs for that. Android's bitmap page is general to Android. It recommends decoding images to match their target container dimensions instead of loading full-resolution assets, and serving images from your backend sized to device density and container size.",[14,2342,2343,2346],{},[17,2344,2345],{},"Restore Credentials in Flutter or React Native."," I found no official Flutter or React Native documentation for Restore Credentials in the pages I fetched. Google's docs describe a Kotlin API. I did not verify any third-party plugin. So for a Flutter app, expect either to write it in your Android module through a platform channel or to vet a plugin yourself. Also expect server work: Google recommends the feature especially for apps that already support passkeys because of the common underlying server-side implementation.",[31,2348,2350],{"id":2349},"how-to-check-your-app","How to check your app",[379,2352,2353,2359,2365,2371,2400,2406],{},[152,2354,2355,2358],{},[17,2356,2357],{},"Android vitals."," Open Android vitals in Play Console and find the new Memory section: memory usage (anonymous RSS + swap) and bitmap memory usage, by percentile and RAM bucket. The blog post also lists a new out-of-memory filter for Crashes and ANRs and a warning on the Android vitals overview page for unoptimized bitmaps, limited DEX optimization or limited split-bundle usage.",[152,2360,2361,2364],{},[17,2362,2363],{},"Compare at P90."," Read the P90 value for each app state and RAM tier against the tables above. Remember bitmap limits apply to user-perceived services, background and cached states, not foreground.",[152,2366,2367,2370],{},[17,2368,2369],{},"App bundle explorer."," Open your latest bundle and check DEX size and optimization percentage. If DEX is under 10 MB (app), the 25% rule does not apply per Google's page.",[152,2372,2373,2376,2377,216,2380,2383,2384,2387,2388,2391,2392,2395,2396,2399],{},[17,2374,2375],{},"R8 settings."," Android's docs say to set ",[186,2378,2379],{},"isMinifyEnabled = true",[186,2381,2382],{},"isShrinkResources = true"," in the release build, and use ",[186,2385,2386],{},"proguard-android-optimize.txt",", because support for ",[186,2389,2390],{},"proguard-android.txt"," was dropped (it includes ",[186,2393,2394],{},"-dontoptimize","). For AGP 9.3 and higher the docs use an ",[186,2397,2398],{},"optimization { enable = true }"," block. If optimization causes errors, the docs say to add keep rules for the code it breaks, so test the release build.",[152,2401,2402,2405],{},[17,2403,2404],{},"Bitmap sizing."," List the biggest images your app shows. Decode at the size they display, release bitmap caches when the UI is hidden, and use Memory Profiler and LeakCanary to find bitmaps kept after a screen is gone.",[152,2407,2408,2411],{},[17,2409,2410],{},"Sign-in."," If your app has accounts, decide now whether you are covered by the Block Store cutoff, an exemption, or need Restore Credentials. Test with a real device-to-device transfer or a cloud-backup restore.",[14,2413,2414],{},"My advice: do the Android vitals and bundle explorer checks this week. They are free and tell you whether memory or DEX is even a problem for your app. If sign-in is in your app, treat April 2027 as a real project, because it touches your server and your logout flow.",[14,2416,2417],{},"My advice: do not wait for a Play notice. Google says apps that miss the sign-in requirement will be notified, but a notice close to enforcement leaves little time for server changes.",[14,2419,562,2420,203],{},[134,2421,566],{"href":565},[31,2423,570],{"id":569},[14,2425,2426,2427,578,2429,203],{},"If your Flutter app has memory spikes, heavy images, an unoptimized release build or a sign-in flow that needs Restore Credentials before Google Play enforces the change, the ",[134,2428,577],{"href":576},[134,2430,582],{"href":581},{"title":584,"searchDepth":585,"depth":585,"links":2432},[2433,2434,2435,2436,2437,2438,2439],{"id":1725,"depth":585,"text":1726},{"id":1821,"depth":585,"text":1822},{"id":2161,"depth":585,"text":2162},{"id":2192,"depth":585,"text":2193},{"id":2316,"depth":585,"text":2317},{"id":2349,"depth":585,"text":2350},{"id":569,"depth":585,"text":570},"2026-10-19T19:00:00.000Z","Google Play's new technical quality requirements: memory and bitmap thresholds and DEX optimisation from February 2027, and zero-tap sign-in restoration from April 2027. The numbers, who is exempt, and what to check in a Flutter app, verified October 19, 2026.",[2443,2446,2449,2452,2455,2458],{"question":2444,"answer":2445},"When do Google Play's new memory and DEX requirements start?","Google's Play Console Help page says both are enforced from February 2027. Google gives the month, not a day. The August 26, 2026 Android Developers Blog post says the same and adds that additional diagnostic tools are coming later this year.",{"question":2447,"answer":2448},"Does my app need to pass the DEX 25% rule?","Only if your DEX is non-negligible. Google's page applies the 25% minimum for obfuscation, optimization and shrinking to games with DEX over 50 MB and apps with DEX over 10 MB. You can see DEX size and optimization percentages per bundle in the app bundle explorer in Play Console.",{"question":2450,"answer":2451},"What is zero-tap sign-in restoration?","It means a user who moves to a new Android device, by device-to-device transfer or cloud backup, opens your app and is already signed in. Google's primary method is the Android Restore Credentials API, available from Android 9. It applies to apps that support sign-in, whether optional or mandatory, on mobile and tablet form factors.",{"question":2453,"answer":2454},"Who is exempt from the zero-tap sign-in requirement?","Per Google's page: apps that integrated Block Store on or before September 30, 2026 to restore sign-in state are considered compliant. Permanently private apps and enterprise device management apps are out of scope. Apps under strict regulatory or compliance mandates, such as financial services or healthcare, may qualify for an exemption, and the request must be submitted through Play Console before the enforcement date. Games are currently out of scope. Apps without user accounts are unaffected.",{"question":2456,"answer":2457},"Does Flutter support Restore Credentials?","I could not confirm it. The pages I fetched, including Google's Restore Credentials documentation and the Flutter docs, describe the Android Kotlin API and mention no Flutter plugin. I did not verify any third-party plugin, so treat that as something to check or write natively in your Android module.",{"question":2459,"answer":2460},"What happens if my app does not meet a requirement?","Google's page says not meeting a requirement can affect an app's visibility and publishing capabilities on Google Play. For memory, it also says apps must meet all the thresholds to qualify for or keep Apps Experience Program and Level Up Program eligibility. Google says apps that do not meet the zero-tap requirement will be notified.",{"readingTimeStats":2462},{"text":2463,"minutes":2464,"time":2465,"words":2466},"10 min read",9.72,583200,1944,"\u002Fblog\u002Fgoogle-play-memory-dex-zero-tap-sign-in-requirements-2027","google play memory requirements 2027","11 min",[632,631,2471],"google-play-16kb-page-size-flutter-android-2026",{"title":1705,"description":2441},[2474,2477,2480,2483,2486,2489,2492,2495],{"title":2475,"url":2476},"Play Console Help, Technical quality requirements","https:\u002F\u002Fsupport.google.com\u002Fgoogleplay\u002Fandroid-developer\u002Fanswer\u002F17492799",{"title":2478,"url":2479},"Android Developers Blog, Elevating app quality: Reducing memory usage and improving device migration (August 26, 2026)","https:\u002F\u002Fandroid-developers.googleblog.com\u002F2026\u002F08\u002Fapp-quality-memory-optimization-secure-onboarding.html",{"title":2481,"url":2482},"Android Developers, Restore Credentials","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Frestore-credentials",{"title":2484,"url":2485},"Android Developers, Implement Restore Credentials with Credential Manager","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Frestore-credentials-implementation",{"title":2487,"url":2488},"Android Developers, Enable app optimization","https:\u002F\u002Fdeveloper.android.com\u002Ftopic\u002Fperformance\u002Fapp-optimization\u002Fenable-app-optimization",{"title":2490,"url":2491},"Android Developers, Bitmap memory usage","https:\u002F\u002Fdeveloper.android.com\u002Ftopic\u002Fperformance\u002Fvitals\u002Fbitmap-memory-usage",{"title":2493,"url":2494},"Flutter docs, Build and release an Android app","https:\u002F\u002Fdocs.flutter.dev\u002Fdeployment\u002Fandroid",{"title":2496,"url":2497},"Flutter docs, Performance best practices","https:\u002F\u002Fdocs.flutter.dev\u002Fperf\u002Fbest-practices","blog\u002Fgoogle-play-memory-dex-zero-tap-sign-in-requirements-2027","google play memory requirements 2027, google play dex code optimization, android restore credentials api, zero-tap sign-in restoration, android vitals memory usage, bitmap memory usage android, r8 minify flutter android release, google play technical quality requirements, flutter restore credentials, block store api google play",[2501,2502,2503,2504,2505],"Google Play will enforce three new technical quality requirements: reduced memory usage and DEX code optimization from February 2027, and zero-tap sign-in restoration from April 2027. Google gives the month for each, not a day.","Memory is judged at the 90th percentile over a rolling 28 days of data from opted-in users, split by app state and device RAM tier. Bitmap memory has its own thresholds: above 200 MB in user-perceived services and background, above 400 MB when cached.","DEX optimization needs at least 25% for obfuscation, optimization and shrinking, but only where DEX is over 10 MB for an app or over 50 MB for a game. Google strongly recommends R8.","Apps that support sign-in, optional or mandatory, must restore the signed-in state on a new device with the Restore Credentials API (Android 9 and higher). Apps that integrated Block Store on or before September 30, 2026 are considered compliant. Games are out of scope for now.","Google says not meeting a requirement can affect visibility and publishing capabilities. I found no official Flutter or React Native plugin documentation for Restore Credentials, so in Flutter this means native Android work or a plugin you must vet yourself.","https:\u002F\u002Fapp369.com\u002Fblog\u002Fgoogle-play-memory-dex-zero-tap-sign-in-requirements-2027\u002F","uOOcJ-H91i8bZWhlhQiEVBh1yIaLoyjV0BCBzo3_A4w",[2509,2511,2513,2517,2521,2524],{"keyword":5,"url":653,"title":5,"relevance":2510},78,{"keyword":658,"url":1232,"title":658,"relevance":2512},13,{"keyword":2514,"url":2515,"title":2514,"relevance":2516},"Google Play 16 KB Page Size: Fixing Flutter and Android Apps","https:\u002F\u002Fapp369.com\u002Fblog\u002Fgoogle-play-16kb-page-size-flutter-android-2026\u002F",12,{"keyword":2518,"url":2519,"title":2518,"relevance":2520},"Google Mobile Ads SDK Sunset Dates and Versions 2027","https:\u002F\u002Fapp369.com\u002Fblog\u002Fadmob-google-mobile-ads-sdk-sunset-versions-2027\u002F",10,{"keyword":2522,"url":2523,"title":2522,"relevance":2520},"goo.gl Shut Down: Which Google Short Links Still Work in 2026","https:\u002F\u002Fapp369.com\u002Fblog\u002Fgoogle-url-shortener-goo-gl-shut-down-2026\u002F",{"keyword":2525,"url":2526,"title":2525,"relevance":2527},"Google Play Contacts and Location Permission Changes 2027","https:\u002F\u002Fapp369.com\u002Fblog\u002Fgoogle-play-contacts-permissions-policy-2027\u002F",9,1792453253360]