Skip to content

Google Play upload errorGoogle Play: “You uploaded an APK or Android App Bundle that was signed in debug mode”

This Play Console error means the bundle you uploaded was signed with the Android debug key, which Google Play doesn’t accept. Android Studio and Flutter use that key by default. Sign a release build with your own upload key, then upload the new bundle.

Short answer

Create an upload keystore if you don’t have one, point the release build type at it in Gradle, and build a release bundle (flutter build appbundle, or Build > Generate Signed App Bundle in Android Studio). Check the signer with keytool before you upload. Keep the keystore and passwords out of git, and give CI the same file through secrets.

Rather not fix it yourself? App Fix Ticket starts with a fixed-price diagnosis, then a fixed price for the fix before any fix work.

Why the bundle is debug signed, and the fix

  1. 01

    The debug key signed the build

    “most app stores (including the Google Play Store) do not accept apps signed with a debug certificate for publishing.” Android Developers, Sign your app

    Every debug or run build is signed with a key the tools make for you. It is fine for testing and refused for publishing.

  2. 02

    Flutter’s release build still uses the debug key

    “When building your app in release mode, configure Gradle to use your upload key.” Flutter docs, Build and release an Android app

    A new Flutter project signs release builds with the debug key so flutter run --release works. Replace that line with a release signing config that reads android/key.properties, which holds storePassword, keyPassword, keyAlias and storeFile.

    // android/app/build.gradle.kts, at the top
    import java.util.Properties
    import java.io.FileInputStream
    
    val keystoreProperties = Properties()
    val keystorePropertiesFile = rootProject.file("key.properties")
    if (keystorePropertiesFile.exists()) {
      keystoreProperties.load(FileInputStream(keystorePropertiesFile))
    }
    
    // inside android { }
    signingConfigs {
      create("release") {
        keyAlias = keystoreProperties["keyAlias"] as String
        keyPassword = keystoreProperties["keyPassword"] as String
        storeFile = keystoreProperties["storeFile"]?.let { file(it) }
        storePassword = keystoreProperties["storePassword"] as String
      }
    }
    buildTypes {
      release {
        signingConfig = signingConfigs.getByName("release")
      }
    }
  3. 03

    CI builds without the keystore

    “Keep the key.properties file private; don't check it into public source control.” Flutter docs, Build and release an Android app

    key.properties and the keystore should stay out of git, so a CI job doesn’t have them unless you add them. Store both as CI secrets, write them to disk in the job, and fail the job if they are missing.

  4. 04

    Check the signer before you upload

    keytool prints the certificate that signed the bundle. A debug build shows CN=Android Debug as the owner.

    keytool -printcert -jarfile build/app/outputs/bundle/release/app-release.aab
  5. 05

    The upload key isn’t the app signing key

    “you need to sign your app bundle with an upload key before uploading it to the Play Console, and Play App Signing takes care of the rest.” Android Developers, Sign your app

    With Play App Signing, you sign with an upload key and Google signs the copy users install. If Play then says the bundle is signed with the wrong key, that is a different error: the upload key doesn’t match the one Play has on file.

Checked against the vendor’s docs on : Android Developers: Sign your app; Flutter docs: Build and release an Android app.

Rather hand it over?

Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.

“Very responsive, attentive to fixing bugs, and completed the project as needed! Thank you!”
A buyer in the United States, July 2022. Shopify on Fiverr
All 127 Fiverr reviews

Related: Google Play debuggable APK or bundle · Google Play app bundle signed with the wrong key · Google Play version code already used · Google Play target API level 35

Questions

More on this launch

Do I need a new keystore for every release?

No. Make the upload keystore once and use it for every release. Back it up. If the app uses Play App Signing, a lost upload key can be reset through the Play Console, as the Android signing guide describes.

Can I upload the debug build to internal testing?

Expect the same error. Play doesn’t accept debug-signed builds for publishing, and testing tracks are published releases. Use the same release build for testing and production.

Can you fix it for me?

If one bug is the whole problem, the App Fix Ticket covers it: a written diagnosis first, then the fix. If the app has more going on, the Launch Check is a written check of the whole app. Each issue found is rated critical, high, medium or low, with where it is and how it was confirmed. No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.

Something else?

Describe it and get a written quote

Describe the app and where it is in the launch. You get a written scope, a fixed price and a timeline; Simon replies by email, usually within one business day.