How to Sign and Generate a Release AAB in Flutter

When publishing your Flutter app on Google Play, you cannot use a debug APK or AAB. You must generate a release-signed bundle. Here’s a quick guide:

1. Generate a Keystore

keytool -genkey -v -keystore ~/my-release-key.keystore \
-alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
  

This creates a keystore file. Keep it safe, as it will be used to sign your app.

2. Create key.properties

In the android/ folder of your project, create a key.properties file:

storePassword=your_keystore_password
keyPassword=your_key_password
keyAlias=my-key-alias
storeFile=/absolute/path/to/my-release-key.keystore
  

3. Configure build.gradle

Flutter uses two Gradle files for Android. You need to configure both:

a) Project-level android/build.gradle

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.buildDir = "../build"

subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
    project.evaluationDependsOn(":app")
}

tasks.register("clean", Delete) {
    delete rootProject.buildDir
}

// Load keystore properties
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file("key.properties")
if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
// Make it available to the app module
ext.keystoreProperties = keystoreProperties

b) App-level android/app/build.gradle

def keystoreProperties = rootProject.ext.keystoreProperties

android {
    namespace = "com.example.quransecrets"
    compileSdk = flutter.compileSdkVersion
    ndkVersion = flutter.ndkVersion

    defaultConfig {
        applicationId = "com.example.quransecrets"
        minSdk = flutter.minSdkVersion
        targetSdk = flutter.targetSdkVersion
        versionCode = flutter.versionCode
        versionName = flutter.versionName
    }

    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
            storePassword keystoreProperties['storePassword']
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled false
            shrinkResources false
        }
    }
}

flutter {
    source = "../.."
}

4. Build the Release AAB

Run the following command to generate a Play Store-ready App Bundle:

flutter build appbundle --release

Your signed AAB will be located at:

build/app/outputs/bundle/release/app-release.aab

5. Optional: Build a Release APK

If you also want a release APK for testing:

flutter build apk --release

It will be located in:

build/app/outputs/flutter-apk/app-release.apk

6. Verify the Signature

You can check if your AAB is signed properly with:

jarsigner -verify -verbose -certs app-release.aab

Now your Flutter app is signed and ready to be uploaded to the Google Play Store.

Post a Comment

0 Comments