Flutter
Building cross-platform? Check the Flutter guide.
This guide walks you through setting up a RunnerHub pipeline for Android projects. Build, test, and deploy your Android app with automated dependency caching and integrated code signing support.
Create .runnerhub/runnerhub.yml in your repository root:
name: Android Buildplatform: android
environment: android_sdk: 34
triggers: - push - pull_request
steps: - name: Build APK run: ./gradlew assembleDebugThis pipeline builds a debug APK using Gradle.
Expand your pipeline to include dependency resolution and tests:
name: Android Buildplatform: android
environment: android_sdk: 34
triggers: - push - pull_request
steps: - name: Install dependencies run: ./gradlew dependencies
- name: Run tests run: ./gradlew test
- name: Build APK run: ./gradlew assembleDebug
artifacts: - app/build/outputs/**/*.apk.runnerhub/runnerhub.yml to your repositoryFor Google Play distribution, build a release APK:
name: Android Release Buildplatform: android
environment: android_sdk: 34
triggers: - push
steps: - name: Build Release APK run: ./gradlew assembleRelease
artifacts: - app/build/outputs/**/*.apkBuild an App Bundle (AAB) for distribution via Google Play:
name: Android App Bundleplatform: android
environment: android_sdk: 34
triggers: - push
steps: - name: Build AAB run: ./gradlew bundleRelease
artifacts: - app/build/outputs/**/*.aabHere’s a comprehensive pipeline with code analysis:
name: Android Build & Testplatform: android
environment: android_sdk: 34
triggers: - push - pull_request
steps: - name: Run linting run: ./gradlew lint
- name: Run unit tests run: ./gradlew testDebugUnitTest
- name: Build APK run: ./gradlew assembleDebug
- name: Build test APK run: ./gradlew assembleDebugAndroidTest
artifacts: - app/build/outputs/**/*.apkRunnerHub automatically caches common dependency managers including Gradle (~/.gradle/caches and ~/.gradle/wrapper), CocoaPods, SPM, npm, yarn, and gems. Gradle caches are restored between builds automatically, keyed on build.gradle*, settings.gradle*, and gradle-wrapper.properties.
If you need to sign your release build, use environment variables:
name: Android Signed Releaseplatform: android
environment: android_sdk: 34
triggers: - push
steps: - name: Build signed APK run: ./gradlew assembleRelease env: KEYSTORE_PATH: $KEYSTORE_PATH KEY_ALIAS: $KEY_ALIAS KEYSTORE_PASSWORD: $KEYSTORE_PASSWORD KEY_PASSWORD: $KEY_PASSWORD
artifacts: - app/build/outputs/**/*.apkUpdate your build.gradle to use these environment variables for signing.
Run on-device or emulator tests:
name: Android Instrumentation Testsplatform: android
environment: android_sdk: 34
triggers: - push - pull_request
steps: - name: Run tests run: ./gradlew connectedAndroidTestIf your project uses build flavors:
name: Android Multi-Flavor Buildplatform: android
environment: android_sdk: 34
triggers: - push - pull_request
steps: - name: Build Production Debug run: ./gradlew assembleProdDebug
- name: Build Staging Debug run: ./gradlew assembleStagingDebug
- name: Build Dev Release run: ./gradlew assembleDevRelease
artifacts: - app/build/outputs/**/*.apkIf your Android project is in a subdirectory:
name: Android Monorepo Buildplatform: android
environment: android_sdk: 34
triggers: - push - pull_request
steps: - name: Build APK run: ./gradlew assembleDebug working_directory: apps/androidMake gradle executable:
- name: Setup run: chmod +x ./gradlewClear Gradle cache:
- name: Clean build run: ./gradlew clean assembleDebugCheck Gradle tasks:
- name: List tasks run: ./gradlew tasksView build configuration:
- name: Debug build run: ./gradlew assemble --infoAdd secrets and API keys via the dashboard:
steps: - name: Build run: ./gradlew assembleRelease env: GOOGLE_PLAY_KEY: $GOOGLE_PLAY_KEY API_BASE_URL: $API_BASE_URLUpdate your build.gradle or local.properties to use these variables.
Flutter
Building cross-platform? Check the Flutter guide.
React Native
Using React Native? See the React Native guide.
Pipeline Reference
Explore all YAML options in the pipeline reference.
Troubleshooting
Hit a problem? Check the troubleshooting guide.