Signing Android App With Gradle Using CLI

Recently I stumbled upon a problem of creating a signed Android app via command line, after spending some time on this, I have decided to post following tutorial. This problem exist in 2 situations. For example when you want to share your application publicly, but do not want to share any details about your signing key or you would like to automate building process using some kind of CI server.

Create a new key store using Android studio (or use existing one), this document shows how to create a new keystore: http://developer.android.com/tools/publishing/app-signing.html#studio After your key is created you need to setup gradle properties like this. I have edited following file: /home/w/.gradle/gradle.properties

KEYSTORE=/home/w/android/android-studio.jks
KEYSTORE_PASSWORD=my_keystore_password
KEY_ALIAS=android-studio
KEY_PASSWORD=my_key_password

This file is later used in build.gradle file like this:

apply plugin: 'com.android.application'


android {
    compileSdkVersion 20
    buildToolsVersion "20"

    defaultConfig {
        applicationId "com.wlangiewicz.test"
        minSdkVersion 15
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    signingConfigs {
        release {
            storeFile     file(KEYSTORE)
            storePassword KEYSTORE_PASSWORD
            keyAlias      KEY_ALIAS
            keyPassword   KEY_PASSWORD
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
            runProguard false
        }
        debug {
            versionNameSuffix "-SNAPSHOT"
        }
    }
}

Please note the signingConfigs option, these are read by gradle from the previously created file.

To build singed application just run:

./gradlew assembleRelease

From the root folder of your repository.

This will create signed apk file in app/build/outputs/apk. File will be called app-release.apk