CategoriesAndroidAutomated testsProgramming

Menerapkan CI/CD dalam Development Aplikasi Android dengan GitHub Actions

Kamu baru saja menyelesaikan development aplikasi Android Anda. Fitur yang sudah kamu rancang dengan susah payah selama beberapa waktu terakhir. Biasanya untuk mempublikasikannya, kamu harus melalui proses yang melelahkan, seperti :

  • Testing manual di berbagai perangkat dan emulator (bikin komputer lemot karena prosesnya yang berat dan memakan memory kalau pakai emulator)
  • Build APK manual di Android Studio (biasanya lama dan membuat komputer jadi lemot karena proses yang berat)
  • Proses signing manual (perlu cari file keystore dan passwordnya)
  • Upload Aplikasi ke Google Play Console manual (perlu menuju ke website Google Play Console dan klik-klik beberapa menu)
  • Mengulangi Proses dari awal kalau ada bug di aplikasi saat aplikasi sudah live (karena ada yang terlewat saat testing manual)

Mungkin kalau aplikasi mu jarang Update, proses itu tak akan terasa melelahkan. tapi kalau aplikasi sering update akan terasa melelahkan. Jika sudah merasa lelah kamu butuh CI/CD untuk membantu proses Deploying aplikasi.

CI/CD: ‘Auto Pilot’ untuk Developer Android

Bayangkan CI/CD seperti asisten pribadi yang:

🛠️ Tukang Build Handal

  • Setiap kali ada kode baru, langsung dibuild untuk semua variant
  • Tidak pernah lupa sync Gradle atau clean project

🔍 Quality Inspector

  • Jalankan semua test (unit, UI, integration) tanpa mengeluh
  • Cek kualitas kode dengan Lint & Detekt

📦 Packaging Expert

  • Sign APK/AAB dengan aman (tanpa bocorin keystore password)
  • Generate changelog otomatis dari commit messages

🚀 Deployment Specialist

  • Upload ke Firebase App Distribution untuk internal testing
  • Deploy ke Google Play Store saat Anda siap rilis

CI/CD bisa melakukan semuanya secara otomatis dan tanpa memakai resource / perangkatmu untuk memproses nya. Cukup powerfull kan ?
ada beberapa platform CI/CD yang bisa digunakan di internet yang bisa dipakai. tapi yang paling familiar, mudah dan gratis adalah Github Action. kamu bisa bikin proses CI/CD semudah push code ke git.
bagaimana cara nya ? langsung kita praktekkan.

CI/CD: ‘Auto Pilot’ untuk Developer Android

1. Siapkan repository di github (kalau belum ada bikin baru)

2. Siapkan code yang akan di push ke repository github.

3. Buat folder baru di root project dengan nama “.github”
lalu buat satu folder lagi di dalam folder “.github” dengan nama “workflows” (pastikan nama nya tidak salah dan memakai lowercase)

4. buat satu file baru di dalam folder “workflows” dengan nama “android-ci.yml” (bebas memakai nama lain, asalkan extension nya .yml)

5. isi file “android-ci.yml” dengan kode berikut :

name: Android CI

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:
    name: Build & Test
    runs-on: ubuntu-latest

    steps:
      # 1. Checkout source code
      - name: Checkout Code
        uses: actions/checkout@v3

      # 2. Setup Java JDK
      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: '17'

      # 3. Give permission to gradlew
      - name: Grant execute permission for gradlew
        run: chmod +x ./gradlew

      # 4.1 Decode Keystore
      - name: Decode Keystore
        run: |
          echo "${{ secrets.KEYSTORE_FILE }}" | base64 -d > keystore.jks
        shell: bash

      # 4.2 Generate local.properties
      - name: Generate local.properties
        run: |
         echo "RAWG_API_KEY=${{ secrets.RAWG_API_KEY }}" >> local.properties
         echo "RAWG_CERT_PIN=${{ secrets.RAWG_CERT_PIN }}" >> local.properties
         echo "BASE_URL=${{ secrets.BASE_URL }}" >> local.properties
         echo "HOST_NAME=${{ secrets.HOST_NAME }}" >> local.properties
         echo "PASS_KEY=${{ secrets.PASS_KEY }}" >> local.properties
         echo "KEYSTORE_FILE=keystore.jks" >> local.properties
         echo "KEYSTORE_PASSWORD=${{ secrets.KEYSTORE_PASSWORD }}" >> local.properties
         echo "KEY_ALIAS=${{ secrets.KEY_ALIAS }}" >> local.properties
         echo "KEY_PASSWORD=${{ secrets.KEY_PASSWORD }}" >> local.properties

      # 5. Run Unit Test
      - name: Run Unit Tests
        run: ./gradlew testDebugUnitTest

      # 6. Build RELEASE APK
      - name: Build Release APK
        run: ./gradlew :app:assembleRelease :favourite:assembleRelease

      # 7. Upload APK sebagai artifact
      - name: Upload Release APK
        uses: actions/upload-artifact@v4
        with:
          name: app-release.apk
          path: ./app/build/outputs/apk/release/app-release.apk

Penjelasan :
Step 1 : Github Action akan checkout code sesuai branch yang di definisikan di bagian atas (kamu bisa sesuaikan sesuai dengan nama branch mu)
Step 2 : Github Action men-setup JDK yang akan dipakai untuk build apk (disini saya memakai JDK 17 karena di gradle aplikasinya memakai JDK 17, kamu bisa ganti sesuai dengan JDK yang kamu pakai)
Step 3 : Github Action mengatur permission file gradlew agar executable untuk menjalankan proses build
Step 4.1 : Proses generate file keystore. jadi awalnya keystore nya disimpan di Environment Variable Github berupa file String.
Cara generate nya adalah seperti ini :
jalankan command ini di Terminal (sebelumnya atur agar terminal membuka folder project)

openssl base64 -in <path-to-keystore>.jks | tr -d '\n' > keystore_base64.txt

jika kamu memakai Windows tanpa WSL bisa memakai command ini di cmd

[Convert]::ToBase64String([IO.File]::ReadAllBytes("<path-to-keystore>.jks")) > keystore_base64.txt

setelah itu simpan isi dari file txt tersebut ke Github Secrets dengan pergi ke Repository Github mu > Settings > Secrets and Variables > Action. klik New repository secret untuk menambahkan.

beri nama dan paste text yang kamu copy dari file txt tadi.

tambahkan secret lain sesuai kebutuhanmu seperti Keystore password, Key alias, Key password
sebelum itu, atur build.gradle (app) seperti ini agar aplikasi bisa mengambil isi dari Github Secrets

Step 4.2 : Jika kamu sudah mengatur ulang build.gradle (app) mu, pasti kamu butuh file local.properties. step ini akan men-generate file local.properties nya. sesuaikan isi nya sesuai dengan nama Github Secrets yang kamu tambahkan tadi.
Step 5 : Github Action akan me-running Unit Test
Step 6 : Github Action akan memulai proses Build APK
Step 7 : Proses upload APK ke Artifact Github.

Kamu bisa menambahkan step lain tanpa batas. termasuk Instrumentation Testing dan Upload ke Google Play Console. pada Artikel ini saya tidak menyertakan code untuk step nya.

6. Setelah selesai menulis code nya, sekarang bisa langsung Push ke Github Repository kamu.

7. Jika berhasil ter-push. Github Action akan otomatis mengenali perintah CI/CD dari file yang ada di folder .github/workflows dan akan memulai proses CI/CD. proses nya bisa dilihat di tab “Actions” di repository mu.

Jika tidak muncul apa-apa mungkin ada yang salah pada file config CI/CD nya.
Jika code berhasil di build dan tidak ada error maupun test failed, akan muncul centang hijau.
Jika gagal build atau test failed, akan muncul tanda silang merah.

Klik untuk melihat detail nya, akan ada “Artifacts” yang menjadi tempat hasil build apk dari proses CI/CD.

Cukup mudah bukan proses nya ? disini selain men-otomatisasi proses build apk, kamu mem-backup code mu ke Github Repository mu sehingga tidak ada lagi cerita lupa Push Code sehingga Code hilang / tidak bisa di rollback.

Selain untuk Android. kamu bisa menggunakan CI/CD di Github Action untuk Platform lain seperti Flutter, Web dan ios

Published by Ahmad Saifur Ridlo

Android Developer at Algostudio.net