<?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: Praveen</title>
    <description>The latest articles on DEV Community by Praveen (@praveen_playconsole).</description>
    <link>https://dev.to/praveen_playconsole</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%2F4195939%2Fe98d5aff-98ab-41e1-a629-3fc99d371123.jpg</url>
      <title>DEV Community: Praveen</title>
      <link>https://dev.to/praveen_playconsole</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/praveen_playconsole"/>
    <language>en</language>
    <item>
      <title>"Version Code Already Used" and Other Upload Errors That Stall a Google Play Closed Test</title>
      <dc:creator>Praveen</dc:creator>
      <pubDate>Tue, 20 Oct 2026 10:14:43 +0000</pubDate>
      <link>https://dev.to/praveen_playconsole/version-code-already-used-and-other-upload-errors-that-stall-a-google-play-closed-test-2803</link>
      <guid>https://dev.to/praveen_playconsole/version-code-already-used-and-other-upload-errors-that-stall-a-google-play-closed-test-2803</guid>
      <description>&lt;p&gt;Nothing stalls a Google Play closed test quite like an upload that won't go through. Your testers are waiting on the opt-in page, the 14-day window can't start for them until there's a release to install, and Play Console is showing a red error under the bundle you just dragged in.&lt;/p&gt;

&lt;p&gt;These are the upload errors I've run into most on the closed track, what each one actually means, and the fix that works.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fslw5cyy4y3pdi7wlhltj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fslw5cyy4y3pdi7wlhltj.png" alt="Upload errors that stall a Google Play closed test" width="799" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. "Version code 1 has already been used. Try another version code."
&lt;/h2&gt;

&lt;p&gt;Every bundle you upload to an app needs a &lt;code&gt;versionCode&lt;/code&gt; higher than any bundle uploaded before, on any track. That includes builds you uploaded to Internal testing and then threw away. Play Console remembers them.&lt;/p&gt;

&lt;p&gt;Fix it in your module's &lt;code&gt;build.gradle.kts&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="nf"&gt;android&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;defaultConfig&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;versionCode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;      &lt;span class="c1"&gt;// bump this on every upload&lt;/span&gt;
        &lt;span class="n"&gt;versionName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1.0.6"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;versionName&lt;/code&gt; is what testers see and can repeat. &lt;code&gt;versionCode&lt;/code&gt; can't. I check &lt;strong&gt;App bundle explorer&lt;/strong&gt; in Play Console to see the highest code already used, then go one above it. If you build in CI, derive it from the build number so you never think about it again.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. "Your Android App Bundle is signed with the wrong key"
&lt;/h2&gt;

&lt;p&gt;The message includes the SHA-1 fingerprint Play expects. Compare it with your keystore:&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;-list&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;-alias&lt;/span&gt; upload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the fingerprints differ, you probably signed with the debug key or an old keystore from another project. Find the right upload keystore and rebuild. If the upload key is truly lost and your app uses Play App Signing, the owner can request an upload key reset from the &lt;strong&gt;App integrity&lt;/strong&gt; section in Play Console. It takes a while to go through, so don't plan a tester start date around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. "You uploaded a debuggable APK or Android App Bundle"
&lt;/h2&gt;

&lt;p&gt;You built the debug variant, or something set &lt;code&gt;debuggable true&lt;/code&gt; on release. Build the release variant (&lt;code&gt;./gradlew bundleRelease&lt;/code&gt;) and check that no &lt;code&gt;buildTypes&lt;/code&gt; block flips debuggable on. This one bites people who copy a release config from an old sample.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpvxt1degdvqjja8c5898.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpvxt1degdvqjja8c5898.png" alt="Pre-upload checklist for a Google Play closed track release" width="799" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Target API level errors
&lt;/h2&gt;

&lt;p&gt;Play sets a minimum &lt;code&gt;targetSdk&lt;/code&gt; for new apps and updates, and it moves up over time. If your upload is blocked for its target API level, raise &lt;code&gt;targetSdk&lt;/code&gt; to the level named in the error, then actually run the app on a recent Android version before you upload again. New target levels change behaviour (permissions, background work, edge-to-edge), and you'd rather find that yourself than have a closed tester find it on day three.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. "You need to use a different package name"
&lt;/h2&gt;

&lt;p&gt;Package names are permanent and unique across Play. If you used &lt;code&gt;com.example.*&lt;/code&gt; or a name that's already taken, change &lt;code&gt;applicationId&lt;/code&gt; and create the app again in Play Console. This is a good moment to pick the final name, because you can't rename it later.&lt;/p&gt;

&lt;h2&gt;
  
  
  After the upload works
&lt;/h2&gt;

&lt;p&gt;A successful upload isn't the finish line. Before inviting anyone:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Roll the release out on the &lt;strong&gt;closed&lt;/strong&gt; testing track, not just Internal testing. Internal testers don't count toward the 12-tester, 14-day requirement for newer personal accounts.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Publishing overview&lt;/strong&gt; and send the changes for review if they're waiting there.&lt;/li&gt;
&lt;li&gt;Make sure your testers list (email list or Google Group) is saved on the closed track and the opt-in link works from a tester's phone.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjiz3yuici00ktgtmnx2k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjiz3yuici00ktgtmnx2k.png" alt="12testers.pro Google Play closed testing checklist for production access" width="799" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  If testers are the next problem
&lt;/h2&gt;

&lt;p&gt;Once the build is live, the requirement is at least 12 testers opted in continuously for 14 days. If you can't gather that many people, 12testers.pro is one budget option: a managed closed test for $8 per app, with 14 physical Android devices joining through a Google Group or your opt-in link and a 16-day monitored window. No Play Console password is shared, and Google still makes the final production access decision. Their &lt;a href="https://12testers.pro/blog/google-play-closed-testing-checklist-2026" rel="noopener noreferrer"&gt;Google Play closed testing checklist for production access&lt;/a&gt; is a handy pass to run before you apply.&lt;/p&gt;

&lt;p&gt;Fix the upload, check the track, then get your testers in. In that order, the 14 days start counting as early as they can.&lt;/p&gt;

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