[{"data":1,"prerenderedAt":1914},["ShallowReactive",2],{"\u002Fblog\u002Fandroid-things-shut-down-device-app-alternatives-2026\u002F":3,"\u002Fblog\u002Fandroid-things-shut-down-device-app-alternatives-2026\u002F-related":452,"\u002Fblog\u002Fandroid-things-shut-down-device-app-alternatives-2026\u002F-resources":1896},{"id":4,"title":5,"author":6,"body":10,"category":385,"createdAt":386,"description":387,"disclosure":388,"extension":389,"faq":390,"howTo":388,"lastVerified":388,"location":406,"meta":407,"navigation":413,"ogImage":388,"path":414,"primaryKeyword":415,"readingTime":416,"related":417,"seo":421,"sources":422,"stem":442,"tags":443,"takeaways":444,"updatedAt":386,"url":450,"__hash__":451},"blog\u002Fblog\u002Fandroid-things-shut-down-device-app-alternatives-2026.md","Android Things Shut Down: What to Run Your Device App On in 2026",{"name":7,"social":8},"Simon Dziak",{"twitter":9},"@SzymonDziak",{"type":11,"value":12,"toc":370},"minimark",[13,21,24,30,35,148,151,156,159,194,198,225,229,298,302,317,321,336,340,349,353],[14,15,16,20],"p",{},[17,18,19],"strong",{},"Android Things is gone: Google said it would turn down its console on January 5, 2022, and the developer boards stopped getting security patches in August 2019."," A device still running it keeps working only as long as nothing around it changes, and it can't be updated through Google any more. I'm not aware of a direct replacement from Google. In 2026 the usual paths are a managed Android device in dedicated-device mode, Linux on the board with your own app, or a smart home platform such as Matter.",[14,22,23],{},"If you landed here from an old link to developer.android.com\u002Fthings or an Android Things sample, this is what happened and what to do next. The dates come from Google's 2019 announcement and an archived copy of the Android Things FAQ, as listed in the sources. I checked the old addresses myself on October 18, 2026.",[14,25,26,29],{},[17,27,28],{},"Disclosure:"," App369 is my studio. I build Flutter apps, including one that sends commands to GPS vehicle alarms, and the last section mentions what I sell. No company named here paid for a mention.",[31,32,34],"h2",{"id":33},"what-happened-to-android-things-and-when","What happened to Android Things, and when",[36,37,38,54],"table",{},[39,40,41],"thead",{},[42,43,44,48,51],"tr",{},[45,46,47],"th",{},"Date",[45,49,50],{},"What happened",[45,52,53],{},"Source",[55,56,57,75,88,103,116,133],"tbody",{},[42,58,59,63,66],{},[60,61,62],"td",{},"February 12, 2019",[60,64,65],{},"Google refocuses Android Things on OEM partners building smart speakers and smart displays. Production hardware from NXP, Qualcomm and MediaTek won't be offered through the public platform",[60,67,68],{},[69,70,74],"a",{"href":71,"rel":72},"https:\u002F\u002Fandroid-developers.googleblog.com\u002F2019\u002F02\u002Fan-update-on-android-things.html",[73],"nofollow","Android Developers Blog",[42,76,77,80,83],{},[60,78,79],{},"2019 onward",[60,81,82],{},"The public platform keeps the NXP i.MX7D and Raspberry Pi 3B, limited to 100 devices for non-commercial use",[60,84,85],{},[69,86,74],{"href":71,"rel":87},[73],[42,89,90,93,96],{},[60,91,92],{},"August 2019",[60,94,95],{},"Monthly security patches for the developer boards end",[60,97,98],{},[69,99,102],{"href":100,"rel":101},"https:\u002F\u002Fweb.archive.org\u002Fweb\u002F20211022033208\u002Fhttps:\u002F\u002Fdeveloper.android.com\u002Fthings\u002Ffaq",[73],"Android Things FAQ (archived)",[42,104,105,108,111],{},[60,106,107],{},"January 5, 2021",[60,109,110],{},"The Android Things Console stops accepting new projects",[60,112,113],{},[69,114,102],{"href":100,"rel":115},[73],[42,117,118,123,128],{},[60,119,120],{},[17,121,122],{},"January 5, 2022",[60,124,125],{},[17,126,127],{},"The date Google set for turning the console down. It said project data, build configurations and factory images would be permanently deleted",[60,129,130],{},[69,131,102],{"href":100,"rel":132},[73],[42,134,135,138,141],{},[60,136,137],{},"August 16, 2023",[60,139,140],{},"Cloud IoT Core, which the 2019 post recommended for commercial IoT products, is retired",[60,142,143],{},[69,144,147],{"href":145,"rel":146},"https:\u002F\u002Fweb.archive.org\u002Fweb\u002F20230119085529\u002Fhttps:\u002F\u002Fcloud.google.com\u002Fiot\u002Fdocs\u002Frelease-notes",[73],"Cloud IoT Core release notes (archived)",[14,149,150],{},"The FAQ also said Google had no plans to support newer Raspberry Pi models such as the 3B+ and 4. So the public developer platform stayed on those two boards.",[152,153,155],"h3",{"id":154},"what-the-old-addresses-do-today","What the old addresses do today",[14,157,158],{},"Checked on October 18, 2026:",[160,161,162,181,188],"ul",{},[163,164,165,168,169,172,173,176,177,180],"li",{},[17,166,167],{},"developer.android.com\u002Fthings"," returned ",[17,170,171],{},"404",", and so did ",[17,174,175],{},"\u002Fthings\u002Ffaq"," and ",[17,178,179],{},"\u002Fthings\u002Fhardware",".",[163,182,183,184,187],{},"The ",[17,185,186],{},"androidthings"," samples on GitHub are still readable but archived. For example, sample-simplepio was archived with its last push on May 26, 2021.",[163,189,190,193],{},[17,191,192],{},"cloud.google.com\u002Fiot-core"," redirects to a Google Cloud architecture page about connected-device platforms.",[31,195,197],{"id":196},"if-you-still-have-devices-running-android-things","If you still have devices running Android Things",[199,200,201,207,213,219],"ol",{},[163,202,203,206],{},[17,204,205],{},"Find out what you can't rebuild."," The console's factory images, APKs and build settings were deleted in 2022. Look on your own machines, CI systems and backups for the last image and APK, and keep a copy.",[163,208,209,212],{},[17,210,211],{},"Treat developer-board devices as unpatched."," They haven't had a security patch since August 2019. Keep them off public networks and away from anything that holds customer data until they're replaced.",[163,214,215,218],{},[17,216,217],{},"List what the device actually does."," Write down the screens, the sensors and pins it reads, the cloud services it calls, and how it gets updates today. That list is the specification for the replacement, whichever path you choose.",[163,220,221,224],{},[17,222,223],{},"Check what it talks to."," If it sent data through Cloud IoT Core, that path closed on August 16, 2023, so check what the device does now. If it relied on that path, it will have stopped working.",[31,226,228],{"id":227},"what-to-run-a-device-app-on-in-2026","What to run a device app on in 2026",[36,230,231,244],{},[39,232,233],{},[42,234,235,238,241],{},[45,236,237],{},"Your device",[45,239,240],{},"Usually the better path",[45,242,243],{},"Why",[55,245,246,259,272,285],{},[42,247,248,251,256],{},[60,249,250],{},"A screen people tap: a kiosk, check-in, signage or a control panel",[60,252,253],{},[17,254,255],{},"An Android tablet or board in dedicated-device mode",[60,257,258],{},"Android supports dedicated devices for kiosks, digital signage and hospitality check-in, with lock task mode to keep users in your app. My advice: check who supplies OS updates for the model you pick, and for how long",[42,260,261,264,269],{},[60,262,263],{},"A custom board with sensors or pins and a simple screen",[60,265,266],{},[17,267,268],{},"Linux on the board, with your app on top",[60,270,271],{},"You choose the board and the OS, and can keep both updated yourself. A Flutter app can run there through an embedder such as flutter-pi",[42,273,274,277,282],{},[60,275,276],{},"A smart home product people control from their phone",[60,278,279],{},[17,280,281],{},"A smart home platform such as Matter",[60,283,284],{},"Google's Home developer docs cover building Matter devices that work with Google Home, which may save you building the whole stack yourself",[42,286,287,290,295],{},[60,288,289],{},"No screen, just sensors reporting to the cloud",[60,291,292],{},[17,293,294],{},"Linux or a microcontroller, plus your own backend",[60,296,297],{},"You need a small, updatable device and a server that receives its data. Pick the cloud side after the device, not before",[152,299,301],{"id":300},"an-android-device-in-dedicated-device-mode","An Android device in dedicated-device mode",[14,303,304,305,310,311,316],{},"Google's ",[69,306,309],{"href":307,"rel":308},"https:\u002F\u002Fdeveloper.android.com\u002Fwork\u002Fdpc\u002Fdedicated-devices",[73],"dedicated devices guide"," lists kiosks, digital signage and hospitality check-in as customer-facing uses, and inventory and field service as employee-facing ones. The device is fully managed by an admin component. ",[69,312,315],{"href":313,"rel":314},"https:\u002F\u002Fdeveloper.android.com\u002Fwork\u002Fdpc\u002Fdedicated-devices\u002Flock-task-mode",[73],"Lock task mode"," keeps people inside the apps you allow, and only apps allowlisted by a device policy controller can run in it. In my view, this is the closest fit for a device that runs one app on one screen that people can't leave. The app itself can be a normal Android or Flutter app.",[152,318,320],{"id":319},"linux-on-the-board","Linux on the board",[14,322,323,324,329,330,335],{},"If you need a specific board, GPIO pins or a custom enclosure, Linux is the route I'd look at first. ",[69,325,328],{"href":326,"rel":327},"https:\u002F\u002Fdocs.flutter.dev\u002Fembedded",[73],"Flutter's embedded page"," says you can embed the Flutter engine in devices such as smart displays and thermostats, and that it is stable but low-level and not for beginners. ",[69,331,334],{"href":332,"rel":333},"https:\u002F\u002Fgithub.com\u002Fardera\u002Fflutter-pi",[73],"flutter-pi"," is a community embedder for Raspberry Pi that runs without X11 or Wayland, so the board can boot to the command line and start your app from there. My advice: plan how you'll update these devices in the field before you ship them, because there's no console doing it for you.",[152,337,339],{"id":338},"a-smart-home-platform","A smart home platform",[14,341,342,343,348],{},"If the product is a light, lock, sensor or similar device for the home, I'd look at ",[69,344,347],{"href":345,"rel":346},"https:\u002F\u002Fdevelopers.home.google.com\u002Fmatter",[73],"Matter"," first. Google's Home developer docs include codelabs on integrating a physical device with Matter and controlling it from Google Home, so check whether that covers your product before building a custom app and cloud.",[31,350,352],{"id":351},"need-a-hand","Need a hand?",[14,354,355,356,360,361,365,366,180],{},"If you're replacing an Android Things device and need the app rebuilt, for a dedicated Android device or as a Flutter app on Linux, ",[69,357,359],{"href":358},"\u002Fcontact\u002F","send me a short description"," of what the device does today and how many are in the field, and I'll tell you which path I'd take. If a phone app that talks to your devices has one specific bug, the ",[69,362,364],{"href":363},"\u002Ffixed-price\u002Fflutter-firebase-bug-fix\u002F","App Fix Ticket"," handles 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 ",[69,367,369],{"href":368},"\u002Fblog\u002Fgoogle-sign-in-android-deprecated-credential-manager-2026\u002F","Google Sign-In for Android is deprecated",{"title":371,"searchDepth":372,"depth":372,"links":373},"",2,[374,378,379,384],{"id":33,"depth":372,"text":34,"children":375},[376],{"id":154,"depth":377,"text":155},3,{"id":196,"depth":372,"text":197},{"id":227,"depth":372,"text":228,"children":380},[381,382,383],{"id":300,"depth":377,"text":301},{"id":319,"depth":377,"text":320},{"id":338,"depth":377,"text":339},{"id":351,"depth":372,"text":352},"AI & Technology","2026-10-18T13:00:00.000Z","Google refocused Android Things on OEM partners in 2019, stopped new console projects on January 5, 2021 and turned the console down on January 5, 2022. What that means for a device still running it, and what to run a device app on in 2026, from Google's archived FAQ and current docs.",null,"md",[391,394,397,400,403],{"question":392,"answer":393},"Is Android Things still supported?","No. Google stopped new Android Things Console projects on January 5, 2021 and said it would turn the console down on January 5, 2022. Monthly security patches for the developer boards ended in August 2019, and the Android Things documentation now returns 404.",{"question":395,"answer":396},"Do Android Things devices still work?","A device that is already flashed can keep running whatever image it has, but it gets no security patches and can no longer receive updates through the console, which Google said it would turn down on January 5, 2022. Treat it as unsupported, and keep it off networks where that is a risk.",{"question":398,"answer":399},"What replaced Android Things?","Google has not named a direct replacement. It refocused it on OEM partners making smart speakers and smart displays, and pointed commercial projects to Cloud IoT Core, which was retired on August 16, 2023. In my view, the two realistic routes are a managed Android device in dedicated-device mode, or Linux on the board with your own app.",{"question":401,"answer":402},"Can I still download my Android Things factory images?","Not from Google. The archived FAQ said access to factory images and APK files in the console would be unavailable after January 5, 2022, and that all project data would be permanently deleted. If you didn't download them before then, look for copies on your own machines or devices.",{"question":404,"answer":405},"Can I run a Flutter app on a Raspberry Pi instead?","Yes, through a custom embedder. Flutter's docs say embedding the engine is stable but uses a low-level API and isn't for beginners. flutter-pi is a community embedder for Raspberry Pi that runs without X11 or Wayland, so the board can boot to the command line and start your app from there.","Boynton Beach, FL",{"readingTimeStats":408},{"text":409,"minutes":410,"time":411,"words":412},"6 min read",5.365,321900,1073,true,"\u002Fblog\u002Fandroid-things-shut-down-device-app-alternatives-2026","android things shut down","7 min",[418,419,420],"google-sign-in-android-deprecated-credential-manager-2026","safetynet-shut-down-play-integrity-app-check-2026","jcenter-bintray-shut-down-fix-android-flutter-builds-2026",{"title":5,"description":387},[423,425,427,429,431,433,435,437,439],{"title":424,"url":71},"Android Developers Blog, \"An Update on Android Things\" (February 12, 2019)",{"title":426,"url":100},"Android Things FAQ (Wayback Machine copy, October 22, 2021)",{"title":428,"url":145},"Google Cloud, Cloud IoT Core release notes (Wayback Machine copy, January 19, 2023)",{"title":430,"url":307},"Android Developers, dedicated devices overview",{"title":432,"url":313},"Android Developers, lock task mode",{"title":434,"url":326},"Flutter, embedded support for Flutter",{"title":436,"url":332},"flutter-pi on GitHub",{"title":438,"url":345},"Google Home Developers, Matter",{"title":440,"url":441},"Google for Developers, Internet of Things solutions","https:\u002F\u002Fdevelopers.google.com\u002Fiot","blog\u002Fandroid-things-shut-down-device-app-alternatives-2026","android things shut down, android things alternative, android things deprecated, android things console, android things raspberry pi, replace android things, kiosk app android, dedicated device android, flutter embedded linux, cloud iot core retired",[445,446,447,448,449],"Google refocused Android Things on OEM partners building smart speakers and smart displays on February 12, 2019. The public developer platform kept only the NXP i.MX7D and Raspberry Pi 3B, limited to 100 devices for non-commercial use.","The Android Things Console stopped accepting new projects on January 5, 2021, and Google said it would turn the console down on January 5, 2022. It said all project data, including build configurations and factory images, would be permanently deleted.","Monthly security patches for the developer boards ended in August 2019, so any device still on a developer board running Android Things has gone years without them.","Google's 2019 post pointed commercial projects to Cloud IoT Core, which Google retired on August 16, 2023. I know of no like-for-like Google replacement for either.","On October 18, 2026, developer.android.com\u002Fthings and its FAQ returned 404. Realistic paths today: a managed Android device in dedicated-device mode, Linux on the board with your app on top, or a smart home platform such as Matter.","https:\u002F\u002Fapp369.com\u002Fblog\u002Fandroid-things-shut-down-device-app-alternatives-2026\u002F","kIiEYRlfcT_Wux2t5NT-xl5k7Ziw41EstCsMKMwebxU",[453,1027,1352],{"id":454,"title":455,"author":456,"body":458,"category":385,"createdAt":953,"description":954,"disclosure":388,"extension":389,"faq":955,"howTo":388,"lastVerified":388,"location":406,"meta":974,"navigation":413,"ogImage":388,"path":980,"primaryKeyword":981,"readingTime":982,"related":983,"seo":986,"sources":987,"stem":1017,"tags":1018,"takeaways":1019,"updatedAt":953,"url":1025,"__hash__":1026},"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":457},{"twitter":9},{"type":11,"value":459,"toc":944},[460,482,485,490,494,581,584,586,588,620,624,633,750,754,764,831,834,838,929,931],[14,461,462,465,466,176,470,473,474,477,478,481],{},[17,463,464],{},"Google Sign-In for Android is deprecated, and Sign in with Google now runs through Credential Manager."," If your app still uses ",[467,468,469],"code",{},"GoogleSignInClient",[467,471,472],{},"GoogleSignInOptions"," from ",[467,475,476],{},"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 ",[467,479,480],{},"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,483,484],{},"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,486,487,489],{},[17,488,28],{}," 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,491,493],{"id":492},"what-changed-and-when","What changed, and when",[36,495,496,507],{},[39,497,498],{},[42,499,500,503,505],{},[45,501,502],{},"When",[45,504,50],{},[45,506,53],{},[55,508,509,523,536,549,566],{},[42,510,511,514,517],{},[60,512,513],{},"September 11, 2024",[60,515,516],{},"Google announces that Credential Manager replaces its legacy Android sign-in APIs, and publishes a removal timeline",[60,518,519],{},[69,520,74],{"href":521,"rel":522},"https:\u002F\u002Fandroid-developers.googleblog.com\u002F2024\u002F09\u002Fstreamlining-android-authentication-credential-manager-replaces-legacy-apis.html",[73],[42,524,525,528,531],{},[60,526,527],{},"Q1 2025",[60,529,530],{},"Smart Lock for Passwords: listed as fully shut down",[60,532,533],{},[69,534,74],{"href":521,"rel":535},[73],[42,537,538,541,544],{},[60,539,540],{},"H1 2025",[60,542,543],{},"Credential Saving API and the Sign in with Google button API: listed for removal",[60,545,546],{},[69,547,74],{"href":521,"rel":548},[73],[42,550,551,556,561],{},[60,552,553],{},[17,554,555],{},"H2 2025",[60,557,558],{},[17,559,560],{},"One Tap and Google Sign-In for Android: listed for removal",[60,562,563],{},[69,564,74],{"href":521,"rel":565},[73],[42,567,568,571,574],{},[60,569,570],{},"Now",[60,572,573],{},"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,575,576],{},[69,577,580],{"href":578,"rel":579},"https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Flegacy-gsi-migration",[73],"Android Developers",[14,582,583],{},"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.",[152,585,155],{"id":154},[14,587,158],{},[160,589,590,600,606,614],{},[163,591,592,595,596,599],{},[17,593,594],{},"developers.google.com\u002Fidentity\u002Fsign-in\u002Fandroid\u002Fstart-integrating",", the old setup guide, ",[17,597,598],{},"redirects"," to the Android Credential Manager overview.",[163,601,602,605],{},[17,603,604],{},"developers.google.com\u002Fidentity\u002Fsign-in\u002Fandroid\u002Fsign-in"," redirects there too.",[163,607,608,168,611,613],{},[17,609,610],{},"developers.google.com\u002Fidentity\u002Fsign-in\u002Fandroid\u002Flegacy-gsi-migration",[17,612,171],{},". The live migration page is on developer.android.com, linked in the sources.",[163,615,616,619],{},[17,617,618],{},"developers.google.com\u002Fidentity\u002Fone-tap\u002Fandroid\u002Foverview"," redirects to a page that says One Tap for Android is deprecated.",[31,621,623],{"id":622},"moving-a-native-android-app-to-credential-manager","Moving a native Android app to Credential Manager",[14,625,626,627,632],{},"The steps follow Google's ",[69,628,631],{"href":629,"rel":630},"https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Fcredential-manager-siwg-implementation",[73],"Sign in with Google implementation guide",":",[199,634,635,658,668,689,710,716,726,739],{},[163,636,637,640,641,644,645,176,648,651,652,657],{},[17,638,639],{},"Add the dependencies."," Add ",[467,642,643],{},"androidx.credentials:credentials",", ",[467,646,647],{},"androidx.credentials:credentials-play-services-auth",[467,649,650],{},"com.google.android.libraries.identity.googleid:googleid",". Check the ",[69,653,656],{"href":654,"rel":655},"https:\u002F\u002Fdeveloper.android.com\u002Fjetpack\u002Fandroidx\u002Freleases\u002Fcredentials",[73],"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.",[163,659,660,663,664,667],{},[17,661,662],{},"Use your web client ID."," Google's guide passes the ",[17,665,666],{},"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.",[163,669,670,673,674,677,678,681,682,685,686,180],{},[17,671,672],{},"Build the request."," For the bottom-sheet flow, use ",[467,675,676],{},"GetGoogleIdOption"," with your web client ID. Google's guide first sets ",[467,679,680],{},"setFilterByAuthorizedAccounts(true)"," to offer accounts that already signed in, with ",[467,683,684],{},"setAutoSelectEnabled(true)"," for returning users. For a \"Sign in with Google\" button, use ",[467,687,688],{},"GetSignInWithGoogleOption",[163,690,691,694,695,698,699,702,703,706,707,180],{},[17,692,693],{},"Call Credential Manager."," Create it with ",[467,696,697],{},"CredentialManager.create(context)"," and call ",[467,700,701],{},"getCredential"," with the request. When the result is a ",[467,704,705],{},"GoogleIdTokenCredential",", read it with ",[467,708,709],{},"GoogleIdTokenCredential.createFrom(credential.data)",[163,711,712,715],{},[17,713,714],{},"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.",[163,717,718,721,722,725],{},[17,719,720],{},"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 ",[467,723,724],{},"AuthorizationClient"," API when the user needs that feature, not at sign-in.",[163,727,728,731,732,735,736,180],{},[17,729,730],{},"Replace silent sign-in."," Google's migration page says to use a request with ",[467,733,734],{},"filterByAuthorizedAccounts"," set to true and auto-select on, in place of ",[467,737,738],{},"silentSignIn",[163,740,741,744,745,644,747,749],{},[17,742,743],{},"Remove the old code."," Once the new path works, remove ",[467,746,469],{},[467,748,472],{}," and any One Tap code, so an old error can't be mistaken for a new one.",[31,751,753],{"id":752},"moving-a-flutter-app-to-google_sign_in-7","Moving a Flutter app to google_sign_in 7",[14,755,756,757,760,761,763],{},"On Android, ",[467,758,759],{},"google_sign_in_android"," 7.0.0 switched to Credential Manager. Its changelog says it removed the deprecated Google Sign In for Android SDK. ",[467,762,480],{}," 7.0.0 is a breaking release, and its changelog lists the main changes:",[160,765,766,782,796,813],{},[163,767,768,774,775,778,779,180],{},[17,769,770,773],{},[467,771,772],{},"GoogleSignIn"," is a singleton."," Use ",[467,776,777],{},"GoogleSignIn.instance"," instead of creating your own ",[467,780,781],{},"GoogleSignIn(...)",[163,783,784,787,788,791,792,795],{},[17,785,786],{},"Initialize first."," Call and await ",[467,789,790],{},"initialize",", passing ",[467,793,794],{},"serverClientId"," where needed, before any other method.",[163,797,798,804,805,808,809,812],{},[17,799,800,801,180],{},"Sign-in is ",[467,802,803],{},"authenticate()"," Check ",[467,806,807],{},"supportsAuthenticate()"," first, because not every platform supports it. ",[467,810,811],{},"attemptLightweightAuthentication()"," covers returning users.",[163,814,815,818,819,822,823,826,827,830],{},[17,816,817],{},"Authentication and authorization are separate."," Access tokens and server auth codes come from separate calls through the account's ",[467,820,821],{},"authorizationClient",", with ",[467,824,825],{},"authorizationForScopes"," to check and ",[467,828,829],{},"authorizeScopes"," to ask, from a user interaction.",[14,832,833],{},"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,835,837],{"id":836},"when-sign-in-breaks-after-the-move","When sign-in breaks after the move",[36,839,840,853],{},[39,841,842],{},[42,843,844,847,850],{},[45,845,846],{},"What you see",[45,848,849],{},"What it usually means",[45,851,852],{},"What to check",[55,854,855,879,890,901,915],{},[42,856,857,860,863],{},[60,858,859],{},"\"serverClientId must be provided on Android\"",[60,861,862],{},"The plugin can't find your web OAuth client",[60,864,865,868,869,872,873,876,877],{},[467,866,867],{},"google-services.json"," needs an ",[467,870,871],{},"oauth_client"," entry with ",[467,874,875],{},"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 ",[467,878,790],{},[42,880,881,884,887],{},[60,882,883],{},"Sign-in reports \"canceled\" when the user didn't cancel",[60,885,886],{},"Sometimes a configuration error",[60,888,889],{},"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,891,892,895,898],{},[60,893,894],{},"Works in debug, fails in release or from Play",[60,896,897],{},"The release signing key's SHA isn't registered",[60,899,900],{},"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,902,903,906,909],{},[60,904,905],{},"Sign-in works, but API calls fail with no token",[60,907,908],{},"Authentication and authorization are separate steps now",[60,910,911,912,914],{},"Request them with AuthorizationClient (",[467,913,829],{}," in Flutter)",[42,916,917,920,923],{},[60,918,919],{},"Package name mismatch",[60,921,922],{},"The Android client in Google Cloud has a different package name",[60,924,925,926],{},"Match the package name in Google Cloud or Firebase to ",[467,927,928],{},"applicationId",[31,930,352],{"id":351},[14,932,933,934,936,937,941,942,180],{},"If sign-in still fails after the move, or it works on your phone but not for your users, the ",[69,935,364],{"href":363}," 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 ",[69,938,940],{"href":939},"\u002Fblog\u002Fsafetynet-shut-down-play-integrity-app-check-2026\u002F","SafetyNet is gone: moving to Play Integrity and App Check",", or ",[69,943,359],{"href":358},{"title":371,"searchDepth":372,"depth":372,"links":945},[946,949,950,951,952],{"id":492,"depth":372,"text":493,"children":947},[948],{"id":154,"depth":377,"text":155},{"id":622,"depth":372,"text":623},{"id":752,"depth":372,"text":753},{"id":836,"depth":372,"text":837},{"id":351,"depth":372,"text":352},"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.",[956,959,962,965,968,971],{"question":957,"answer":958},"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":960,"answer":961},"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":963,"answer":964},"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":966,"answer":967},"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":969,"answer":970},"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":972,"answer":973},"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":975},{"text":976,"minutes":977,"time":978,"words":979},"5 min read",5.005,300300,1001,"\u002Fblog\u002Fgoogle-sign-in-android-deprecated-credential-manager-2026","google sign-in android deprecated","8 min",[419,984,985],"firebase-deprecations-shutdown-dates-2026","how-to-debug-a-flutter-firebase-bug-2026",{"title":455,"description":954},[988,990,992,995,997,1000,1003,1005,1008,1011,1014],{"title":989,"url":521},"Android Developers Blog, \"Streamlining Android authentication: Credential Manager replaces legacy APIs\" (September 11, 2024)",{"title":991,"url":578},"Android Developers, about the migration from legacy Google Sign-In",{"title":993,"url":994},"Android Developers, about Sign in with Google","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Fcredential-manager-siwg",{"title":996,"url":629},"Android Developers, implement Sign in with Google",{"title":998,"url":999},"Android Developers, about Credential Manager","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fcredential-manager",{"title":1001,"url":1002},"Android Developers, One Tap for Android (deprecated)","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Flegacy\u002Fone-tap\u002F",{"title":1004,"url":654},"Android Developers, androidx.credentials releases",{"title":1006,"url":1007},"Firebase, authenticate with Google on Android","https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fauth\u002Fandroid\u002Fgoogle-signin",{"title":1009,"url":1010},"pub.dev, google_sign_in_android (Android setup and troubleshooting)","https:\u002F\u002Fpub.dev\u002Fpackages\u002Fgoogle_sign_in_android",{"title":1012,"url":1013},"pub.dev, google_sign_in changelog","https:\u002F\u002Fpub.dev\u002Fpackages\u002Fgoogle_sign_in\u002Fchangelog",{"title":1015,"url":1016},"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",[1020,1021,1022,1023,1024],"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":1028,"title":1029,"author":1030,"body":1032,"category":385,"createdAt":1296,"description":1297,"disclosure":388,"extension":389,"faq":1298,"howTo":388,"lastVerified":388,"location":406,"meta":1317,"navigation":413,"ogImage":388,"path":1322,"primaryKeyword":1323,"readingTime":416,"related":1324,"seo":1327,"sources":1328,"stem":1342,"tags":1343,"takeaways":1344,"updatedAt":1296,"url":1350,"__hash__":1351},"blog\u002Fblog\u002Fsafetynet-shut-down-play-integrity-app-check-2026.md","SafetyNet Is Gone: Moving to Play Integrity and App Check",{"name":7,"social":1031},{"twitter":9},{"type":11,"value":1033,"toc":1288},[1034,1040,1043,1047,1051,1110,1114,1125,1128,1148,1151,1155,1158,1202,1206,1214,1274,1276],[14,1035,1036,1039],{},[17,1037,1038],{},"SafetyNet Attestation is gone: Google turned it down fully in January 2025, so any app or backend that still relies on it gets an error on every check."," Replace it with the Play Integrity API. If you used SafetyNet through Firebase App Check, switch App Check to its Play Integrity provider. For App Check users the code change is small, and most of the work is setup in Play Console and the Firebase console.",[14,1041,1042],{},"If you landed here from an old link to Google's SafetyNet attestation guide, that address now redirects to the deprecation timeline. Dates and behavior come from Android Developers and Firebase documentation, as listed in the sources. I checked each page on October 18, 2026.",[14,1044,1045,489],{},[17,1046,28],{},[31,1048,1050],{"id":1049},"what-happened-to-safetynet-and-when","What happened to SafetyNet, and when",[36,1052,1053,1063],{},[39,1054,1055],{},[42,1056,1057,1059,1061],{},[45,1058,502],{},[45,1060,50],{},[45,1062,53],{},[55,1064,1065,1079,1096],{},[42,1066,1067,1070,1073],{},[60,1068,1069],{},"2022",[60,1071,1072],{},"Google deprecates the SafetyNet Attestation API and recommends the Play Integrity API",[60,1074,1075],{},[69,1076,580],{"href":1077,"rel":1078},"https:\u002F\u002Fdeveloper.android.com\u002Fprivacy-and-security\u002Fsafetynet\u002Fdeprecation-timeline",[73],[42,1080,1081,1086,1091],{},[60,1082,1083],{},[17,1084,1085],{},"January 2025",[60,1087,1088],{},[17,1089,1090],{},"SafetyNet Attestation is fully turned down",[60,1092,1093],{},[69,1094,580],{"href":1077,"rel":1095},[73],[42,1097,1098,1100,1103],{},[60,1099,570],{},[60,1101,1102],{},"Firebase App Check's SafetyNet provider is gone; Firebase says to use another provider, such as Play Integrity",[60,1104,1105],{},[69,1106,1109],{"href":1107,"rel":1108},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fapp-check\u002Fandroid\u002Fsafetynet-provider",[73],"Firebase",[152,1111,1113],{"id":1112},"what-failing-apps-see","What failing apps see",[14,1115,1116,1117,1120,1121,1124],{},"Google says that if you call the SafetyNet Attestation API now, the attest call always fails: it returns an ",[467,1118,1119],{},"ApiException"," with status code 7, ",[467,1122,1123],{},"NETWORK_ERROR",". That code is misleading, because it isn't a network problem on your side and retrying won't fix it.",[14,1126,1127],{},"What that means for users depends on what you did with the result:",[160,1129,1130,1136,1142],{},[163,1131,1132,1135],{},[17,1133,1134],{},"If your app blocked users when attestation failed",", users on that version are blocked from whatever the check gated.",[163,1137,1138,1141],{},[17,1139,1140],{},"If your backend required a SafetyNet result",", requests from that version are rejected.",[163,1143,1144,1147],{},[17,1145,1146],{},"If the check only logged the result",", nothing visible broke, but you've had no integrity signal since the turndown.",[14,1149,1150],{},"Google's advice for the first two cases: once you've released a version that uses Play Integrity, tell users to update.",[31,1152,1154],{"id":1153},"moving-from-safetynet-to-play-integrity","Moving from SafetyNet to Play Integrity",[14,1156,1157],{},"Google says the two APIs are conceptually similar, so if you already had an anti-abuse strategy built on SafetyNet, the migration is straightforward.",[199,1159,1160,1166,1178,1184,1190,1196],{},[163,1161,1162,1165],{},[17,1163,1164],{},"Set up Play Integrity in Play Console."," Open your app, go to the App integrity page, and set up the Play Integrity API there, including linking a Google Cloud project.",[163,1167,1168,1171,1172,1177],{},[17,1169,1170],{},"Choose the request type."," Play Integrity has standard requests and classic requests. Read Google's ",[69,1173,1176],{"href":1174,"rel":1175},"https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Fintegrity\u002Fstandard",[73],"standard request guide"," and the classic one, and pick the one that fits how often you check.",[163,1179,1180,1183],{},[17,1181,1182],{},"Request a token in the app and verify it on your server."," As with SafetyNet, the app gets an integrity token and your backend decides what to do with the verdict. Don't make the decision on the device.",[163,1185,1186,1189],{},[17,1187,1188],{},"Watch the quota."," By default, an app can make up to 10,000 Play Integrity requests a day across all installs. If you check on every app open with many users, ask Google for a higher daily maximum before launch.",[163,1191,1192,1195],{},[17,1193,1194],{},"Collect verdicts before you block anyone."," Google suggests gathering telemetry on your current users before you change app behavior based on verdicts, and treating Play Integrity as one part of your anti-abuse strategy, not the only one.",[163,1197,1198,1201],{},[17,1199,1200],{},"Remove the SafetyNet code"," and dependency once the new path works, so nobody mistakes an old error for a new problem.",[31,1203,1205],{"id":1204},"switching-firebase-app-check-to-play-integrity","Switching Firebase App Check to Play Integrity",[14,1207,1208,1209,632],{},"If you used SafetyNet through Firebase App Check, the steps come from Firebase's ",[69,1210,1213],{"href":1211,"rel":1212},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fapp-check\u002Fandroid\u002Fplay-integrity-provider",[73],"Play Integrity setup guide",[199,1215,1216,1226,1232,1238,1256,1268],{},[163,1217,1218,1221,1222,1225],{},[17,1219,1220],{},"Link the projects."," In Google Play Console, open your app, go to App integrity, find the Play Integrity API section and click ",[17,1223,1224],{},"Link Cloud project",". Pick the same Firebase project your app is registered in. Firebase says you must be an Owner of that project yourself: being in a group that has the Owner role isn't enough.",[163,1227,1228,1231],{},[17,1229,1230],{},"Register the app in Firebase."," In the Firebase console, go to Security > App Check, and register your Android app with the Play Integrity provider. You'll need the SHA-256 fingerprint of your app's signing certificate. If you use Play App Signing, use the SHA-256 of the app signing key certificate shown in Play Console, not your upload key's.",[163,1233,1234,1237],{},[17,1235,1236],{},"Register every app."," Once you turn on enforcement for a Firebase product, only registered apps can reach it, so register all of your project's apps before you enforce.",[163,1239,1240,1243,1244,1247,1248,1251,1252,1255],{},[17,1241,1242],{},"Change the provider in code."," On Android, install ",[467,1245,1246],{},"PlayIntegrityAppCheckProviderFactory"," before you use any other Firebase SDK. In a Flutter app, set the Android provider to Play Integrity where you activate ",[467,1249,1250],{},"firebase_app_check",", right after ",[467,1253,1254],{},"Firebase.initializeApp()",". The parameter name has changed between plugin versions, so check the docs for the version you use.",[163,1257,1258,1261,1262,1267],{},[17,1259,1260],{},"Use the debug provider for development."," Emulators and debug builds you install yourself often can't pass Play Integrity checks. App Check's ",[69,1263,1266],{"href":1264,"rel":1265},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fapp-check\u002Fandroid\u002Fdebug-provider",[73],"debug provider"," lets those builds through. Keep its debug tokens out of release builds.",[163,1269,1270,1273],{},[17,1271,1272],{},"Monitor, then enforce."," Check the App Check metrics in the Firebase console to see how many requests come from verified and unverified apps before you turn on enforcement for Firestore, Storage, Functions or other products.",[31,1275,352],{"id":351},[14,1277,1278,1279,1281,1282,941,1286,180],{},"If App Check enforcement starts rejecting your real users, or the Play Integrity setup won't verify, the ",[69,1280,364],{"href":363}," 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 wider check of how your Firebase app is locked down, see the ",[69,1283,1285],{"href":1284},"\u002Fblog\u002Ffirebase-security-guide-2026\u002F","Firebase security guide",[69,1287,359],{"href":358},{"title":371,"searchDepth":372,"depth":372,"links":1289},[1290,1293,1294,1295],{"id":1049,"depth":372,"text":1050,"children":1291},[1292],{"id":1112,"depth":377,"text":1113},{"id":1153,"depth":372,"text":1154},{"id":1204,"depth":372,"text":1205},{"id":351,"depth":372,"text":352},"2026-10-19T01:00:00.000Z","Google fully turned down the SafetyNet Attestation API in January 2025, and calls now fail with error code 7. How to move to the Play Integrity API, and how to switch Firebase App Check to its Play Integrity provider, from Google's docs checked October 18, 2026.",[1299,1302,1305,1308,1311,1314],{"question":1300,"answer":1301},"Is SafetyNet still working?","No. Google says the SafetyNet Attestation API was deprecated in 2022 and fully turned down in January 2025. Any call to it now fails.",{"question":1303,"answer":1304},"What does SafetyNet error code 7 mean in 2026?","It means the SafetyNet Attestation API has been turned down. Google says the attest call now always fails with an ApiException and status code 7 (NETWORK_ERROR). It isn't a network problem on your side, and retrying won't help. Move to the Play Integrity API.",{"question":1306,"answer":1307},"What replaced SafetyNet?","The Play Integrity API. Google says it brings several integrity checks, including what SafetyNet Attestation offered, under one API. It offers standard and classic requests, and Google's docs explain when to use each.",{"question":1309,"answer":1310},"Does Firebase App Check still support SafetyNet?","No. Firebase says SafetyNet has been shut down and projects must use an alternative provider, such as Play Integrity. Register your Android app with the Play Integrity provider in the App Check section of the Firebase console, then switch the provider in your app's code.",{"question":1312,"answer":1313},"Does Play Integrity work for apps outside Google Play?","Firebase says the App Check Play Integrity provider supports Android apps published on Google Play, outside Google Play, or both. Check the Play Integrity documentation for which verdicts you get in each case.",{"question":1315,"answer":1316},"How many Play Integrity requests can my app make?","By default, up to 10,000 requests per day across all installs. Google lets you request a higher daily maximum.",{"readingTimeStats":1318},{"text":976,"minutes":1319,"time":1320,"words":1321},4.45,267000,890,"\u002Fblog\u002Fsafetynet-shut-down-play-integrity-app-check-2026","safetynet shut down",[984,1325,1326],"firebase-security-guide-2026","flutter-security-best-practices-2026",{"title":1029,"description":1297},[1329,1331,1334,1336,1338,1340],{"title":1330,"url":1077},"Android Developers, SafetyNet Attestation API deprecation timeline",{"title":1332,"url":1333},"Android Developers, Play Integrity API overview","https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Fintegrity\u002Foverview",{"title":1335,"url":1174},"Android Developers, make a standard Play Integrity request",{"title":1337,"url":1107},"Firebase, App Check SafetyNet turndown",{"title":1339,"url":1211},"Firebase, get started using App Check with Play Integrity on Android",{"title":1341,"url":1264},"Firebase, use App Check with the debug provider on Android","blog\u002Fsafetynet-shut-down-play-integrity-app-check-2026","safetynet shut down, safetynet attestation deprecated, safetynet alternative, play integrity api migration, safetynet error code 7, firebase app check safetynet, app check play integrity provider, safetynet to play integrity, android app attestation 2026, flutter app check android",[1345,1346,1347,1348,1349],"Google deprecated the SafetyNet Attestation API in 2022 and fully turned it down in January 2025. Its replacement is the Play Integrity API.","An app that still calls SafetyNet attestation gets an error every time: Google says the call fails with an ApiException and status code 7 (NETWORK_ERROR).","Firebase App Check's SafetyNet provider is gone too. Firebase says projects must use another provider, such as Play Integrity.","By default, an app can make up to 10,000 Play Integrity requests a day across all installs, and you can ask Google for more.","The App Check setup steps to get right are the Cloud project link in Play Console, the correct SHA-256 fingerprint, and registering every app before you enforce.","https:\u002F\u002Fapp369.com\u002Fblog\u002Fsafetynet-shut-down-play-integrity-app-check-2026\u002F","d8cTEcucqDDi5LH3lHnMC91m94dkdZLDbm6jJnJWTCc",{"id":1353,"title":1354,"author":1355,"body":1357,"category":385,"createdAt":1838,"description":1839,"disclosure":388,"extension":389,"faq":1840,"howTo":388,"lastVerified":388,"location":406,"meta":1859,"navigation":413,"ogImage":388,"path":1864,"primaryKeyword":1865,"readingTime":416,"related":1866,"seo":1870,"sources":1871,"stem":1886,"tags":1887,"takeaways":1888,"updatedAt":1838,"url":1894,"__hash__":1895},"blog\u002Fblog\u002Fjcenter-bintray-shut-down-fix-android-flutter-builds-2026.md","JCenter Shutdown: Fixing Old Android and Flutter Builds",{"name":7,"social":1356},{"twitter":9},{"type":11,"value":1358,"toc":1830},[1359,1376,1379,1384,1388,1513,1516,1518,1520,1555,1558,1562,1565,1739,1743,1805,1808,1815,1817,1826],[14,1360,1361,1364,1365,1368,1369,176,1372,1375],{},[17,1362,1363],{},"Bintray is gone and JCenter is now only a redirect to Maven Central, so an Android or Flutter project that still points at them can fail to build or fail to find some of its libraries."," Often the fix is short: replace ",[467,1366,1367],{},"jcenter()"," with ",[467,1370,1371],{},"mavenCentral()",[467,1373,1374],{},"google()",". The harder cases are old plugins that still declare JCenter and libraries that were never published anywhere else. Both are covered below.",[14,1377,1378],{},"If you landed here from an old Bintray link or a README that says to add JCenter, this is what changed and how to fix the build. The dates come from JFrog, Gradle and Android Developers, as listed in the sources. I tested the Bintray and JCenter addresses below myself on October 18, 2026.",[14,1380,1381,1383],{},[17,1382,28],{}," App369 is my studio. I fix and maintain Flutter and Android apps for a living, and the last section mentions what I sell. No company named here paid for a mention.",[31,1385,1387],{"id":1386},"what-happened-to-bintray-and-jcenter-and-when","What happened to Bintray and JCenter, and when",[36,1389,1390,1400],{},[39,1391,1392],{},[42,1393,1394,1396,1398],{},[45,1395,47],{},[45,1397,50],{},[45,1399,53],{},[55,1401,1402,1417,1434,1447,1464,1477,1495],{},[42,1403,1404,1407,1410],{},[60,1405,1406],{},"February 3, 2021",[60,1408,1409],{},"JFrog announces the end of Bintray, JCenter, GoCenter and ChartCenter",[60,1411,1412],{},[69,1413,1416],{"href":1414,"rel":1415},"https:\u002F\u002Fjfrog.com\u002Fblog\u002Finto-the-sunset-bintray-jcenter-gocenter-and-chartcenter\u002F",[73],"JFrog",[42,1418,1419,1422,1427],{},[60,1420,1421],{},"February 22, 2021",[60,1423,1424,1425],{},"Gradle tells users to replace JCenter with Maven Central and says Gradle 7.0 will deprecate ",[467,1426,1367],{},[60,1428,1429],{},[69,1430,1433],{"href":1431,"rel":1432},"https:\u002F\u002Fblog.gradle.org\u002Fjcenter-shutdown",[73],"Gradle blog",[42,1435,1436,1439,1442],{},[60,1437,1438],{},"March 31, 2021",[60,1440,1441],{},"JCenter stops accepting new submissions",[60,1443,1444],{},[69,1445,1416],{"href":1414,"rel":1446},[73],[42,1448,1449,1454,1459],{},[60,1450,1451],{},[17,1452,1453],{},"May 1, 2021",[60,1455,1456],{},[17,1457,1458],{},"Bintray shuts down",[60,1460,1461],{},[69,1462,1416],{"href":1414,"rel":1463},[73],[42,1465,1466,1469,1472],{},[60,1467,1468],{},"2021 to 2024",[60,1470,1471],{},"JCenter stays up as a read-only repository",[60,1473,1474],{},[69,1475,1433],{"href":1431,"rel":1476},[73],[42,1478,1479,1484,1489],{},[60,1480,1481],{},[17,1482,1483],{},"August 15, 2024",[60,1485,1486],{},[17,1487,1488],{},"JCenter starts redirecting every request to Maven Central",[60,1490,1491],{},[69,1492,1416],{"href":1493,"rel":1494},"https:\u002F\u002Fjfrog.com\u002Fblog\u002Fjcenter-sunset\u002F",[73],[42,1496,1497,1500,1506],{},[60,1498,1499],{},"Gradle 9.0",[60,1501,1502,1503,1505],{},"Gradle removes the ",[467,1504,1367],{}," method",[60,1507,1508],{},[69,1509,1512],{"href":1510,"rel":1511},"https:\u002F\u002Fdocs.gradle.org\u002Fcurrent\u002Fuserguide\u002Fupgrading_major_version_9.html",[73],"Gradle docs",[14,1514,1515],{},"Android's JCenter migration page still says JCenter allows downloads of existing artifacts indefinitely. JFrog's 2024 post and Gradle's 9.0 upgrade guide both describe the redirect to Maven Central, and that redirect is what I saw when I tested it.",[152,1517,155],{"id":154},[14,1519,158],{},[160,1521,1522,1528,1536,1546],{},[163,1523,1524,1527],{},[17,1525,1526],{},"bintray.com"," did not load: the connection timed out.",[163,1529,1530,1533,1534,180],{},[17,1531,1532],{},"dl.bintray.com",", where many READMEs linked downloads and custom repositories, returned ",[17,1535,171],{},[163,1537,1538,1541,1542,1545],{},[17,1539,1540],{},"jcenter.bintray.com"," returned a ",[17,1543,1544],{},"301 redirect to repo1.maven.org",", Maven Central.",[163,1547,1548,1549,1552,1553,180],{},"A library that was only ever published on JCenter, ",[467,1550,1551],{},"org.jetbrains.kotlinx:kotlinx-html-jvm:0.6.12",", followed the redirect to Maven Central and returned ",[17,1554,171],{},[14,1556,1557],{},"So JCenter now works only for files that also exist on Maven Central. Anything else fails, sometimes with a confusing \"could not find\" error for a version you know used to exist.",[31,1559,1561],{"id":1560},"how-to-fix-the-build","How to fix the build",[14,1563,1564],{},"Work through these in order. In my experience, the first two fix many projects.",[199,1566,1567,1653,1662,1685,1715,1725],{},[163,1568,1569,1575,1576,1579,1580,1583,1584,176,1587,1590,1591,1594,1595,176,1598,1601,1602,1605,1606,1368,1608,1610,1611,1613,1614,1617,1618,1620,1621],{},[17,1570,1571,1572,1574],{},"Replace ",[467,1573,1367],{}," in your own build files."," In an Android project, look in ",[467,1577,1578],{},"settings.gradle"," (or ",[467,1581,1582],{},"settings.gradle.kts",") under ",[467,1585,1586],{},"pluginManagement",[467,1588,1589],{},"dependencyResolutionManagement",", and in the top-level ",[467,1592,1593],{},"build.gradle"," under ",[467,1596,1597],{},"buildscript",[467,1599,1600],{},"allprojects",". In a Flutter app the same files are under ",[467,1603,1604],{},"android\u002F",". Replace ",[467,1607,1367],{},[467,1609,1371],{},", and make sure ",[467,1612,1374],{}," is there too. Keep ",[467,1615,1616],{},"gradlePluginPortal()"," in ",[467,1619,1586],{}," if it is already there.",[1622,1623,1627],"pre",{"className":1624,"code":1625,"language":1626,"meta":371,"style":371},"language-groovy shiki shiki-themes github-light github-dark","repositories {\n    google()\n    mavenCentral()\n}\n","groovy",[467,1628,1629,1637,1642,1647],{"__ignoreMap":371},[1630,1631,1634],"span",{"class":1632,"line":1633},"line",1,[1630,1635,1636],{},"repositories {\n",[1630,1638,1639],{"class":1632,"line":372},[1630,1640,1641],{},"    google()\n",[1630,1643,1644],{"class":1632,"line":377},[1630,1645,1646],{},"    mavenCentral()\n",[1630,1648,1650],{"class":1632,"line":1649},4,[1630,1651,1652],{},"}\n",[163,1654,1655,1658,1659,1661],{},[17,1656,1657],{},"Sync, then read the first error."," If it names a library that can't be found, go to step 4. If it mentions ",[467,1660,1367],{}," and points at a file you don't own, go to step 3.",[163,1663,1664,1667,1668,1670,1671,1674,1675,1678,1679,1617,1682,1684],{},[17,1665,1666],{},"Fix plugins and libraries that still declare JCenter."," On Gradle 9 the build stops at any ",[467,1669,1367],{}," call in a build file Gradle runs, and that includes Flutter plugins, which are built as part of your app. So in a Flutter app the culprit is usually an old plugin: check the plugin's changelog, then raise its version in ",[467,1672,1673],{},"pubspec.yaml"," and run ",[467,1676,1677],{},"flutter pub upgrade",". If the plugin is unmaintained, look for a maintained fork or a replacement plugin. Editing files in the pub cache is fragile: the change doesn't reach CI or other machines, and it is lost when the cache is cleared or repaired. A fork referenced from ",[467,1680,1681],{},"dependency_overrides",[467,1683,1673],{}," is the safer way to patch a plugin. If you can't upgrade the plugin yet, staying on Gradle 8 buys time, but it doesn't fix the underlying problem.",[163,1686,1687,1690,1691,1696,1697,1702,1703,1706,1707,1710,1711,1714],{},[17,1688,1689],{},"Find a new home for JCenter-only libraries."," Search ",[69,1692,1695],{"href":1693,"rel":1694},"https:\u002F\u002Fcentral.sonatype.com\u002F",[73],"Maven Central"," for the library. Many moved there under the same group ID, sometimes with a newer version only. If the source is on GitHub, ",[69,1698,1701],{"href":1699,"rel":1700},"https:\u002F\u002Fjitpack.io\u002F",[73],"JitPack"," can build it from a release tag: add ",[467,1704,1705],{},"maven { url 'https:\u002F\u002Fjitpack.io' }"," and use ",[467,1708,1709],{},"com.github.\u003Cuser>:\u003Crepo>:\u003Ctag>"," coordinates. JitPack builds the code itself, so check that the tag is the version you expect. As a last resort, put the JAR or AAR in a ",[467,1712,1713],{},"libs\u002F"," folder and depend on it as a local file. That works in the app module; in a plugin or library module, use a file-based Maven repository instead. A local file also drops the library's own dependencies, so add those yourself, and note the library as something to replace.",[163,1716,1717,1720,1721,1724],{},[17,1718,1719],{},"Check for other dead repositories."," Remove any ",[467,1722,1723],{},"maven { url \"https:\u002F\u002Fdl.bintray.com\u002F...\" }"," lines. Each one is a dead address that slows down or breaks resolution.",[163,1726,1727,1730,1731,1734,1735,1738],{},[17,1728,1729],{},"Build from a clean state."," Run the build with an empty Gradle cache (a fresh ",[467,1732,1733],{},"GRADLE_USER_HOME"," or a clean CI runner, plus ",[467,1736,1737],{},"flutter clean"," in a Flutter app) before you call it fixed. A cache on your own machine can hide a library that no longer downloads anywhere.",[31,1740,1742],{"id":1741},"when-its-more-than-a-one-line-change","When it's more than a one-line change",[36,1744,1745,1756],{},[39,1746,1747],{},[42,1748,1749,1751,1753],{},[45,1750,846],{},[45,1752,849],{},[45,1754,1755],{},"Usual fix",[55,1757,1758,1772,1783,1794],{},[42,1759,1760,1766,1769],{},[60,1761,1762,1763,1765],{},"The build fails on ",[467,1764,1367],{}," after a Gradle upgrade",[60,1767,1768],{},"A build file, yours or a plugin's, still calls the removed method",[60,1770,1771],{},"Replace it in your files, and upgrade the plugin",[42,1773,1774,1777,1780],{},[60,1775,1776],{},"\"Could not find\" for an old version of a library",[60,1778,1779],{},"That version only existed on JCenter",[60,1781,1782],{},"Use a version that is on Maven Central, or JitPack",[42,1784,1785,1788,1791],{},[60,1786,1787],{},"A README says to add a dl.bintray.com repository",[60,1789,1790],{},"The project published only through Bintray",[60,1792,1793],{},"Check Maven Central and GitHub releases for the same project",[42,1795,1796,1799,1802],{},[60,1797,1798],{},"The project hasn't been built in years",[60,1800,1801],{},"JCenter is one of several outdated pieces",[60,1803,1804],{},"Upgrade Gradle, Android Gradle Plugin and Kotlin step by step",[14,1806,1807],{},"A project that has sat untouched since 2020 or 2021 usually needs more than the repository change: newer Gradle and Android Gradle Plugin versions, a newer Kotlin, and a recent target API level, because Google Play requires updates to meet its current target API requirement (check the deadline in Play Console). Do those one at a time and build after each, so you know which change broke what.",[14,1809,1810,1811,180],{},"For the iOS side of the same problem, see ",[69,1812,1814],{"href":1813},"\u002Fblog\u002Fflutter-ios-build-failed-after-upgrade-2026\u002F","Flutter iOS build failed after an upgrade",[31,1816,352],{"id":351},[14,1818,1819,1820,1822,1823,1825],{},"If the build still fails after these steps, or the project is old enough that JCenter is only the first problem, the ",[69,1821,364],{"href":363}," is 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. If you're not sure it fits, ",[69,1824,359],{"href":358}," of the error and the project's age, and I'll tell you where I'd start.",[1827,1828,1829],"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":371,"searchDepth":372,"depth":372,"links":1831},[1832,1835,1836,1837],{"id":1386,"depth":372,"text":1387,"children":1833},[1834],{"id":154,"depth":377,"text":155},{"id":1560,"depth":372,"text":1561},{"id":1741,"depth":372,"text":1742},{"id":351,"depth":372,"text":352},"2026-10-18T18:00:00.000Z","Bintray shut down on May 1, 2021, JCenter has redirected to Maven Central since August 15, 2024, and Gradle 9 removed jcenter(). How to fix an old Android or Flutter build that still points at them, with every address checked on October 18, 2026.",[1841,1844,1847,1850,1853,1856],{"question":1842,"answer":1843},"Is JCenter still available?","Not as its own repository. JFrog stopped new submissions on March 31, 2021, and on August 15, 2024 it started redirecting all JCenter requests to Maven Central. Anything that exists on Maven Central still downloads, and anything that only existed on JCenter now returns 404.",{"question":1845,"answer":1846},"What replaced JCenter?","Maven Central, through mavenCentral() in Gradle. Android Gradle Plugin and AndroidX libraries come from Google's Maven repository, through google(). Many Android and Flutter projects need nothing else.",{"question":1848,"answer":1849},"Why does my build fail on jcenter() after upgrading Gradle?","Gradle removed the jcenter() method in Gradle 9.0, after deprecating it in Gradle 7.0. Any build file that still calls it, including one inside an old plugin or library, stops the build. Replace it with mavenCentral(), or upgrade the plugin that declares it.",{"question":1851,"answer":1852},"What happened to dl.bintray.com links?","Bintray shut down on May 1, 2021. dl.bintray.com returned 404 when I tested it on October 18, 2026, and bintray.com itself did not load. If a README tells you to download a file or add a repository from Bintray, look for the same project on Maven Central or GitHub releases.",{"question":1854,"answer":1855},"How do I fix a Flutter Android build that still uses jcenter()?","Check android\u002Fbuild.gradle and android\u002Fsettings.gradle in your app first, and replace jcenter() with mavenCentral(). If the error points into a plugin, upgrade that plugin with flutter pub upgrade or a newer version in pubspec.yaml. Plugins that are no longer maintained may need a fork or a replacement.",{"question":1857,"answer":1858},"What if a library I need was only on JCenter?","Search Maven Central for a newer version under the same or a new group ID. If the source is on GitHub, JitPack can build it from a tag. As a last resort, keep the JAR or AAR file in your project and depend on it locally, and plan to replace the library.",{"readingTimeStats":1860},{"text":409,"minutes":1861,"time":1862,"words":1863},5.165,309900,1033,"\u002Fblog\u002Fjcenter-bintray-shut-down-fix-android-flutter-builds-2026","jcenter shutdown",[1867,1868,1869],"flutter-ios-build-failed-after-upgrade-2026","mobile-app-beta-testing-crash-reporting-tools-2026","parse-kinvey-backend-as-a-service-alternatives-2026",{"title":1354,"description":1839},[1872,1874,1876,1878,1880,1883,1885],{"title":1873,"url":1414},"JFrog, \"Into the Sunset on May 1st: Bintray, JCenter, GoCenter, and ChartCenter\" (February 3, 2021)",{"title":1875,"url":1493},"JFrog, \"JCenter Sunset on August 15th, 2024\" (July 2, 2024)",{"title":1877,"url":1431},"Gradle blog, \"JCenter shutdown impact on Gradle builds\" (February 22, 2021)",{"title":1879,"url":1510},"Gradle, upgrading to Gradle 9.0 (removal of jcenter())",{"title":1881,"url":1882},"Android Developers, JCenter migration","https:\u002F\u002Fdeveloper.android.com\u002Fbuild\u002Fjcenter-migration",{"title":1884,"url":1693},"Maven Central search",{"title":1701,"url":1699},"blog\u002Fjcenter-bintray-shut-down-fix-android-flutter-builds-2026","jcenter shutdown, bintray shut down, jcenter alternative, jcenter deprecated, replace jcenter with mavenCentral, could not find method jcenter, gradle 9 jcenter, dl.bintray.com 404, flutter android build failed jcenter, old android project build",[1889,1890,1891,1892,1893],"JFrog announced on February 3, 2021 that it was shutting down Bintray, JCenter, GoCenter and ChartCenter. Bintray stopped on May 1, 2021, and JCenter has redirected to Maven Central since August 15, 2024.","Gradle deprecated jcenter() in Gradle 7.0 and removed it in Gradle 9.0. On Gradle 9, any build file that still calls jcenter() fails before it downloads anything.","On October 18, 2026, bintray.com did not load, dl.bintray.com returned 404, and jcenter.bintray.com redirected to repo1.maven.org. A library that was only ever published on JCenter now returns 404.","The usual fix: replace jcenter() with mavenCentral() and google(), in your own build files and in any old plugin that still declares it.","If a dependency was never moved to Maven Central, upgrade to a maintained version, build it from source through JitPack, or keep a copy of the file in your project.","https:\u002F\u002Fapp369.com\u002Fblog\u002Fjcenter-bintray-shut-down-fix-android-flutter-builds-2026\u002F","bKylwzmBGF-n6fTjSzsXn1C7b4JI02N9EWDfcL2GmNI",[1897,1899,1901,1905,1908,1912],{"keyword":5,"url":450,"title":5,"relevance":1898},72,{"keyword":455,"url":1025,"title":455,"relevance":1900},11,{"keyword":1902,"url":1903,"title":1902,"relevance":1904},"Flutter \"Deleted Android v1 Embedding\" Build Error: The Fix","https:\u002F\u002Fapp369.com\u002Fblog\u002Fflutter-deleted-android-v1-embedding-build-failed-2026\u002F",10,{"keyword":1906,"url":1907,"title":1906,"relevance":1904},"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":1909,"url":1910,"title":1909,"relevance":1911},"Flutter vs Native in 2026: An Honest Decision Guide","https:\u002F\u002Fapp369.com\u002Fblog\u002Fflutter-vs-native-app-development-2026\u002F",9,{"keyword":1354,"url":1894,"title":1354,"relevance":1913},8,1792334918061]