<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Emre P.</title>
    <description>The latest articles on DEV Community by Emre P. (@devemrep).</description>
    <link>https://dev.to/devemrep</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4134272%2F7f10a6bc-6505-4e07-a715-c7b0a9f21137.jpg</url>
      <title>DEV Community: Emre P.</title>
      <link>https://dev.to/devemrep</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devemrep"/>
    <language>en</language>
    <item>
      <title>Lost your keystore? You can still publish updates on Google Play. Here is how</title>
      <dc:creator>Emre P.</dc:creator>
      <pubDate>Fri, 02 Oct 2026 17:24:34 +0000</pubDate>
      <link>https://dev.to/devemrep/lost-your-keystore-you-can-still-publish-updates-on-google-play-here-is-how-162f</link>
      <guid>https://dev.to/devemrep/lost-your-keystore-you-can-still-publish-updates-on-google-play-here-is-how-162f</guid>
      <description>&lt;p&gt;You open Android Studio to ship a small fix and the build asks for a keystore you no longer have. Maybe it was on an old laptop. Maybe a freelancer built the app and never handed the key over. Maybe you still have the file but the password is gone.&lt;/p&gt;

&lt;p&gt;Whether you can publish updates again depends on one setting you may never have looked at. Here is how to check it, and what to do in each case.&lt;/p&gt;

&lt;h2&gt;
  
  
  First, the two keys
&lt;/h2&gt;

&lt;p&gt;Google Play apps can have two different keys, and people mix them up all the time.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;App signing key&lt;/strong&gt;: the key that signs the APKs your users install. If your app uses &lt;strong&gt;Play App Signing&lt;/strong&gt;, Google keeps this key. You never see it and you can't lose it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upload key&lt;/strong&gt;: the key you sign your AAB with before uploading it to Play Console. This is the one that lives in your &lt;code&gt;.jks&lt;/code&gt; or &lt;code&gt;.keystore&lt;/code&gt; file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are on Play App Signing, what you lost is the upload key. That one can be reset.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check if you are on Play App Signing
&lt;/h2&gt;

&lt;p&gt;In Play Console, open your app and go to the app signing page. Google moves the menu around, but at the time of writing it is under &lt;strong&gt;Protected with Play → Play Store distribution → Manage Play app signing&lt;/strong&gt; (older layouts: &lt;strong&gt;Test and release → App integrity&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;If you see "Releases signed by Google Play" or an &lt;strong&gt;App signing key certificate&lt;/strong&gt; managed by Google, you are fine. Every app published for the first time since August 2021 uses Play App Signing, because new apps have to publish as app bundles.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 1: Play App Signing is on (most apps)
&lt;/h2&gt;

&lt;p&gt;You are not locked out. You create a new upload key and ask Google to accept it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Create a new upload key on your own computer:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;keytool &lt;span class="nt"&gt;-genkey&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nt"&gt;-keystore&lt;/span&gt; upload-keystore.jks &lt;span class="nt"&gt;-keyalg&lt;/span&gt; RSA &lt;span class="nt"&gt;-keysize&lt;/span&gt; 2048 &lt;span class="nt"&gt;-validity&lt;/span&gt; 10000 &lt;span class="nt"&gt;-alias&lt;/span&gt; upload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pick a password you will actually keep, and store the file somewhere that is not your laptop only: a password manager, an encrypted drive, anywhere you'll still have in three years.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Export its certificate:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;keytool &lt;span class="nt"&gt;-export&lt;/span&gt; &lt;span class="nt"&gt;-rfc&lt;/span&gt; &lt;span class="nt"&gt;-keystore&lt;/span&gt; upload-keystore.jks &lt;span class="nt"&gt;-alias&lt;/span&gt; upload &lt;span class="nt"&gt;-file&lt;/span&gt; upload_certificate.pem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Request the reset.&lt;/strong&gt; On the same app signing page, in the upload key certificate section, choose &lt;strong&gt;Request upload key reset&lt;/strong&gt;, pick a reason, upload &lt;code&gt;upload_certificate.pem&lt;/code&gt; and submit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Wait for Google.&lt;/strong&gt; The account owner gets an email when the request is approved, with the date and time from which the new key works. It usually takes a day or two. Until then, uploads signed with the new key will be rejected, so don't panic if an early try fails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Point your build at the new key.&lt;/strong&gt; In a Flutter project that usually means updating &lt;code&gt;android/key.properties&lt;/code&gt; (storeFile, storePassword, keyAlias, keyPassword). In a native project it's the &lt;code&gt;signingConfigs&lt;/code&gt; block in &lt;code&gt;build.gradle&lt;/code&gt;. Then build a release AAB and upload it as usual.&lt;/p&gt;

&lt;p&gt;That's it. Your users notice nothing: the installs are still signed with Google's app signing key, which never changed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forgot the password but still have the file?&lt;/strong&gt; Same fix. Without the password the file is useless, so treat it as lost and reset.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 2: Play App Signing is off and the key is gone
&lt;/h2&gt;

&lt;p&gt;This is the bad one. If you manage the app signing key yourself and lose it, Google can't reset it, and no one else can either. Nobody can "recover" a keystore from your app, whatever a gig title says.&lt;/p&gt;

&lt;p&gt;What is left:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search properly before giving up: old laptops, backup drives, CI secrets, the freelancer or agency that built the app, email attachments with &lt;code&gt;.jks&lt;/code&gt; or &lt;code&gt;.keystore&lt;/code&gt; files.&lt;/li&gt;
&lt;li&gt;If it's really gone, the app can't be updated. The way forward is to publish it again under a &lt;strong&gt;new package name&lt;/strong&gt; and move your users over with an in-app message or a final update of the old listing if you still can.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A real case
&lt;/h2&gt;

&lt;p&gt;A client of mine hired me for something else, the developer verification check, and mentioned on the side that she didn't have her signing key anymore.&lt;/p&gt;

&lt;p&gt;The first thing I checked was the app signing page: "Releases signed by Google Play". So the app was on Play App Signing and a reset was possible. What sounded like "I can never update my app again" turned into a short checklist. With the target API 36 deadline for updates coming on November 1, the reset is the first step, because no update can go out without a working upload key.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't lose it again
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Keep the upload keystore and its password in two places, one of them off your computer.&lt;/li&gt;
&lt;li&gt;Write down the alias. People keep the file and forget the alias.&lt;/li&gt;
&lt;li&gt;If someone else builds your app, ask for the upload key and passwords as part of the handover.&lt;/li&gt;
&lt;li&gt;Never send your keystore or passwords to anyone who offers to "fix it for you". A reset never needs them.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;I help small teams and solo developers with Google Play problems like this one. If you'd rather not do the reset on your own, I walk you through it as a fixed-price job, and your key stays on your computer the whole time: &lt;a href="https://www.upwork.com/freelancers/~01df9a9e8b37d44bd1" rel="noopener noreferrer"&gt;my Upwork profile&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Official sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://support.google.com/googleplay/android-developer/answer/9842756" rel="noopener noreferrer"&gt;Use Play App Signing (Play Console Help)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/studio/publish/app-signing" rel="noopener noreferrer"&gt;Sign your app (Android Developers)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>android</category>
      <category>googleplay</category>
      <category>flutter</category>
      <category>mobile</category>
    </item>
    <item>
      <title>"Not registered" but it is: 4 real cases before the Sept 30 deadline</title>
      <dc:creator>Emre P.</dc:creator>
      <pubDate>Sun, 27 Sep 2026 16:23:43 +0000</pubDate>
      <link>https://dev.to/devemrep/not-registered-but-it-is-4-real-cases-before-the-sept-30-deadline-2hn1</link>
      <guid>https://dev.to/devemrep/not-registered-but-it-is-4-real-cases-before-the-sept-30-deadline-2hn1</guid>
      <description>&lt;p&gt;The September 30 deadline for Play package name registration has passed. Apps that were not registered were removed from Play. Most apps were registered automatically, and my &lt;a href="https://dev.to/devemrep/google-play-will-remove-unregistered-apps-on-september-30-check-yours-in-two-minutes-3m7j"&gt;earlier post&lt;/a&gt; covers how to check yours.&lt;/p&gt;

&lt;p&gt;This post is about the other situation: Play Console says one thing, the release page says another, and you are not sure what to believe. These are four real cases I ran into in the last week, from the Play Help Community and from a client. Each one looked like a Google bug. Most of them were not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 1: "Registered", but the package name is "already in use"
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What they saw:&lt;/strong&gt; A Flutter app. The package showed as registered under Android developer verification, but creating the app in Play Console failed with "already in use".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; The package name was &lt;code&gt;com.example.hello_flutter&lt;/code&gt;. That is the Flutter template default. Thousands of projects ship with it, and Play does not accept apps under &lt;code&gt;com.example&lt;/code&gt; at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Change the package name. If the app was never published, you lose nothing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In &lt;code&gt;android/app/build.gradle&lt;/code&gt; (or &lt;code&gt;build.gradle.kts&lt;/code&gt;), change &lt;code&gt;applicationId&lt;/code&gt; to something unique, like &lt;code&gt;com.yourname.appname&lt;/code&gt;. &lt;code&gt;namespace&lt;/code&gt; can stay as it is.&lt;/li&gt;
&lt;li&gt;If you use Firebase, add a new Android app with the new package name and download the new &lt;code&gt;google-services.json&lt;/code&gt; (or run &lt;code&gt;flutterfire configure&lt;/code&gt; again). Your Firebase project and data stay the same.&lt;/li&gt;
&lt;li&gt;Register the new name under Android developer verification, then create the app in Play Console with it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After the first release the package name can never change, so pick one you are happy with.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 2: "No eligible signing keys are available"
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What they saw:&lt;/strong&gt; The developer had two certificates for the app. Neither one appeared as an option for registration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; Eligibility is based on known installs per signing key. From Google's help page:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A key with &lt;strong&gt;over 50%&lt;/strong&gt; of known installs has priority.&lt;/li&gt;
&lt;li&gt;If no key passes 50%, every key with &lt;strong&gt;50 or more installs&lt;/strong&gt; is eligible.&lt;/li&gt;
&lt;li&gt;Under 50 installs, it is first come, first served.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This app was also preinstalled on a manufacturer's devices. That build can easily count for most of the installs. If the manufacturer signed it with their own key, the eligible key belongs to them, not to the developer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Find out who holds the key used for the preinstalled build. Then open a case from the Help page inside Play Console with the package name, the SHA-256 fingerprints of both certificates, and a note that one build is a manufacturer preinstall. With the deadline this close, open the case today instead of waiting for forum replies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 3: Registered, but the release is still blocked
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What they saw:&lt;/strong&gt; The package showed as registered, but the production release failed with an "unregistered package name" error.&lt;/p&gt;

&lt;p&gt;This one I could not solve from the outside, but there are three things worth ruling out before your ticket sits in a support queue:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Same account.&lt;/strong&gt; The package has to be registered in the same Play Console developer account that owns the app. Not in a separate Android Developer Console account, and not in another Play account.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same key.&lt;/strong&gt; Compare the certificate you registered with the app signing key under &lt;strong&gt;Test and release → App integrity&lt;/strong&gt;. If you registered the wrong one (for example the upload key instead of the app signing key), Play may treat the release as coming from an unregistered key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fresh release.&lt;/strong&gt; If you registered after creating the release draft, discard the draft and create a new release. An old draft does not always pick up the new state.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A related case from the same week: a developer who used &lt;strong&gt;Internal app sharing&lt;/strong&gt; got the same kind of error. Internal app sharing builds are signed with a different key, and the fix was to register that key as an additional key for the package.&lt;/p&gt;

&lt;p&gt;If all of this checks out, the problem is on Google's side. Open a case from the Help page inside Play Console and attach two screenshots: the one showing "Registered" and the release error.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 4: "My registration disappeared"
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What they saw:&lt;/strong&gt; A client of mine. We had checked her app together, confirmed it was registered and closed the order. Then she wrote back: "It says Package not registered."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; Nothing was wrong. On the Android developer verification page there is a filter menu, and one of the options is literally called &lt;strong&gt;"Package not registered"&lt;/strong&gt;. She was reading the filter's label as the status of her app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to actually check:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select the "Package not registered" filter. If the list is empty (0 apps), you are fine.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Package names&lt;/strong&gt;. The status column should say &lt;strong&gt;Registered&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I am including this case because it is the most common one, and it causes real panic when a deadline says "removed from Play".&lt;/p&gt;

&lt;h2&gt;
  
  
  After September 30
&lt;/h2&gt;

&lt;p&gt;Google's wording is clear: apps not registered by September 30 "will be removed from Play". Identity verification for installs outside Play also starts in Brazil, Indonesia, Singapore and Thailand on the same day, and goes global in 2027. So this topic is not going away.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Package name does not start with &lt;code&gt;com.example&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Registered in the same account that owns the app&lt;/li&gt;
&lt;li&gt;[ ] Registered certificate matches the app signing key in App integrity&lt;/li&gt;
&lt;li&gt;[ ] Extra keys (Internal app sharing, builds outside Play) added&lt;/li&gt;
&lt;li&gt;[ ] New release created after registration&lt;/li&gt;
&lt;li&gt;[ ] "Package not registered" filter shows 0 apps&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;I fix Google Play problems for small teams and solo developers: developer verification, target API updates, rejected releases. If one of your apps is still flagged and you want it sorted soon, I do it as a fixed-price job through Upwork: &lt;a href="https://www.upwork.com/freelancers/~01df9a9e8b37d44bd1" rel="noopener noreferrer"&gt;my Upwork profile&lt;/a&gt;. I never need your keystore file.&lt;/p&gt;

&lt;p&gt;Official sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://support.google.com/googleplay/android-developer/answer/16984799?hl=en" rel="noopener noreferrer"&gt;Registering Play package names (Play Console Help)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/developer-verification/guides" rel="noopener noreferrer"&gt;Android developer verification (Android Developers)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>android</category>
      <category>googleplay</category>
      <category>flutter</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Google Play removed unregistered apps on September 30. What to do if yours was one of them</title>
      <dc:creator>Emre P.</dc:creator>
      <pubDate>Wed, 23 Sep 2026 17:06:21 +0000</pubDate>
      <link>https://dev.to/devemrep/google-play-will-remove-unregistered-apps-on-september-30-check-yours-in-two-minutes-3m7j</link>
      <guid>https://dev.to/devemrep/google-play-will-remove-unregistered-apps-on-september-30-check-yours-in-two-minutes-3m7j</guid>
      <description>&lt;p&gt;&lt;em&gt;Update: if your app shows as registered but you still get errors, I wrote up &lt;a href="https://dev.to/devemrep/not-registered-but-it-is-4-real-cases-before-the-sept-30-deadline-2hn1"&gt;4 real cases and their fixes&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Android developer verification has been in the news for a year, mostly as "sideloading is changing". That part is real, but it hides the part that affects every developer on Google Play:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Apps not registered by Sep 30, 2026 will be removed from Play.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is Google's wording, not mine. Not "cannot be updated". Removed. Globally.&lt;/p&gt;

&lt;p&gt;The good news is that for most of you it is already done. Google says about 99% of Play apps were registered automatically. This post is for the other 1%, and for everyone who has not checked yet, because checking takes two minutes and finding out on October 1 does not.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is actually changing
&lt;/h2&gt;

&lt;p&gt;There are two separate things, and people mix them up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Identity verification.&lt;/strong&gt; Every developer who distributes apps to certified Android devices has to be a verified developer. If you publish on Google Play, you most likely already did this when Play introduced its own developer verification. Google's guide says that for most Play developers no new action is required. You can confirm it under &lt;strong&gt;Settings → Developer account&lt;/strong&gt; in Play Console.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Package name registration.&lt;/strong&gt; Every package name has to be registered to a verified developer, and you may need to prove you own the private signing key for it. This is the part with the September 30 deadline on Play.&lt;/p&gt;

&lt;p&gt;Separately, from &lt;strong&gt;September 30, 2026&lt;/strong&gt; installs of apps from unverified developers are blocked on certified devices in &lt;strong&gt;Brazil, Indonesia, Singapore and Thailand&lt;/strong&gt;. It expands globally in 2027. If you only publish on Play and your packages are registered, you are fine there too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check your status
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open Play Console.&lt;/li&gt;
&lt;li&gt;Look at the &lt;strong&gt;Home&lt;/strong&gt; page. Apps that still need registration are flagged there.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Android developer verification&lt;/strong&gt; to see the status of each app.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If every app shows as registered, you are done. Close the tab.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why some apps were not registered automatically
&lt;/h2&gt;

&lt;p&gt;Google registered packages based on which signing key the installs came from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If one key accounts for &lt;strong&gt;more than 50% of known installs&lt;/strong&gt;, that key has priority.&lt;/li&gt;
&lt;li&gt;If no key passes 50%, &lt;strong&gt;every key with 50 or more installs&lt;/strong&gt; is eligible.&lt;/li&gt;
&lt;li&gt;If no key has 50 installs, it is &lt;strong&gt;first come, first served&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the apps that fall through are usually edge cases: an app signed with more than one key over its lifetime, an app that was also distributed outside Play with a different key, a small app with very few installs, or a package name that someone else registered first.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you have to prove key ownership
&lt;/h2&gt;

&lt;p&gt;Play Console walks you through it, but it looks scarier than it is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the app list, select &lt;strong&gt;Add key&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose the app's public certificate.&lt;/li&gt;
&lt;li&gt;Play Console gives you a small snippet. Put it in the APK's &lt;strong&gt;assets&lt;/strong&gt; folder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sign that APK with your private key&lt;/strong&gt; and upload it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The APK is only a proof of ownership, it does not replace your app. Your private key never leaves your machine; you only upload something signed with it. If anyone offers to "handle it" and asks for your keystore file, say no.&lt;/p&gt;

&lt;p&gt;If you also ship builds outside Play (a direct download, another store, an internal build with a different key), register those extra keys under &lt;strong&gt;Android developer verification → Package names&lt;/strong&gt; once the package itself is registered.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you distribute outside Google Play
&lt;/h2&gt;

&lt;p&gt;You need the Android Developer Console instead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;$25&lt;/strong&gt; fee and a government ID.&lt;/li&gt;
&lt;li&gt;Organizations need a &lt;strong&gt;D-U-N-S number&lt;/strong&gt;. It is free, but Google warns it can take &lt;strong&gt;up to 28 days&lt;/strong&gt;. If you are an organization and have not started, you are already late for the four launch countries.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;limited distribution&lt;/strong&gt; account is free, needs no ID and covers up to &lt;strong&gt;20 devices&lt;/strong&gt;. It is meant for students, hobbyists and closed groups, not for a real release.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ADB installs for your own testing keep working either way.&lt;/p&gt;

&lt;h2&gt;
  
  
  The checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Play Console → Settings → Developer account: identity verified&lt;/li&gt;
&lt;li&gt;[ ] Play Console → Home / Android developer verification: every package registered&lt;/li&gt;
&lt;li&gt;[ ] Apps with old or multiple keys: key ownership proven with the signed APK&lt;/li&gt;
&lt;li&gt;[ ] Builds shipped outside Play: extra keys registered&lt;/li&gt;
&lt;li&gt;[ ] Organization distributing outside Play: D-U-N-S requested&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If all five are ticked, September 30 is a normal Wednesday for you.&lt;/p&gt;




&lt;p&gt;I fix Google Play problems for small teams and solo developers: target API updates, rejected releases, and now this. If one of your apps is flagged and you would rather not spend an evening on it, I do it as a fixed-price job through Upwork: &lt;a href="https://www.upwork.com/freelancers/~01df9a9e8b37d44bd1" rel="noopener noreferrer"&gt;my Upwork profile&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Official sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/developer-verification/guides" rel="noopener noreferrer"&gt;Android developer verification (Android Developers)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/developer-verification/guides/google-play-console" rel="noopener noreferrer"&gt;Register on Google Play Console&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.google.com/googleplay/android-developer/answer/16984799?hl=en" rel="noopener noreferrer"&gt;Registering Play package names (Play Console Help)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.google.com/android-developer-console/answer/16561738?hl=en" rel="noopener noreferrer"&gt;Understanding Android developer verification&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>android</category>
      <category>googleplay</category>
      <category>flutter</category>
      <category>mobile</category>
    </item>
    <item>
      <title>I upgraded three Flutter apps to API 36. Here is what actually broke</title>
      <dc:creator>Emre P.</dc:creator>
      <pubDate>Sun, 20 Sep 2026 15:37:00 +0000</pubDate>
      <link>https://dev.to/devemrep/i-upgraded-three-flutter-apps-to-api-36-here-is-what-actually-broke-1dgd</link>
      <guid>https://dev.to/devemrep/i-upgraded-three-flutter-apps-to-api-36-here-is-what-actually-broke-1dgd</guid>
      <description>&lt;p&gt;Google Play's deadline passed on August 31, 2026. Since that date you cannot publish an update to an existing app unless it targets Android 16, API level 36. Not a new app. Any update. A five year old app with a hundred thousand installs cannot ship a one line crash fix until &lt;code&gt;targetSdk&lt;/code&gt; goes to 36.&lt;/p&gt;

&lt;p&gt;You can request an extension until November 1, 2026, which buys you six weeks and nothing else. The work is the same.&lt;/p&gt;

&lt;p&gt;I went through this on three of my own apps: a prayer times app, a jewelry store SaaS and a puzzle game. Changing two numbers in &lt;code&gt;build.gradle.kts&lt;/code&gt; took about a minute. Everything after that took two days. Here is the list, in the order it cost me time.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The release build broke and debug did not
&lt;/h2&gt;

&lt;p&gt;This one is the reason I am writing the post.&lt;/p&gt;

&lt;p&gt;My prayer times app schedules a notification for each prayer. In debug everything worked. In release the notifications simply never fired, with no crash and no log line. The app looked fine. People just stopped getting notified.&lt;/p&gt;

&lt;p&gt;The cause was R8. &lt;code&gt;flutter_local_notifications&lt;/code&gt; serializes its scheduled notification data with Gson, and Gson needs generic type information at runtime. R8 stripped it, so &lt;code&gt;zonedSchedule&lt;/code&gt; threw &lt;code&gt;RuntimeException: Missing type parameter&lt;/code&gt; deep inside the plugin, and the exception was swallowed by my own state handling. Immediate notifications kept working, because &lt;code&gt;show()&lt;/code&gt; does not go through Gson. That difference is what made it so confusing.&lt;/p&gt;

&lt;p&gt;The fix is a few lines in &lt;code&gt;proguard-rules.pro&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-keepattributes Signature
-keep class com.dexterous.** { *; }
-keep class * extends com.google.gson.reflect.TypeToken
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Turning off minification also "fixes" it, and that is the advice you find in most issue threads. It is a bad trade. With the keep rules in place and minification back on, my dex went from 14.8 MB to 2.0 MB and the APK from 60.2 MB to 55.1 MB.&lt;/p&gt;

&lt;p&gt;If you take one thing from this post: &lt;strong&gt;build the release version and install it on a real device before you upload.&lt;/strong&gt; Debug builds hide this entire class of bug.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Plugins that no longer compile
&lt;/h2&gt;

&lt;p&gt;Anything unmaintained since 2023 is a coin flip on the current Android Gradle Plugin. In two cases I replaced the plugin instead of forking it, because a package that has not seen a commit in three years will break again at the next deadline, and there is another deadline every year.&lt;/p&gt;

&lt;p&gt;Before you start, run &lt;code&gt;flutter pub outdated&lt;/code&gt; and look at the packages with no recent releases. Those are your real work items, not the SDK number.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Gradle, AGP and Kotlin disagreeing
&lt;/h2&gt;

&lt;p&gt;Bumping one of the three and not the others produces errors that point at the wrong thing. You get a Kotlin compile error that is actually an AGP version problem, or a Gradle daemon failure that is actually a JDK mismatch.&lt;/p&gt;

&lt;p&gt;Do them together, check the official compatibility table, and pin the Java version in &lt;code&gt;gradle.properties&lt;/code&gt; so your machine and CI agree.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The Data safety form drifts
&lt;/h2&gt;

&lt;p&gt;Your app now pulls newer SDK versions, and newer SDK versions collect different things. The form you filled in two years ago no longer matches what your app actually does, and Play checks this.&lt;/p&gt;

&lt;p&gt;Go through the form again with your current dependency list in front of you, especially advertising IDs, crash reporting and analytics.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Permissions and service types
&lt;/h2&gt;

&lt;p&gt;Declarations that were fine two API levels ago now need to be explicit. Foreground services need a type. Notifications need a runtime permission. Exact alarms need a separate one, and on Samsung and Xiaomi devices battery optimization will still kill your scheduled work unless you handle it.&lt;/p&gt;

&lt;p&gt;The permission audit is also a good moment to delete what you are no longer using. Every permission you remove is one less question on the Data safety form.&lt;/p&gt;

&lt;h2&gt;
  
  
  A checklist you can actually use
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;targetSdk&lt;/code&gt; and &lt;code&gt;compileSdk&lt;/code&gt; to 36&lt;/li&gt;
&lt;li&gt;Gradle, AGP and Kotlin to compatible versions, pinned JDK&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;flutter pub outdated&lt;/code&gt;, upgrade or replace the dead packages&lt;/li&gt;
&lt;li&gt;Build the release AAB, install it on a real device, exercise the features that rely on background work&lt;/li&gt;
&lt;li&gt;Check keep rules if anything silently misbehaves only in release&lt;/li&gt;
&lt;li&gt;Permission audit, then update the Data safety form&lt;/li&gt;
&lt;li&gt;Upload to a closed test track first, not straight to production&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  If you are stuck
&lt;/h2&gt;

&lt;p&gt;Most of the pain here is not the SDK bump, it is the archaeology in a project nobody has touched in two years. If your app is blocked and you are hitting one of these, leave a comment with the error and I will tell you what worked for me.&lt;/p&gt;

&lt;p&gt;If you would rather hand it off, I do this upgrade as a fixed-price job through Upwork: &lt;a href="https://www.upwork.com/freelancers/~01df9a9e8b37d44bd1" rel="noopener noreferrer"&gt;my Upwork profile&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>android</category>
      <category>googleplay</category>
      <category>mobile</category>
    </item>
  </channel>
</rss>
