[{"data":1,"prerenderedAt":2319},["ShallowReactive",2],{"\u002Fblog\u002Fgoogle-play-memory-dex-zero-tap-sign-in-requirements-2027\u002F":3,"\u002Fblog\u002Fgoogle-play-memory-dex-zero-tap-sign-in-requirements-2027\u002F-related":851,"\u002Fblog\u002Fgoogle-play-memory-dex-zero-tap-sign-in-requirements-2027\u002F-resources":2303},{"id":4,"title":5,"author":6,"body":10,"category":776,"createdAt":777,"description":778,"disclosure":779,"extension":780,"faq":781,"howTo":779,"lastVerified":779,"location":800,"meta":801,"navigation":807,"ogImage":779,"path":808,"primaryKeyword":809,"readingTime":810,"related":811,"seo":815,"sources":816,"stem":841,"tags":842,"takeaways":843,"updatedAt":777,"url":849,"__hash__":850},"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":8},"Simon Dziak",{"twitter":9},"@SzymonDziak",{"type":11,"value":12,"toc":765},"minimark",[13,21,24,30,35,131,134,138,141,156,161,178,183,306,311,420,423,428,469,477,481,505,508,512,518,523,537,542,562,580,583,628,636,640,654,657,663,669,673,736,739,742,749,753],[14,15,16,20],"p",{},[17,18,19],"strong",{},"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,22,23],{},"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,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-table","The dated table",[36,37,38,57],"table",{},[39,40,41],"thead",{},[42,43,44,48,51,54],"tr",{},[45,46,47],"th",{},"Date",[45,49,50],{},"What",[45,52,53],{},"Who",[45,55,56],{},"What to do",[58,59,60,75,89,103,117],"tbody",{},[42,61,62,66,69,72],{},[63,64,65],"td",{},"August 26, 2026",[63,67,68],{},"Google announces the requirements on the Android Developers Blog",[63,70,71],{},"All Play developers",[63,73,74],{},"Read the Help Center page and open Android vitals",[42,76,77,80,83,86],{},[63,78,79],{},"September 30, 2026",[63,81,82],{},"Cutoff for Block Store: apps that integrated it on or before this date to restore sign-in state are considered compliant",[63,84,85],{},"Apps with sign-in",[63,87,88],{},"If you already use Block Store for this, you are covered. Otherwise plan Restore Credentials",[42,90,91,94,97,100],{},[63,92,93],{},"February 2027 (Google gives the month, not a day.)",[63,95,96],{},"Reduced memory usage and DEX code optimization enforced",[63,98,99],{},"Apps and games. DEX rule only above 10 MB (apps) or 50 MB (games)",[63,101,102],{},"Compare your Android vitals with the thresholds below. Check DEX in the app bundle explorer",[42,104,105,108,111,114],{},[63,106,107],{},"April 2027 (Google gives the month, not a day.)",[63,109,110],{},"Zero-tap sign-in restoration enforced",[63,112,113],{},"Apps that support sign-in, mobile and tablet. Games out of scope for now",[63,115,116],{},"Implement Restore Credentials. Submit any regulatory exemption request in Play Console before this date",[42,118,119,122,125,128],{},[63,120,121],{},"Later this year (2026)",[63,123,124],{},"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",[63,126,127],{},"Everyone",[63,129,130],{},"Watch the Help Center page for changes",[14,132,133],{},"The August blog post says apps that miss the thresholds may see reduced app visibility and publishing capabilities on Google Play.",[31,135,137],{"id":136},"the-memory-and-bitmap-thresholds","The memory and bitmap thresholds",[14,139,140],{},"Google's page shows these metrics under the \"Memory\" heading in Android vitals and in the Google Play Developer Reporting API.",[142,143,144,151],"ul",{},[145,146,147,150],"li",{},[17,148,149],{},"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.",[145,152,153],{},[17,154,155],{},"Bitmap memory usage.",[14,157,158],{},[17,159,160],{},"How it is measured, as Google writes it:",[142,162,163,166,169,172,175],{},[145,164,165],{},"Play uses a rolling 28 days of data.",[145,167,168],{},"Samples come from opted-in users' devices.",[145,170,171],{},"Compliance is judged on the 90th percentile (P90). Measurement covers the app's lifecycle from foreground to background.",[145,173,174],{},"Only mobile and tablet form factors are in scope.",[145,176,177],{},"Play evaluates all app versions with available data.",[14,179,180],{},[17,181,182],{},"Apps, P90 by app state and device RAM tier:",[36,184,185,204],{},[39,186,187],{},[42,188,189,192,195,198,201],{},[45,190,191],{},"Physical RAM (Total Memory)",[45,193,194],{},"Foreground",[45,196,197],{},"User-perceived services",[45,199,200],{},"Background",[45,202,203],{},"Cached",[58,205,206,220,235,250,264,279,293],{},[42,207,208,211,214,216,218],{},[63,209,210],{},"0-4 GB (0-3200 MB)",[63,212,213],{},"none listed",[63,215,213],{},[63,217,213],{},[63,219,213],{},[42,221,222,225,228,231,233],{},[63,223,224],{},"4 GB (3200-4800 MB)",[63,226,227],{},"2 GB",[63,229,230],{},"1 GB",[63,232,230],{},[63,234,213],{},[42,236,237,240,243,246,248],{},[63,238,239],{},"6 GB (4800-6800 MB)",[63,241,242],{},"2.25 GB",[63,244,245],{},"1.25 GB",[63,247,245],{},[63,249,213],{},[42,251,252,255,257,260,262],{},[63,253,254],{},"8 GB (6800-9216 MB)",[63,256,242],{},[63,258,259],{},"1.5 GB",[63,261,259],{},[63,263,213],{},[42,265,266,269,272,275,277],{},[63,267,268],{},"12 GB (9216-14336 MB)",[63,270,271],{},"3.25 GB",[63,273,274],{},"1.75 GB",[63,276,274],{},[63,278,213],{},[42,280,281,284,287,289,291],{},[63,282,283],{},"16 GB (14336-18432 MB)",[63,285,286],{},"4.25 GB",[63,288,227],{},[63,290,227],{},[63,292,213],{},[42,294,295,298,300,302,304],{},[63,296,297],{},"16 GB+ (above 18432 MB)",[63,299,213],{},[63,301,213],{},[63,303,213],{},[63,305,213],{},[14,307,308],{},[17,309,310],{},"Games, P90:",[36,312,313,327],{},[39,314,315],{},[42,316,317,319,321,323,325],{},[45,318,191],{},[45,320,194],{},[45,322,197],{},[45,324,200],{},[45,326,203],{},[58,328,329,341,354,368,381,395,408],{},[42,330,331,333,335,337,339],{},[63,332,210],{},[63,334,213],{},[63,336,213],{},[63,338,213],{},[63,340,213],{},[42,342,343,345,347,350,352],{},[63,344,224],{},[63,346,242],{},[63,348,349],{},"2.0 GB",[63,351,349],{},[63,353,213],{},[42,355,356,358,361,364,366],{},[63,357,239],{},[63,359,360],{},"2.75 GB",[63,362,363],{},"2.5 GB",[63,365,363],{},[63,367,213],{},[42,369,370,372,375,377,379],{},[63,371,254],{},[63,373,374],{},"3.5 GB",[63,376,360],{},[63,378,360],{},[63,380,213],{},[42,382,383,385,388,391,393],{},[63,384,268],{},[63,386,387],{},"4 GB",[63,389,390],{},"3.2 GB",[63,392,390],{},[63,394,213],{},[42,396,397,399,402,404,406],{},[63,398,283],{},[63,400,401],{},"5 GB",[63,403,374],{},[63,405,374],{},[63,407,213],{},[42,409,410,412,414,416,418],{},[63,411,297],{},[63,413,213],{},[63,415,213],{},[63,417,213],{},[63,419,213],{},[14,421,422],{},"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,424,425],{},[17,426,427],{},"Bitmap memory, P90:",[36,429,430,440],{},[39,431,432],{},[42,433,434,437],{},[45,435,436],{},"App state",[45,438,439],{},"Threshold",[58,441,442,449,456,462],{},[42,443,444,446],{},[63,445,194],{},[63,447,448],{},"No threshold listed",[42,450,451,453],{},[63,452,197],{},[63,454,455],{},"Above 200 MB",[42,457,458,460],{},[63,459,200],{},[63,461,455],{},[42,463,464,466],{},[63,465,203],{},[63,467,468],{},"Above 400 MB",[14,470,471,472,476],{},"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 ",[473,474,475],"code",{},"onTrimMemory",". It also warns that changing an app's category to get different thresholds violates the Metadata policy.",[31,478,480],{"id":479},"the-dex-code-optimization-rule","The DEX code optimization rule",[142,482,483,490,493,496,499,502],{},[145,484,485,486,489],{},"Apps and games must reach at least ",[17,487,488],{},"25%"," for obfuscation, optimization and shrinking.",[145,491,492],{},"It applies only where DEX size is non-negligible: games with DEX over 50 MB, apps with DEX over 10 MB.",[145,494,495],{},"It applies across all form factors.",[145,497,498],{},"DEX size and optimization percentages are visible per bundle in the app bundle explorer.",[145,500,501],{},"Any tool can be used, such as R8 or another shrinker. Google strongly recommends R8.",[145,503,504],{},"Builds from CI\u002FCD or enterprise pipelines may differ slightly from the uploaded build, so Google says some minor differences are expected.",[14,506,507],{},"The blog post adds that Play Console shows DEX optimization insights for each uploaded bundle \"if the shrinking tool shares metadata\".",[31,509,511],{"id":510},"the-zero-tap-sign-in-requirement","The zero-tap sign-in requirement",[14,513,514,517],{},[17,515,516],{},"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,519,520],{},[17,521,522],{},"Exceptions, as written:",[142,524,525,528,531,534],{},[145,526,527],{},"Apps that integrated Block Store on or before September 30, 2026 to restore sign-in state are considered compliant.",[145,529,530],{},"Permanently private apps and enterprise device management apps are out of scope.",[145,532,533],{},"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.",[145,535,536],{},"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,538,539],{},[17,540,541],{},"Scope details from Google's FAQ:",[142,543,544,547,550,553,556,559],{},[145,545,546],{},"Apps without user accounts are unaffected.",[145,548,549],{},"Signed-out or guest users should launch unauthenticated on the new device.",[145,551,552],{},"Restore Credentials handles authentication only, not authorization scopes or MFA step-up.",[145,554,555],{},"If a user has several accounts, store the restore key for the current or last active account.",[145,557,558],{},"The restore key is deleted on uninstall. Apps must actively delete it on logout or account deletion.",[145,560,561],{},"Apps that don't meet the requirement will be notified by Google.",[14,563,564,567,568,571,572,575,576,579],{},[17,565,566],{},"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 ",[473,569,570],{},"E2eeUnavailableException"," is thrown. The implementation guide's text on handling it is internally inconsistent (it says to call with cloud backup ",[473,573,574],{},"true",", then shows a retry with ",[473,577,578],{},"false","), so check the current page before copying it.",[14,581,582],{},"From the implementation guide:",[142,584,585,592,607,618,621],{},[145,586,587,588,591],{},"Requirements: Android 9 (API level 28) and higher, Google Play services core version 24220000 or higher, and ",[473,589,590],{},"androidx.credentials"," 1.5.0 or higher.",[145,593,594,595,598,599,602,603,606],{},"On a new device, call it on first launch, or in ",[473,596,597],{},"onRestoreFinished"," of ",[473,600,601],{},"BackupAgent"," if you use app data backup. The page says not to use ",[473,604,605],{},"onRestore",".",[145,608,609,610,613,614,617],{},"Credential Manager does not delete keys for you. Call ",[473,611,612],{},"clearCredentialState()"," with ",[473,615,616],{},"TYPE_CLEAR_RESTORE_CREDENTIAL"," on logout, and also when the server invalidates the session.",[145,619,620],{},"Notifications are not automatically restored. If you use Firebase, fetch and send the FCM token to your backend again.",[145,622,623,624,627],{},"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 ",[473,625,626],{},"allowBackup"," is set in the manifest.",[14,629,630,631,606],{},"For the sign-in library background, see ",[632,633,635],"a",{"href":634},"\u002Fblog\u002Fgoogle-sign-in-android-deprecated-credential-manager-2026\u002F","my Credential Manager guide",[31,637,639],{"id":638},"what-this-means-for-a-flutter-app","What this means for a Flutter app",[14,641,642,645,646,649,650,653],{},[17,643,644],{},"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 ",[473,647,648],{},"--no-shrink",". The same page later says the ",[473,651,652],{},"--[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,655,656],{},"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,658,659,662],{},[17,660,661],{},"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,664,665,668],{},[17,666,667],{},"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,670,672],{"id":671},"how-to-check-your-app","How to check your app",[674,675,676,682,688,694,724,730],"ol",{},[145,677,678,681],{},[17,679,680],{},"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.",[145,683,684,687],{},[17,685,686],{},"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.",[145,689,690,693],{},[17,691,692],{},"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.",[145,695,696,699,700,703,704,707,708,711,712,715,716,719,720,723],{},[17,697,698],{},"R8 settings."," Android's docs say to set ",[473,701,702],{},"isMinifyEnabled = true"," and ",[473,705,706],{},"isShrinkResources = true"," in the release build, and use ",[473,709,710],{},"proguard-android-optimize.txt",", because support for ",[473,713,714],{},"proguard-android.txt"," was dropped (it includes ",[473,717,718],{},"-dontoptimize","). For AGP 9.3 and higher the docs use an ",[473,721,722],{},"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.",[145,725,726,729],{},[17,727,728],{},"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.",[145,731,732,735],{},[17,733,734],{},"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,737,738],{},"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,740,741],{},"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,743,744,745,606],{},"For every other dated Apple, Google Play and Firebase requirement in 2026 and 2027, see ",[632,746,748],{"href":747},"\u002Fblog\u002Fapp-store-google-play-deadlines-2026-2027\u002F","App Store and Google Play deadlines for 2026 and 2027",[31,750,752],{"id":751},"need-a-hand","Need a hand?",[14,754,755,756,760,761,606],{},"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 ",[632,757,759],{"href":758},"\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 ",[632,762,764],{"href":763},"\u002Fcontact\u002F","send me a short description",{"title":766,"searchDepth":767,"depth":767,"links":768},"",2,[769,770,771,772,773,774,775],{"id":33,"depth":767,"text":34},{"id":136,"depth":767,"text":137},{"id":479,"depth":767,"text":480},{"id":510,"depth":767,"text":511},{"id":638,"depth":767,"text":639},{"id":671,"depth":767,"text":672},{"id":751,"depth":767,"text":752},"AI & Technology","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.",null,"md",[782,785,788,791,794,797],{"question":783,"answer":784},"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":786,"answer":787},"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":789,"answer":790},"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":792,"answer":793},"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":795,"answer":796},"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":798,"answer":799},"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.","Boynton Beach, FL",{"readingTimeStats":802},{"text":803,"minutes":804,"time":805,"words":806},"10 min read",9.72,583200,1944,true,"\u002Fblog\u002Fgoogle-play-memory-dex-zero-tap-sign-in-requirements-2027","google play memory requirements 2027","11 min",[812,813,814],"google-play-target-api-36-android-16-requirement-2026","google-sign-in-android-deprecated-credential-manager-2026","google-play-16kb-page-size-flutter-android-2026",{"title":5,"description":778},[817,820,823,826,829,832,835,838],{"title":818,"url":819},"Play Console Help, Technical quality requirements","https:\u002F\u002Fsupport.google.com\u002Fgoogleplay\u002Fandroid-developer\u002Fanswer\u002F17492799",{"title":821,"url":822},"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":824,"url":825},"Android Developers, Restore Credentials","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Frestore-credentials",{"title":827,"url":828},"Android Developers, Implement Restore Credentials with Credential Manager","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Frestore-credentials-implementation",{"title":830,"url":831},"Android Developers, Enable app optimization","https:\u002F\u002Fdeveloper.android.com\u002Ftopic\u002Fperformance\u002Fapp-optimization\u002Fenable-app-optimization",{"title":833,"url":834},"Android Developers, Bitmap memory usage","https:\u002F\u002Fdeveloper.android.com\u002Ftopic\u002Fperformance\u002Fvitals\u002Fbitmap-memory-usage",{"title":836,"url":837},"Flutter docs, Build and release an Android app","https:\u002F\u002Fdocs.flutter.dev\u002Fdeployment\u002Fandroid",{"title":839,"url":840},"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",[844,845,846,847,848],"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",[852,1324,1906],{"id":853,"title":854,"author":855,"body":857,"category":776,"createdAt":1258,"description":1259,"disclosure":779,"extension":780,"faq":1260,"howTo":779,"lastVerified":779,"location":800,"meta":1276,"navigation":807,"ogImage":779,"path":1282,"primaryKeyword":1283,"readingTime":1284,"related":1285,"seo":1289,"sources":1290,"stem":1313,"tags":1314,"takeaways":1315,"updatedAt":1321,"url":1322,"__hash__":1323},"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":856},{"twitter":9},{"type":11,"value":858,"toc":1251},[859,869,872,877,881,921,931,934,954,958,967,1041,1048,1052,1071,1115,1118,1121,1183,1201,1205,1208,1238,1242,1244],[14,860,861,864,865,868],{},[17,862,863],{},"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 ",[473,866,867],{},"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,870,871],{},"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,873,874,876],{},[17,875,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,878,880],{"id":879},"the-requirement","The requirement",[36,882,883,893],{},[39,884,885],{},[42,886,887,890],{},[45,888,889],{},"App type",[45,891,892],{},"Must target, for new apps and updates from August 31, 2026",[58,894,895,905,913],{},[42,896,897,900],{},[63,898,899],{},"Phone and tablet apps",[63,901,902],{},[17,903,904],{},"Android 16 (API level 36)",[42,906,907,910],{},[63,908,909],{},"Wear OS and Android Automotive OS",[63,911,912],{},"Android 15 (API level 35)",[42,914,915,918],{},[63,916,917],{},"Android TV and Android XR",[63,919,920],{},"Android 14 (API level 34)",[14,922,923,924,930],{},"Source: ",[632,925,929],{"href":926,"rel":927},"https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Frequirements\u002Ftarget-sdk",[928],"nofollow","Google Play target API level requirement",", last updated October 16, 2026.",[14,932,933],{},"Google's page also says:",[142,935,936,942,948],{},[145,937,938,941],{},[17,939,940],{},"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.",[145,943,944,947],{},[17,945,946],{},"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.",[145,949,950,953],{},[17,951,952],{},"Exception:"," permanently private apps for one organization's internal use.",[31,955,957],{"id":956},"what-changes-when-you-target-api-36","What changes when you target API 36",[14,959,960,961,966],{},"Google's ",[632,962,965],{"href":963,"rel":964},"https:\u002F\u002Fdeveloper.android.com\u002Fabout\u002Fversions\u002F16\u002Fbehavior-changes-16",[928],"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,968,969,982],{},[39,970,971],{},[42,972,973,976,979],{},[45,974,975],{},"Change",[45,977,978],{},"What Google says",[45,980,981],{},"Temporary way out",[58,983,984,1001,1025],{},[42,985,986,991,998],{},[63,987,988],{},[17,989,990],{},"Edge-to-edge",[63,992,993,994,997],{},"Apps can no longer opt out of drawing behind the status and navigation bars. ",[473,995,996],{},"windowOptOutEdgeToEdgeEnforcement"," is deprecated and disabled",[63,999,1000],{},"None for API 36",[42,1002,1003,1008,1019],{},[63,1004,1005],{},[17,1006,1007],{},"Predictive back",[63,1009,1010,1011,1014,1015,1018],{},"Predictive back animations are on by default. ",[473,1012,1013],{},"onBackPressed"," is not called and ",[473,1016,1017],{},"KEYCODE_BACK"," is not dispatched",[63,1020,1021,1024],{},[473,1022,1023],{},"android:enableOnBackInvokedCallback=\"false\""," in the manifest",[42,1026,1027,1032,1035],{},[63,1028,1029],{},[17,1030,1031],{},"Large screens",[63,1033,1034],{},"On displays at least 600dp wide, orientation, resizability and aspect ratio restrictions are ignored, so the app fills the window",[63,1036,1037,1040],{},[473,1038,1039],{},"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,1042,1043,1044,1047],{},"The large-screen rule doesn't apply to games (based on ",[473,1045,1046],{},"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,1049,1051],{"id":1050},"flutter-apps","Flutter apps",[14,1053,1054,1055,1058,1059,1062,1063,1066,1067,1070],{},"Flutter's project template sets the target from the Flutter version: ",[473,1056,1057],{},"targetSdk = flutter.targetSdkVersion"," in ",[473,1060,1061],{},"android\u002Fapp\u002Fbuild.gradle.kts"," in Flutter 3.35's template, and ",[473,1064,1065],{},"targetSdkVersion flutter.targetSdkVersion"," in older Groovy templates such as Flutter 3.10's. Flutter's ",[473,1068,1069],{},"FlutterExtension"," source sets it to:",[36,1072,1073,1086],{},[39,1074,1075],{},[42,1076,1077,1080],{},[45,1078,1079],{},"Flutter version",[45,1081,1082,1083],{},"Default ",[473,1084,1085],{},"flutter.targetSdkVersion",[58,1087,1088,1096,1103],{},[42,1089,1090,1093],{},[63,1091,1092],{},"3.29 (February 12, 2025)",[63,1094,1095],{},"35",[42,1097,1098,1101],{},[63,1099,1100],{},"3.32 (May 20, 2025)",[63,1102,1095],{},[42,1104,1105,1110],{},[63,1106,1107],{},[17,1108,1109],{},"3.35 (August 14, 2025) and later",[63,1111,1112],{},[17,1113,1114],{},"36",[14,1116,1117],{},"Release dates from Flutter's release archive.",[14,1119,1120],{},"What that means for a Flutter app:",[674,1122,1123,1146,1160,1173],{},[145,1124,1125,1135,1136,1138,1139,1142,1143,1145],{},[17,1126,1127,1128,1131,1132,606],{},"Check ",[473,1129,1130],{},"android\u002Fapp\u002Fbuild.gradle"," or ",[473,1133,1134],{},"build.gradle.kts"," If it uses ",[473,1137,1085],{},", Flutter 3.35 or later gives you 36. If it has a hard-coded number, change it to 36 yourself (",[473,1140,1141],{},"targetSdk = 36"," in a ",[473,1144,1134],{}," file).",[145,1147,1148,1151,1152,1155,1156,1159],{},[17,1149,1150],{},"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 ",[473,1153,1154],{},"SafeArea"," or padding from ",[473,1157,1158],{},"MediaQuery",", including bottom sheets and screens with a bottom bar.",[145,1161,1162,1165,1166,1168,1169,1172],{},[17,1163,1164],{},"Back navigation."," If the app or a plugin overrides ",[473,1167,1013],{}," in Android code, that override won't be called on Android 16. My advice: use ",[473,1170,1171],{},"PopScope"," on the Flutter side for back handling, and check plugins that intercept back.",[145,1174,1175,1178,1179,1182],{},[17,1176,1177],{},"Tablets."," If the app locks orientation with ",[473,1180,1181],{},"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,1184,1185,1186,1190,1191,1195,1196,1200],{},"If an older app can't move to Flutter 3.35 because the Android build breaks first, the ",[632,1187,1189],{"href":1188},"\u002Fblog\u002Fflutter-deleted-android-v1-embedding-build-failed-2026\u002F","v1 embedding fix"," and the ",[632,1192,1194],{"href":1193},"\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 ",[632,1197,1199],{"href":1198},"\u002Fblog\u002Fplay-billing-library-7-deprecated-update-to-8-2026\u002F","Billing Library 8 deadline"," is due at the same time.",[31,1202,1204],{"id":1203},"what-to-do-now","What to do now",[14,1206,1207],{},"This section is my advice, not Google's.",[674,1209,1210,1220,1226,1232],{},[145,1211,1212,1215,1216,1219],{},[17,1213,1214],{},"Check the target your last release used."," Look at ",[473,1217,1218],{},"targetSdk"," in the build file for that release, or the app bundle details in Play Console.",[145,1221,1222,1225],{},[17,1223,1224],{},"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.",[145,1227,1228,1231],{},[17,1229,1230],{},"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.",[145,1233,1234,1237],{},[17,1235,1236],{},"Ship to a closed testing track first."," Catch layout and back-gesture issues before your users do.",[14,1239,744,1240,606],{},[632,1241,748],{"href":747},[31,1243,752],{"id":751},[14,1245,1246,1247,760,1249,606],{},"If an app can't ship an update because of the target API requirement, or something broke after raising it, the ",[632,1248,759],{"href":758},[632,1250,764],{"href":763},{"title":766,"searchDepth":767,"depth":767,"links":1252},[1253,1254,1255,1256,1257],{"id":879,"depth":767,"text":880},{"id":956,"depth":767,"text":957},{"id":1050,"depth":767,"text":1051},{"id":1203,"depth":767,"text":1204},{"id":751,"depth":767,"text":752},"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.",[1261,1264,1267,1270,1273],{"question":1262,"answer":1263},"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":1265,"answer":1266},"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":1268,"answer":1269},"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":1271,"answer":1272},"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":1274,"answer":1275},"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":1277},{"text":1278,"minutes":1279,"time":1280,"words":1281},"5 min read",4.33,259800,866,"\u002Fblog\u002Fgoogle-play-target-api-36-android-16-requirement-2026","target api level 36","7 min",[1286,1287,1288],"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":854,"description":1259},[1291,1293,1295,1298,1301,1304,1307,1310],{"title":1292,"url":926},"Android Developers, Meet Google Play's target API level requirement (last updated October 16, 2026)",{"title":1294,"url":963},"Android Developers, Behavior changes: apps targeting Android 16 or higher (last updated October 16, 2026)",{"title":1296,"url":1297},"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":1299,"url":1300},"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":1302,"url":1303},"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":1305,"url":1306},"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":1308,"url":1309},"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":1311,"url":1312},"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",[1316,1317,1318,1319,1320],"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":1325,"title":1326,"author":1327,"body":1329,"category":776,"createdAt":1832,"description":1833,"disclosure":779,"extension":780,"faq":1834,"howTo":779,"lastVerified":779,"location":800,"meta":1853,"navigation":807,"ogImage":779,"path":1858,"primaryKeyword":1859,"readingTime":1860,"related":1861,"seo":1865,"sources":1866,"stem":1896,"tags":1897,"takeaways":1898,"updatedAt":1832,"url":1904,"__hash__":1905},"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":1328},{"twitter":9},{"type":11,"value":1330,"toc":1822},[1331,1352,1355,1359,1363,1453,1456,1461,1464,1498,1502,1511,1628,1632,1642,1709,1712,1716,1807,1809],[14,1332,1333,1336,1337,703,1340,1343,1344,1347,1348,1351],{},[17,1334,1335],{},"Google Sign-In for Android is deprecated, and Sign in with Google now runs through Credential Manager."," If your app still uses ",[473,1338,1339],{},"GoogleSignInClient",[473,1341,1342],{},"GoogleSignInOptions"," from ",[473,1345,1346],{},"play-services-auth",", 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 ",[473,1349,1350],{},"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,1353,1354],{},"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,1356,1357,29],{},[17,1358,28],{},[31,1360,1362],{"id":1361},"what-changed-and-when","What changed, and when",[36,1364,1365,1378],{},[39,1366,1367],{},[42,1368,1369,1372,1375],{},[45,1370,1371],{},"When",[45,1373,1374],{},"What happened",[45,1376,1377],{},"Source",[58,1379,1380,1395,1408,1421,1438],{},[42,1381,1382,1385,1388],{},[63,1383,1384],{},"September 11, 2024",[63,1386,1387],{},"Google announces that Credential Manager replaces its legacy Android sign-in APIs, and publishes a removal timeline",[63,1389,1390],{},[632,1391,1394],{"href":1392,"rel":1393},"https:\u002F\u002Fandroid-developers.googleblog.com\u002F2024\u002F09\u002Fstreamlining-android-authentication-credential-manager-replaces-legacy-apis.html",[928],"Android Developers Blog",[42,1396,1397,1400,1403],{},[63,1398,1399],{},"Q1 2025",[63,1401,1402],{},"Smart Lock for Passwords: listed as fully shut down",[63,1404,1405],{},[632,1406,1394],{"href":1392,"rel":1407},[928],[42,1409,1410,1413,1416],{},[63,1411,1412],{},"H1 2025",[63,1414,1415],{},"Credential Saving API and the Sign in with Google button API: listed for removal",[63,1417,1418],{},[632,1419,1394],{"href":1392,"rel":1420},[928],[42,1422,1423,1428,1433],{},[63,1424,1425],{},[17,1426,1427],{},"H2 2025",[63,1429,1430],{},[17,1431,1432],{},"One Tap and Google Sign-In for Android: listed for removal",[63,1434,1435],{},[632,1436,1394],{"href":1392,"rel":1437},[928],[42,1439,1440,1443,1446],{},[63,1441,1442],{},"Now",[63,1444,1445],{},"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",[63,1447,1448],{},[632,1449,1452],{"href":1450,"rel":1451},"https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Flegacy-gsi-migration",[928],"Android Developers",[14,1454,1455],{},"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.",[1457,1458,1460],"h3",{"id":1459},"what-the-old-addresses-do-today","What the old addresses do today",[14,1462,1463],{},"Checked on October 18, 2026:",[142,1465,1466,1476,1482,1492],{},[145,1467,1468,1471,1472,1475],{},[17,1469,1470],{},"developers.google.com\u002Fidentity\u002Fsign-in\u002Fandroid\u002Fstart-integrating",", the old setup guide, ",[17,1473,1474],{},"redirects"," to the Android Credential Manager overview.",[145,1477,1478,1481],{},[17,1479,1480],{},"developers.google.com\u002Fidentity\u002Fsign-in\u002Fandroid\u002Fsign-in"," redirects there too.",[145,1483,1484,1487,1488,1491],{},[17,1485,1486],{},"developers.google.com\u002Fidentity\u002Fsign-in\u002Fandroid\u002Flegacy-gsi-migration"," returned ",[17,1489,1490],{},"404",". The live migration page is on developer.android.com, linked in the sources.",[145,1493,1494,1497],{},[17,1495,1496],{},"developers.google.com\u002Fidentity\u002Fone-tap\u002Fandroid\u002Foverview"," redirects to a page that says One Tap for Android is deprecated.",[31,1499,1501],{"id":1500},"moving-a-native-android-app-to-credential-manager","Moving a native Android app to Credential Manager",[14,1503,1504,1505,1510],{},"The steps follow Google's ",[632,1506,1509],{"href":1507,"rel":1508},"https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Fcredential-manager-siwg-implementation",[928],"Sign in with Google implementation guide",":",[674,1512,1513,1536,1546,1567,1588,1594,1604,1617],{},[145,1514,1515,1518,1519,1522,1523,703,1526,1529,1530,1535],{},[17,1516,1517],{},"Add the dependencies."," Add ",[473,1520,1521],{},"androidx.credentials:credentials",", ",[473,1524,1525],{},"androidx.credentials:credentials-play-services-auth",[473,1527,1528],{},"com.google.android.libraries.identity.googleid:googleid",". Check the ",[632,1531,1534],{"href":1532,"rel":1533},"https:\u002F\u002Fdeveloper.android.com\u002Fjetpack\u002Fandroidx\u002Freleases\u002Fcredentials",[928],"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.",[145,1537,1538,1541,1542,1545],{},[17,1539,1540],{},"Use your web client ID."," Google's guide passes the ",[17,1543,1544],{},"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.",[145,1547,1548,1551,1552,1555,1556,1559,1560,1563,1564,606],{},[17,1549,1550],{},"Build the request."," For the bottom-sheet flow, use ",[473,1553,1554],{},"GetGoogleIdOption"," with your web client ID. Google's guide first sets ",[473,1557,1558],{},"setFilterByAuthorizedAccounts(true)"," to offer accounts that already signed in, with ",[473,1561,1562],{},"setAutoSelectEnabled(true)"," for returning users. For a \"Sign in with Google\" button, use ",[473,1565,1566],{},"GetSignInWithGoogleOption",[145,1568,1569,1572,1573,1576,1577,1580,1581,1584,1585,606],{},[17,1570,1571],{},"Call Credential Manager."," Create it with ",[473,1574,1575],{},"CredentialManager.create(context)"," and call ",[473,1578,1579],{},"getCredential"," with the request. When the result is a ",[473,1582,1583],{},"GoogleIdTokenCredential",", read it with ",[473,1586,1587],{},"GoogleIdTokenCredential.createFrom(credential.data)",[145,1589,1590,1593],{},[17,1591,1592],{},"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.",[145,1595,1596,1599,1600,1603],{},[17,1597,1598],{},"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 ",[473,1601,1602],{},"AuthorizationClient"," API when the user needs that feature, not at sign-in.",[145,1605,1606,1609,1610,1613,1614,606],{},[17,1607,1608],{},"Replace silent sign-in."," Google's migration page says to use a request with ",[473,1611,1612],{},"filterByAuthorizedAccounts"," set to true and auto-select on, in place of ",[473,1615,1616],{},"silentSignIn",[145,1618,1619,1622,1623,1522,1625,1627],{},[17,1620,1621],{},"Remove the old code."," Once the new path works, remove ",[473,1624,1339],{},[473,1626,1342],{}," and any One Tap code, so an old error can't be mistaken for a new one.",[31,1629,1631],{"id":1630},"moving-a-flutter-app-to-google_sign_in-7","Moving a Flutter app to google_sign_in 7",[14,1633,1634,1635,1638,1639,1641],{},"On Android, ",[473,1636,1637],{},"google_sign_in_android"," 7.0.0 switched to Credential Manager. Its changelog says it removed the deprecated Google Sign In for Android SDK. ",[473,1640,1350],{}," 7.0.0 is a breaking release, and its changelog lists the main changes:",[142,1643,1644,1660,1674,1691],{},[145,1645,1646,1652,1653,1656,1657,606],{},[17,1647,1648,1651],{},[473,1649,1650],{},"GoogleSignIn"," is a singleton."," Use ",[473,1654,1655],{},"GoogleSignIn.instance"," instead of creating your own ",[473,1658,1659],{},"GoogleSignIn(...)",[145,1661,1662,1665,1666,1669,1670,1673],{},[17,1663,1664],{},"Initialize first."," Call and await ",[473,1667,1668],{},"initialize",", passing ",[473,1671,1672],{},"serverClientId"," where needed, before any other method.",[145,1675,1676,1682,1683,1686,1687,1690],{},[17,1677,1678,1679,606],{},"Sign-in is ",[473,1680,1681],{},"authenticate()"," Check ",[473,1684,1685],{},"supportsAuthenticate()"," first, because not every platform supports it. ",[473,1688,1689],{},"attemptLightweightAuthentication()"," covers returning users.",[145,1692,1693,1696,1697,1700,1701,1704,1705,1708],{},[17,1694,1695],{},"Authentication and authorization are separate."," Access tokens and server auth codes come from separate calls through the account's ",[473,1698,1699],{},"authorizationClient",", with ",[473,1702,1703],{},"authorizationForScopes"," to check and ",[473,1706,1707],{},"authorizeScopes"," to ask, from a user interaction.",[14,1710,1711],{},"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,1713,1715],{"id":1714},"when-sign-in-breaks-after-the-move","When sign-in breaks after the move",[36,1717,1718,1731],{},[39,1719,1720],{},[42,1721,1722,1725,1728],{},[45,1723,1724],{},"What you see",[45,1726,1727],{},"What it usually means",[45,1729,1730],{},"What to check",[58,1732,1733,1757,1768,1779,1793],{},[42,1734,1735,1738,1741],{},[63,1736,1737],{},"\"serverClientId must be provided on Android\"",[63,1739,1740],{},"The plugin can't find your web OAuth client",[63,1742,1743,1746,1747,1750,1751,1754,1755],{},[473,1744,1745],{},"google-services.json"," needs an ",[473,1748,1749],{},"oauth_client"," entry with ",[473,1752,1753],{},"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 ",[473,1756,1668],{},[42,1758,1759,1762,1765],{},[63,1760,1761],{},"Sign-in reports \"canceled\" when the user didn't cancel",[63,1763,1764],{},"Sometimes a configuration error",[63,1766,1767],{},"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,1769,1770,1773,1776],{},[63,1771,1772],{},"Works in debug, fails in release or from Play",[63,1774,1775],{},"The release signing key's SHA isn't registered",[63,1777,1778],{},"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,1780,1781,1784,1787],{},[63,1782,1783],{},"Sign-in works, but API calls fail with no token",[63,1785,1786],{},"Authentication and authorization are separate steps now",[63,1788,1789,1790,1792],{},"Request them with AuthorizationClient (",[473,1791,1707],{}," in Flutter)",[42,1794,1795,1798,1801],{},[63,1796,1797],{},"Package name mismatch",[63,1799,1800],{},"The Android client in Google Cloud has a different package name",[63,1802,1803,1804],{},"Match the package name in Google Cloud or Firebase to ",[473,1805,1806],{},"applicationId",[31,1808,752],{"id":751},[14,1810,1811,1812,1814,1815,1819,1820,606],{},"If sign-in still fails after the move, or it works on your phone but not for your users, the ",[632,1813,759],{"href":758}," 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 ",[632,1816,1818],{"href":1817},"\u002Fblog\u002Fsafetynet-shut-down-play-integrity-app-check-2026\u002F","SafetyNet is gone: moving to Play Integrity and App Check",", or ",[632,1821,764],{"href":763},{"title":766,"searchDepth":767,"depth":767,"links":1823},[1824,1828,1829,1830,1831],{"id":1361,"depth":767,"text":1362,"children":1825},[1826],{"id":1459,"depth":1827,"text":1460},3,{"id":1500,"depth":767,"text":1501},{"id":1630,"depth":767,"text":1631},{"id":1714,"depth":767,"text":1715},{"id":751,"depth":767,"text":752},"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.",[1835,1838,1841,1844,1847,1850],{"question":1836,"answer":1837},"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":1839,"answer":1840},"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":1842,"answer":1843},"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":1845,"answer":1846},"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":1848,"answer":1849},"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":1851,"answer":1852},"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":1854},{"text":1278,"minutes":1855,"time":1856,"words":1857},5.005,300300,1001,"\u002Fblog\u002Fgoogle-sign-in-android-deprecated-credential-manager-2026","google sign-in android deprecated","8 min",[1862,1863,1864],"safetynet-shut-down-play-integrity-app-check-2026","firebase-deprecations-shutdown-dates-2026","how-to-debug-a-flutter-firebase-bug-2026",{"title":1326,"description":1833},[1867,1869,1871,1874,1876,1879,1882,1884,1887,1890,1893],{"title":1868,"url":1392},"Android Developers Blog, \"Streamlining Android authentication: Credential Manager replaces legacy APIs\" (September 11, 2024)",{"title":1870,"url":1450},"Android Developers, about the migration from legacy Google Sign-In",{"title":1872,"url":1873},"Android Developers, about Sign in with Google","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Fcredential-manager-siwg",{"title":1875,"url":1507},"Android Developers, implement Sign in with Google",{"title":1877,"url":1878},"Android Developers, about Credential Manager","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fcredential-manager",{"title":1880,"url":1881},"Android Developers, One Tap for Android (deprecated)","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Flegacy\u002Fone-tap\u002F",{"title":1883,"url":1532},"Android Developers, androidx.credentials releases",{"title":1885,"url":1886},"Firebase, authenticate with Google on Android","https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fauth\u002Fandroid\u002Fgoogle-signin",{"title":1888,"url":1889},"pub.dev, google_sign_in_android (Android setup and troubleshooting)","https:\u002F\u002Fpub.dev\u002Fpackages\u002Fgoogle_sign_in_android",{"title":1891,"url":1892},"pub.dev, google_sign_in changelog","https:\u002F\u002Fpub.dev\u002Fpackages\u002Fgoogle_sign_in\u002Fchangelog",{"title":1894,"url":1895},"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",[1899,1900,1901,1902,1903],"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":1907,"title":1908,"author":1909,"body":1911,"category":776,"createdAt":2251,"description":2252,"disclosure":779,"extension":780,"faq":2253,"howTo":779,"lastVerified":779,"location":800,"meta":2269,"navigation":807,"ogImage":779,"path":2274,"primaryKeyword":2275,"readingTime":1284,"related":2276,"seo":2278,"sources":2279,"stem":2293,"tags":2294,"takeaways":2295,"updatedAt":2251,"url":2301,"__hash__":2302},"blog\u002Fblog\u002Fgoogle-play-16kb-page-size-flutter-android-2026.md","Google Play 16 KB Page Size: Fixing Flutter and Android Apps",{"name":7,"social":1910},{"twitter":9},{"type":11,"value":1912,"toc":2242},[1913,1919,1922,1926,1930,1978,1981,1984,1988,2007,2011,2014,2056,2060,2070,2128,2130,2166,2169,2172,2213,2225,2229,2231,2238],[14,1914,1915,1918],{},[17,1916,1917],{},"If Play Console warns that your app doesn't support 16 KB memory page sizes, the fix is usually a newer Android Gradle Plugin and NDK, plus updated native dependencies."," Google requires apps targeting Android 15 and higher to support 16 KB pages on 64-bit devices, and says that starting February 1, 2027, updates without it can't be released. In my experience every Flutter Android app ships native code, so Flutter apps are in scope, and Flutter 3.38 is the first version that defaults to the NDK Google's fix needs.",[14,1920,1921],{},"The facts below come from Google's page-size guide, Google's May 2025 announcement, Flutter's 3.38 release post and Flutter's source code, as listed in the sources. I checked each one on October 18, 2026.",[14,1923,1924,876],{},[17,1925,28],{},[31,1927,1929],{"id":1928},"the-requirement-and-the-dates","The requirement and the dates",[36,1931,1932,1943],{},[39,1933,1934],{},[42,1935,1936,1938,1941],{},[45,1937,47],{},[45,1939,1940],{},"What Google said",[45,1942,1377],{},[58,1944,1945,1959],{},[42,1946,1947,1950,1953],{},[63,1948,1949],{},"May 2025",[63,1951,1952],{},"From November 1, 2025, new apps and updates targeting Android 15+ must support 16 KB page sizes",[63,1954,1955],{},[632,1956,1394],{"href":1957,"rel":1958},"https:\u002F\u002Fandroid-developers.googleblog.com\u002F2025\u002F05\u002Fprepare-play-apps-for-devices-with-16kb-page-size.html",[928],[42,1960,1961,1966,1971],{},[63,1962,1963],{},[17,1964,1965],{},"As of October 16, 2026",[63,1967,1968],{},[17,1969,1970],{},"Apps targeting Android 15+ must support 16 KB pages on 64-bit devices. From February 1, 2027, updates that don't can't be released",[63,1972,1973],{},[632,1974,1977],{"href":1975,"rel":1976},"https:\u002F\u002Fdeveloper.android.com\u002Fguide\u002Fpractices\u002Fpage-sizes",[928],"Google page-size guide",[14,1979,1980],{},"The guide, last updated October 16, 2026, is the newer source, so I'd plan around February 1, 2027 and check Play Console for any warning on your own app.",[14,1982,1983],{},"Google's guide also explains why: devices with more memory are moving to 16 KB pages, and without recompiling, apps won't work on 16 KB devices in future Android releases. On a 16 KB device today, an app with 4 KB-aligned .so files that are stored uncompressed in the APK can run in a backcompat mode that shows a warning when it first launches.",[1457,1985,1987],{"id":1986},"who-is-affected","Who is affected",[14,1989,1990,1991,1994,1995,1998,1999,2002,2003,2006],{},"Only apps with native code: ",[473,1992,1993],{},".so"," files in the APK's ",[473,1996,1997],{},"lib"," folder. That includes apps that use native code through an SDK or library, not just apps you wrote C or C++ for. In my experience, every Flutter Android release build has native libraries in that folder: ",[473,2000,2001],{},"libflutter.so"," for the engine and ",[473,2004,2005],{},"libapp.so"," for your compiled Dart code. Analyze APK, below, shows them.",[31,2008,2010],{"id":2009},"check-your-app","Check your app",[14,2012,2013],{},"Google's guide lists three checks:",[674,2015,2016,2025,2033],{},[145,2017,2018,2021,2022,2024],{},[17,2019,2020],{},"Analyze APK in Android Studio."," Open Build > Analyze APK, pick the APK and look in the ",[473,2023,1997],{}," folder. The Alignment column shows warnings for files with alignment problems.",[145,2026,2027,2032],{},[17,2028,2029],{},[473,2030,2031],{},"check_elf_alignment.sh"," on Linux or macOS. Run it on the APK. It reports whether each library is aligned.",[145,2034,2035,2040,2041],{},[17,2036,2037],{},[473,2038,2039],{},"zipalign"," for zip alignment. Google's example uses the copy in build-tools 35.0.0:",[2042,2043,2047],"pre",{"className":2044,"code":2045,"language":2046,"meta":766,"style":766},"language-console shiki shiki-themes github-light github-dark","zipalign -v -c -P 16 4 APK_NAME.apk\n","console",[473,2048,2049],{"__ignoreMap":766},[2050,2051,2054],"span",{"class":2052,"line":2053},"line",1,[2050,2055,2045],{},[31,2057,2059],{"id":2058},"fix-it","Fix it",[14,2061,2062,2063,703,2066,2069],{},"Google's shortcut: if you update to ",[17,2064,2065],{},"AGP 8.5.1 or higher",[17,2067,2068],{},"NDK r28 or higher",", and your prebuilt dependencies are 16 KB compatible, the app is 16 KB compatible by default.",[36,2071,2072,2082],{},[39,2073,2074],{},[42,2075,2076,2079],{},[45,2077,2078],{},"If you're on",[45,2080,2081],{},"Google's guidance",[58,2083,2084,2096,2103,2117],{},[42,2085,2086,2089],{},[63,2087,2088],{},"AGP below 8.5.1",[63,2090,2091,2092,2095],{},"Upgrade to 8.5.1 or higher. Google notes that with AGP 8.3 to 8.5, an app can seem to work but fail to install when Play builds it from a bundle. If you can't upgrade, Google gives a ",[473,2093,2094],{},"useLegacyPackaging"," setting",[42,2097,2098,2100],{},[63,2099,2068],{},[63,2101,2102],{},"Compiles 16 KB-aligned by default",[42,2104,2105,2108],{},[63,2106,2107],{},"NDK r27 or lower",[63,2109,2110,2111,703,2114],{},"Add the linker flags ",[473,2112,2113],{},"-Wl,-z,max-page-size=16384",[473,2115,2116],{},"-Wl,-z,common-page-size=16384",[42,2118,2119,2125],{},[63,2120,2121,2122,2124],{},"Prebuilt ",[473,2123,1993],{}," files from an SDK",[63,2126,2127],{},"Get a 16 KB-compatible version from the vendor, or recompile them the same way",[31,2129,1051],{"id":1050},[36,2131,2132,2144],{},[39,2133,2134],{},[42,2135,2136,2138],{},[45,2137,1079],{},[45,2139,1082,2140,2143],{},[473,2141,2142],{},"ndkVersion"," in Flutter's source",[58,2145,2146,2154],{},[42,2147,2148,2151],{},[63,2149,2150],{},"3.35 (August 14, 2025)",[63,2152,2153],{},"27.0.12077973 (NDK r27)",[42,2155,2156,2161],{},[63,2157,2158],{},[17,2159,2160],{},"3.38 (November 12, 2025)",[63,2162,2163],{},[17,2164,2165],{},"28.2.13676358 (NDK r28)",[14,2167,2168],{},"Flutter's 3.38 post calls upgrading \"essential preparation\" for the 16 KB requirement and says NDK r28 is the minimum for the alignment.",[14,2170,2171],{},"What to do in a Flutter app:",[674,2173,2174,2185,2198,2207],{},[145,2175,2176,2179,2180,1058,2182,2184],{},[17,2177,2178],{},"Upgrade Flutter to 3.38 or later",", or set ",[473,2181,2142],{},[473,2183,1130],{}," to an r28 version if you can't upgrade yet. My advice: upgrading is safer, because Flutter's 3.38 post lists a set of Gradle, AGP and Kotlin versions that Flutter tested together.",[145,2186,2187,1058,2190,2193,2194,2197],{},[17,2188,2189],{},"Check the AGP version",[473,2191,2192],{},"android\u002Fsettings.gradle"," (or the ",[473,2195,2196],{},"buildscript"," block on older projects). It needs to be 8.5.1 or higher.",[145,2199,2200,2203,2204,2206],{},[17,2201,2202],{},"Update plugins that ship native libraries."," My advice: after building, run Analyze APK and look at every ",[473,2205,1993],{}," file. A plugin with an old prebuilt library is the usual reason an app still fails after the Flutter upgrade.",[145,2208,2209,2212],{},[17,2210,2211],{},"Test on a 16 KB emulator."," Google's guide covers Android 15 emulator images with 16 KB page sizes. My advice: install a build there and make sure it starts without the compatibility warning.",[14,2214,2215,2216,1190,2218,2220,2221,606],{},"If the Flutter upgrade breaks the Android build first, see the ",[632,2217,1189],{"href":1188},[632,2219,1194],{"href":1193},". Google Play also requires new apps and updates to target API 36 since August 31, 2026: see ",[632,2222,2224],{"href":2223},"\u002Fblog\u002Fgoogle-play-target-api-36-android-16-requirement-2026\u002F","the target API 36 guide",[14,2226,744,2227,606],{},[632,2228,748],{"href":747},[31,2230,752],{"id":751},[14,2232,2233,2234,760,2236,606],{},"If Play Console flags your app for 16 KB page sizes, or an update fails after the fix, the ",[632,2235,759],{"href":758},[632,2237,764],{"href":763},[2239,2240,2241],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":766,"searchDepth":767,"depth":767,"links":2243},[2244,2247,2248,2249,2250],{"id":1928,"depth":767,"text":1929,"children":2245},[2246],{"id":1986,"depth":1827,"text":1987},{"id":2009,"depth":767,"text":2010},{"id":2058,"depth":767,"text":2059},{"id":1050,"depth":767,"text":1051},{"id":751,"depth":767,"text":752},"2026-10-18T23:58:00.000Z","Google Play requires apps targeting Android 15 and higher to support 16 KB memory page sizes on 64-bit devices, and Google says that from February 1, 2027 updates without it can't be released. How to check an APK, the AGP and NDK versions that fix it, and why Flutter 3.38 matters, from Google's and Flutter's docs checked October 18, 2026.",[2254,2257,2260,2263,2266],{"question":2255,"answer":2256},"What is the Google Play 16 KB page size requirement?","Google says all apps targeting Android 15 (API level 35) and higher must support 16 KB memory page sizes on 64-bit devices on Google Play, and that starting February 1, 2027, app updates that don't support 16 KB page sizes can't be released.",{"question":2258,"answer":2259},"Does my Flutter app need to change for 16 KB pages?","In my experience Flutter apps ship native libraries, so they are in scope. Flutter's 3.38 release notes say 3.38 moved the default NDK to r28, the minimum Flutter names for 16 KB alignment. On an older Flutter, upgrade, or set a newer ndkVersion, and check every plugin that ships its own native libraries.",{"question":2261,"answer":2262},"How do I check whether my APK supports 16 KB pages?","Google lists three ways: Android Studio's Analyze APK shows alignment warnings for .so files in the lib folder, the check_elf_alignment.sh script checks ELF alignment on Linux or macOS, and zipalign -v -c -P 16 4 checks zip alignment.",{"question":2264,"answer":2265},"Which AGP and NDK versions do I need?","Google says AGP 8.5.1 or higher and NDK r28 or higher make an app 16 KB compatible by default, as long as prebuilt dependencies are 16 KB compatible too. With NDK r27 or lower, Google gives linker flags to set a 16 KB max page size.",{"question":2267,"answer":2268},"What happened to the November 1, 2025 date?","Google's May 2025 Android Developers Blog post said that from November 1, 2025, new apps and updates targeting Android 15+ must support 16 KB pages. Google's page-size guide, last updated October 16, 2026, says that starting February 1, 2027, updates without 16 KB support can't be released. Check Play Console for the dates that apply to your app.",{"readingTimeStats":2270},{"text":1278,"minutes":2271,"time":2272,"words":2273},4.155,249300,831,"\u002Fblog\u002Fgoogle-play-16kb-page-size-flutter-android-2026","16 kb page size",[812,1286,2277],"flutter-uiscene-migration-xcode-27-app-wont-launch-2026",{"title":1908,"description":2252},[2280,2282,2284,2287,2289,2292],{"title":2281,"url":1975},"Android Developers, Support 16 KB page sizes (last updated October 16, 2026)",{"title":2283,"url":1957},"Android Developers Blog, \"Prepare your apps for Google Play's 16 KB page size compatibility requirement\" (May 2025)",{"title":2285,"url":2286},"Flutter blog, What's new in Flutter 3.38","https:\u002F\u002Fflutter.dev\u002Fblog\u002Fwhats-new-in-flutter-3-38",{"title":2288,"url":1303},"Flutter on GitHub, FlutterExtension.kt at 3.35.0 (default ndkVersion)",{"title":2290,"url":2291},"Flutter on GitHub, FlutterExtension.kt at 3.38.0 (default ndkVersion)","https:\u002F\u002Fgithub.com\u002Fflutter\u002Fflutter\u002Fblob\u002F3.38.0\u002Fpackages\u002Fflutter_tools\u002Fgradle\u002Fsrc\u002Fmain\u002Fkotlin\u002FFlutterExtension.kt",{"title":1311,"url":1312},"blog\u002Fgoogle-play-16kb-page-size-flutter-android-2026","16 kb page size, google play 16 kb page size requirement, flutter 16kb page size, android 15 16 kb, ndk r28 16 kb alignment, agp 8.5.1 16 kb, check_elf_alignment, zipalign -P 16, play console 16 kb warning, 16 kb backcompat mode",[2296,2297,2298,2299,2300],"Google Play requires apps targeting Android 15 (API level 35) and higher to support 16 KB memory page sizes on 64-bit devices. Google says that starting February 1, 2027, updates that don't support 16 KB page sizes can't be released.","Only apps with native code are affected: .so files inside the APK. In my experience every Flutter Android release build ships native libraries, so Flutter apps are in scope.","Google says apps built with AGP 8.5.1 or higher and NDK r28 or higher, with 16 KB-compatible prebuilt dependencies, are 16 KB compatible by default.","Flutter 3.38 (November 12, 2025) moved the default NDK to r28, which Flutter calls the minimum for 16 KB alignment. Flutter 3.35 still defaulted to NDK r27.","On a 16 KB device, an app with 4 KB-aligned .so files that are stored uncompressed in the APK can run in a backcompat mode that shows a warning on first launch. Google says that without recompiling, apps won't work on 16 KB devices in future Android releases.","https:\u002F\u002Fapp369.com\u002Fblog\u002Fgoogle-play-16kb-page-size-flutter-android-2026\u002F","Q4yP_WaO0s4z2zw5eaIjBxdZxv8DjpsUFupe3q9g5rg",[2304,2306,2308,2310,2314,2317],{"keyword":5,"url":849,"title":5,"relevance":2305},75,{"keyword":1326,"url":1904,"title":1326,"relevance":2307},18,{"keyword":1908,"url":2301,"title":1908,"relevance":2309},13,{"keyword":2311,"url":2312,"title":2311,"relevance":2313},"App Store and Google Play Deadlines for 2026 and 2027","https:\u002F\u002Fapp369.com\u002Fblog\u002Fapp-store-google-play-deadlines-2026-2027\u002F",9,{"keyword":2315,"url":2316,"title":2315,"relevance":2313},"Flutter \"Deleted Android v1 Embedding\" Build Error: The Fix","https:\u002F\u002Fapp369.com\u002Fblog\u002Fflutter-deleted-android-v1-embedding-build-failed-2026\u002F",{"keyword":854,"url":1322,"title":854,"relevance":2318},8,1792447589865]