Autoplay

Gradle plugin for publishing Android artifacts to Google Play.

Fetures

  • Autoplay is optimized for CI/CD usage:

    • it does not trigger assembly task - you can reuse build artifacts from previous build steps;
    • it accepts JSON key as base64-encoded string, which is secure and convenient way of providing sensitive data.
  • Autoplay is developer friendly:

    • it does not require storing any dummy keys in source control;
    • it can be used without provided credentials in development;
    • it has a single publish task for uploading akp, mapping file and release notes.
  • Autoplay is reliable and future-proof:

    • it has very clean and concise implementation, which is easy to understand;
    • it's covered by unit tests and easy to maintain and extend;
    • it's built using latest technologies and tools like Kotlin, Kotlin-DSL for Gradle, Android Gradle plugin etc.

Usage

In the main build.gradle

buildscript {
  repositories {
    google()
    jcenter()  
  }
  dependencies {
    classpath "de.halfbit:autoplay:<version>"
  }
}

Releases of Autoplay are published to mavenCentral() repository. Check releases section to find lastest release version.

In the application module's build.gradle

apply plugin: 'com.android.application'
apply plugin: 'android-autoplay'

autoplay {
    track "internal"
    secretJsonBase64 project.hasProperty('SECRET_JSON') ? project.property('SECRET_JSON') : ''
}

Call ./gradlew tasks and you will see a new publishing task publishApk<BuildVariant> in the list. Autoplay adds this task for each build variant of release type. For a project without custom build flavors configured, the task is called publishApkRelease.

Now you can call this task from a central build script. Here is an example of how to use it with Gitlab CI.

stages:
  - assemble
  - release

assemble:
  stage: assemble
  only:
    - master
  script:
    - ./gradlew clean assembleRelease -PSTORE_PASS=${STORE_PASS} -PKEY_PASS=${KEY_PASS}
  artifacts:
    paths:
      - app/build/outputs/

release:
  stage: release
  dependencies:
    - assemble
  only:
    - master
  script:
    - ./gradlew publishApkRelease -PSECRET_JSON=${SECRET_JSON}

You can encode JSON key file into base64 string using following shell command (linux, mac)

base64 -i secret.json -o -

and provide the value to the build script using a protected variable.

Release Notes

Autoplay takes apk- and mapping-files for uploading from the respective build output directories. Release notes assigned to a release should be provided additionally. Autoplay expects release notes to be stored under src/main/autoplay/release-notes directory in accordance with the structure shown down below.

src
  +- main
       +- java
       +- autoplay
            +- release-notes
                 +- <track>           e.g. internal
                     +- <locale>.txt  e.g. en-US.txt

GitHub