• Stars
    star
    191
  • Rank 202,877 (Top 4 %)
  • Language
    Kotlin
  • License
    Apache License 2.0
  • Created almost 3 years ago
  • Updated 8 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

CI/CD Automated Build Android App Bundle / APK With Github Action

Automated Build Android Using Github Action

Android CI Download Generated APK AAB Upload Generated APK AAB Scan with Detekt pages-build-deployment Generated APK AAB (Clean)

  • Available on Google Dev Library Click Here
  • Project Github Action Script YAML
  • Using Github Workflows
  • Automated Build AAB (release)
  • Automated Build APK (release and debug)
  • Have Bundle Tool
  • Download Artifact
  • Upload Artifact
  • Clear (Articfact naming)
  • Sample Naming : ${date_today} - ${repository_name} - ${playstore_name} - APK(s) release generated
  • Private Repository Tested (Passed Build App bundle(s) and APK generated successfully)
  • Full Code For Github Action Workflows Click Here

Version Release

This Is Latest Release

$version_release = 2.2.3

What's New??

* Update Action Script *
* Update Android Studio Latest Version *
* Update Gradle Latest Version *
* Update Kotlin Latest Version *
* Update Java Version From 11 to 17 *
* Update Java Action version to 3 *
* Update Android SDK Tools * 
* Add Bundletool.jar for workflow github action *

Article Sources

Guide Sources (Github Action)

How To Use Workflows

Step 1. Upload Your Project on Github

  • Project must be android studio project using gradle

Step 2. Create files github workflows

  • Create Files with name generate-apk-aab-debug-release.yml inside folder .github/workflows/
  • .github/workflows/generate-apk-aab-debug-release.yml this is position files

Step 3. Create Code

name: Generated APK AAB (Upload - Create Artifact To Github Action)

env:
  # The name of the main module repository
  main_project_module: app

  # The name of the Play Store
  playstore_name: Frogobox ID

on:

  push:
    branches:
      - 'release/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      # Set Current Date As Env Variable
      - name: Set current date as env variable
        run: echo "date_today=$(date +'%Y-%m-%d')" >> $GITHUB_ENV

      # Set Repository Name As Env Variable
      - name: Set repository name as env variable
        run: echo "repository_name=$(echo '${{ github.repository }}' | awk -F '/' '{print $2}')" >> $GITHUB_ENV

      - name: Set Up JDK
        uses: actions/setup-java@v3
        with:
          distribution: 'zulu' # See 'Supported distributions' for available options
          java-version: '17'
          cache: 'gradle'

      - name: Change wrapper permissions
        run: chmod +x ./gradlew

      # Run Tests Build
      - name: Run gradle tests
        run: ./gradlew test

      # Run Build Project
      - name: Build gradle project
        run: ./gradlew build

      # Create APK Debug
      - name: Build apk debug project (APK) - ${{ env.main_project_module }} module
        run: ./gradlew assembleDebug

      # Create APK Release
      - name: Build apk release project (APK) - ${{ env.main_project_module }} module
        run: ./gradlew assemble

      # Create Bundle AAB Release
      # Noted for main module build [main_project_module]:bundleRelease
      - name: Build app bundle release (AAB) - ${{ env.main_project_module }} module
        run: ./gradlew ${{ env.main_project_module }}:bundleRelease

      # Upload Artifact Build
      # Noted For Output [main_project_module]/build/outputs/apk/debug/
      - name: Upload APK Debug - ${{ env.repository_name }}
        uses: actions/upload-artifact@v3
        with:
          name: ${{ env.date_today }} - ${{ env.playstore_name }} - ${{ env.repository_name }} - APK(s) debug generated
          path: ${{ env.main_project_module }}/build/outputs/apk/debug/

      # Noted For Output [main_project_module]/build/outputs/apk/release/
      - name: Upload APK Release - ${{ env.repository_name }}
        uses: actions/upload-artifact@v3
        with:
          name: ${{ env.date_today }} - ${{ env.playstore_name }} - ${{ env.repository_name }} - APK(s) release generated
          path: ${{ env.main_project_module }}/build/outputs/apk/release/

      # Noted For Output [main_project_module]/build/outputs/bundle/release/
      - name: Upload AAB (App Bundle) Release - ${{ env.repository_name }}
        uses: actions/upload-artifact@v3
        with:
          name: ${{ env.date_today }} - ${{ env.playstore_name }} - ${{ env.repository_name }} - App bundle(s) AAB release generated
          path: ${{ env.main_project_module }}/build/outputs/bundle/release/

Step 4. Automated Build on Actions tab on your github repository

ScreenShot

Step 5. Download Artifact

ScreenShot

Extras (Private Repository Succesfully Build Proven)

ScreenShot

Result Generated from Github Action

APK(s) debug generated

ScreenShot

APK(s) release generated

ScreenShot

App bundle(s) release generated

ScreenShot

Clean Up Artifact

name: Generated APK AAB (Clean)

on:
  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

  schedule:
    # Every day at 1am
    - cron: '0 1 * * *'

jobs:
  remove-old-artifacts:
    runs-on: ubuntu-latest
    timeout-minutes: 10

    steps:
      - name: Clean all artifacts
        uses: c-hive/gha-remove-artifacts@v1
        with:
          age: '60 seconds' # '<number> <unit>', e.g. 5 days, 2 years, 90 seconds, parsed by Moment.js
          # Optional inputs
          # skip-tags: true
          # skip-recent: 5

Using Bundle Tool

Step 1. Prepare Bundle Tool

Step 2. Code Action in file android-ci-generate-apk-aab-upload-3.yml

name: Generated APK AAB 2 Bundle Tool (Upload - Create Artifact To Github Action)

env:
  # The name of the main module repository
  main_project_module: app

  # The name of the Play Store
  playstore_name: Frogobox ID

  # Keystore Path
  ks_path: frogoboxdev.jks

  # Keystore Password
  ks_store_pass: cronoclez

  # Keystore Alias
  ks_alias: frogobox

  # Keystore Alias Password
  ks_alias_pass: xeonranger

on:

  push:
    branches:
      - 'release/**'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      # Set Current Date As Env Variable
      - name: Set current date as env variable
        run: echo "date_today=$(date +'%Y-%m-%d')" >> $GITHUB_ENV

      # Set Repository Name As Env Variable
      - name: Set repository name as env variable
        run: echo "repository_name=$(echo '${{ github.repository }}' | awk -F '/' '{print $2}')" >> $GITHUB_ENV

      - name: Set Up JDK
        uses: actions/setup-java@v3
        with:
          distribution: 'zulu' # See 'Supported distributions' for available options
          java-version: '17'
          cache: 'gradle'

      - name: Change wrapper permissions
        run: chmod +x ./gradlew

      # Run Tests Build
      - name: Run gradle tests
        run: ./gradlew test

      # Run Build Project
      - name: Build gradle project
        run: ./gradlew build

      # Create APK Debug
      - name: Build apk debug project (APK) - ${{ env.main_project_module }} module
        run: ./gradlew assembleDebug

      # Create APK Release
      - name: Build apk release project (APK) - ${{ env.main_project_module }} module
        run: ./gradlew assemble

      # Create Bundle AAB Release
      # Noted for main module build [main_project_module]:bundleRelease
      - name: Build app bundle release (AAB) - ${{ env.main_project_module }} module
        run: ./gradlew ${{ env.main_project_module }}:bundleRelease

      # - name: Build APK(s) Debug from bundle using bundletool
      #   run: java -jar ".github/lib/bundletool.jar" build-apks --bundle=${{ env.main_project_module }}/build/outputs/bundle/debug/${{ env.artifact_name }}-debug.aab --output=${{ env.main_project_module }}/build/outputs/bundle/debug/${{ env.artifact_name }}-debug.apks --mode=universal

      - name: Set Env Artifact name from generated aab
        run: |
          cd ${{ env.main_project_module }}/build/outputs/bundle/release/
          files=(*)
          echo "generated_name_aab=${files[0]%.*}" >> $GITHUB_ENV

      # Build APK From Bundle Using Bundletool
      # Noted For Output [main_project_module]/build/outputs/bundle/release/
      - name: Build APK(s) Release from bundle using bundletool (Path same with bundle output)
        run: java -jar ".github/lib/bundletool.jar" build-apks --bundle=${{ env.main_project_module }}/build/outputs/bundle/release/${{ env.generated_name_aab }}.aab --output=${{ env.main_project_module }}/build/outputs/bundle/release/${{ env.generated_name_aab }}.apks --mode=universal --ks="app/${{ env.ks_path }}" --ks-pass=pass:${{ env.ks_store_pass }} --ks-key-alias=${{ env.ks_alias }} --key-pass=pass:${{ env.ks_alias_pass }}

      # Duplicate APK(s) Release to zip file and extract
      - name: Duplicate APK(s) Release to zip file and extract
        run: |
          cd ${{ env.main_project_module }}/build/outputs/bundle/release/
          unzip -p ${{ env.generated_name_aab }}.apks universal.apk > ${{ env.generated_name_aab }}.apk

      # Upload Artifact Build
      # Noted For Output [main_project_module]/build/outputs/apk/debug/
      - name: Upload APK Debug - ${{ env.repository_name }}
        uses: actions/upload-artifact@v3
        with:
          name: ${{ env.date_today }} - ${{ env.playstore_name }} - ${{ env.repository_name }} - APK(s) debug generated
          path: ${{ env.main_project_module }}/build/outputs/apk/debug/

      # Noted For Output [main_project_module]/build/outputs/apk/release/
      - name: Upload APK Release - ${{ env.repository_name }}
        uses: actions/upload-artifact@v3
        with:
          name: ${{ env.date_today }} - ${{ env.playstore_name }} - ${{ env.repository_name }} - APK(s) release generated
          path: ${{ env.main_project_module }}/build/outputs/apk/release/

      # Noted For Output [main_project_module]/build/outputs/bundle/release/
      - name: Upload AAB (App Bundle) Release - ${{ env.repository_name }}
        uses: actions/upload-artifact@v3
        with:
          name: ${{ env.date_today }} - ${{ env.playstore_name }} - ${{ env.repository_name }} - App bundle(s) AAB release generated
          path: ${{ env.main_project_module }}/build/outputs/bundle/release/

Step 3. Running Action

ScreenShot

Step 4. Waiting Running Action

Waiting for running action

ScreenShot

Check periodically, afraid there is an error

ScreenShot

Step 5. Download Artifact and Extract it

Download Artifact (AAB Artifact)

ScreenShot

Extract it !!! Done

ScreenShot

Colaborator

Very open to anyone, I'll write your name under this, please contribute by sending an email to me

  • Mail To [email protected]
  • Subject : Github _ [Github-Username-Account] _ [Language] _ [Repository-Name]
  • Example : Github_amirisback_kotlin_admob-helper-implementation

Name Of Contribute

  • Muhammad Faisal Amir
  • Waiting List
  • Waiting List

Waiting for your contribute

Attention !!!

  • Please enjoy and don't forget fork and give a star
  • Don't Forget Follow My Github Account

ScreenShot

More Repositories

1

frogo-recycler-view

RecyclerView With No Adapter | Available For Jetpack Compose
Kotlin
152
star
2

keyboard

Custom Keyboard Like Google Keyboard
Kotlin
104
star
3

frogo-admob

Library Helper For Implementation All Admob Function
Kotlin
78
star
4

frogo-notification

Frogo Notification - Easy Way For Create Notification
Kotlin
49
star
5

nutrition-framework

Skripsi / TA of Muhammad Faisal Amir - Telkom University 2021
Kotlin
42
star
6

desktop-news-app

Playground UI Compose in Desktop Apps
Kotlin
20
star
7

frogo-log

Frogo Log - Custom Log For Your Easy Development Tools
Kotlin
19
star
8

jago-sholat

Muslim Mobile Apps, Aplikasi berbasis android yang di khususkan untuk pencatatan sholat
Java
19
star
9

vpn

Viprox VPN, Easy For Reskin VPN
Java
19
star
10

piano-tiles-clone

Game Piano Tiles Clone (Android Studio) - Kotlin and Java
Kotlin
18
star
11

consumable-code-movie-tmdb-api

Retrofit has been Handled !! || Consumable code for request Public API (TMDb API) || πŸ“š πŸŽ₯
Kotlin
17
star
12

finpro

πŸ“š πŸš€ Finpro - An Android Based Final Project Management System || Proyek Akhir || Skripsi || Manajemen Proyek Akhir - Skripsi || Bimbingan, Monev, Sidang
Java
17
star
13

android-programmer-interview-cheat-sheet

Android Programmer Interview Test Cheat Sheet
12
star
14

minimum-mvvm-koin

MVVM with Simple Example
Kotlin
11
star
15

cleaner

Cleaner Apps Android
Kotlin
11
star
16

jitpack-library-kotlin-dsl-guide

Tutorial For openJDK 11 and AGP 7.0.0+ | Tutorial Multi Library Android in 1 Project | Kotlin DSL .kts
Kotlin
11
star
17

amirisback

Muhammad Faisal Amir Profile Description
JavaScript
10
star
18

awesome-project-catalogue

Check this out !!! all awesome project from amirisback
10
star
19

consumable-code-news-api

πŸ“° πŸ“š Retrofit has been Handled !! || Consumable code for request API (News API)
Kotlin
9
star
20

awesome-minimum-mvvm-sample

Awesome Sample Minimum MVVM
9
star
21

minimum-mvvm-koin-room-database

MVVM With Simple Room Database
Kotlin
9
star
22

recycler-coroutines

RecyclerView Auto Add Data Using Coroutines
Kotlin
8
star
23

minimum-mvvm-koin-network-api

MVVM with simple HTTP Request Example
Kotlin
8
star
24

android-admob-app-open-ad

Research - Admob App Open
Kotlin
8
star
25

pray-box

Pray Box, Catat Shalat, Muslim Mobile Apps, Aplikasi berbasis android yang di khususkan untuk pencatatan sholat
Kotlin
7
star
26

speech-booster

Speech Booster is Learning Speech by Recording Video
Kotlin
7
star
27

easy-kotlin-lib-jar

Repository Sample For Native Kotlin Library
Kotlin
7
star
28

sticker-whatsapp

Base Stiker WhatsApp With Key Store
Java
7
star
29

remote-data-source

Remote Data Source Json
HTML
7
star
30

desktop-experimental-catalgoue

Desktop Experimental Catalogue
7
star
31

wallpaper

Wallpaper app using library frogobox/frogo-consume-api
Kotlin
7
star
32

kasir

POS (Point Of Sales) untuk Kasir Android Apps, dilengkapi dengan barcode scanner untuk memudahkan dalam menginput produk
Java
7
star
33

jitpack-library-groovy-guide

Tutorial For openJDK 11 and AGP 7.0.0+ | Tutorial Multi Library Android in 1 Project | Groovy
Kotlin
7
star
34

desktop-promadika

Program Informasi Pendataan Nikah
Java
6
star
35

nutrition-framework-desktop

Consumer desktop from nutrition-framework API
Kotlin
6
star
36

replacer-generator

Hilih Text Generator
Java
6
star
37

datamining-clustering

Data Mining about clustering
Python
6
star
38

ai-fuzzy-logic

Implement Fuzzy Logic
Java
6
star
39

profile-android

Amir's Android Profile App
Kotlin
6
star
40

2048

2048 Games
Kotlin
6
star
41

music-compressor

Music Mp3 Compressor
Python
6
star
42

kmm-compose

Experimental Jetpack Compose Library UI Multi-Platform
Kotlin
5
star
43

ml-air-bnb

πŸš€ Final Project Machine Learning Subject
Python
5
star
44

bot-autoloot-rf

πŸ€– Bot RF Online Auto Loot in Java Language
Java
5
star
45

company-profile

Template Company Profile Play Store
CSS
5
star
46

yolo-badge-pull-request

You want yolo just pull request
5
star
47

ai-genetic-algorithm

Implement Genetic Algorithm and Decision Tree
Java
5
star
48

dps-thread-message-passing-interface

Coding On The Spot Sistem Pararel Terdistribusi
Python
5
star
49

music-player

Music Player With Lyric
Kotlin
5
star
50

dps-versioning

Server dapat memberikan informasi kepada client aplikasi terkait versioning informasi update aplikasi
Python
5
star
51

plant-tree

Let's Go Green - Plant Tree
JavaScript
5
star
52

caravan-android

Learning playground about Android
Kotlin
5
star
53

desktop-compose-retrofit-rxjava

Simple Example RxJava Jetpack Compose Desktop Apps
Kotlin
5
star
54

minimum-mvvm-hilt-network-api

MVVM Sample HTTP Request Retrofit with Hilt
Kotlin
4
star
55

coach-mark

Create Coach Mark With Balloon
Kotlin
4
star
56

doolan-website

Output Kursus Onlenkan Belajar Website Pemula
HTML
4
star
57

minimum-mvvm-hilt-room-database

MVVM Sample Room Database with Hilt
Kotlin
4
star
58

website-softy-pinko

Template HTML CSS From Templatemo
CSS
4
star
59

divide-conquer-branch-bound

πŸš€ Final Project Desain Analisis Algoritma (Divide and Conquer & Branch And Bound)
Java
4
star
60

dps-interprocess-communication

Implement Simple Interprocess Communication Using Socket In Python
Python
4
star
61

website-cyborg-gaming

Template HTML CSS From Templatemo
JavaScript
4
star
62

text-to-speech

Text To Speech With Library Google Text To Speech
Python
4
star
63

misaiwan-fish-marketplace

MISAIWAN (Amir Saiful Cinta Ikan)
HTML
4
star
64

desktop-sinop

Project Sinop (Sistem Notulensi Persidangan)
Java
3
star
65

util

Util for emergency endpoint
3
star
66

caravan-java-kotlin

Learning playground about Kotlin
Kotlin
3
star
67

automata-theory-language

Final Task Auotomata Theory Language
Java
3
star
68

dps-remote-invocation

Implement Simple Remote Invocation In Python
Python
3
star
69

dps-indirect-communication

Indirect-Communication
Python
3
star
70

website-thumber

Template HTML CSS From Themeslab
HTML
3
star
71

desktop-tebak-gambar

Apps Tebak Gambar Desktop Java Games
Java
3
star
72

video-player

Video Player App Using ExoPlayer
Kotlin
3
star
73

de-knappe

Online Exams : Remedial
PHP
3
star
74

ai-transportation-services

Task 4 Artificial Intelligence
Java
3
star
75

caravan-dart

Learning playground about Dart
Dart
3
star
76

init-repository

Initialize Repository
3
star
77

minimum-mvvm-hilt

MVVM simple sample with hilt
Kotlin
3
star
78

desktop-resep-masakan

Aplikasi Desktop Resep Makanan
Java
3
star
79

deep-link-front-end

2
star
80

consumable-code-github-api

Github Api Data
Kotlin
2
star
81

spring-kotlin-new-comer

Kotlin Spring Boot New Comer
Kotlin
2
star
82

back-office-multi-repository-handling

Back Office Server / API for handling multiple repository
2
star
83

consume-private-submodule

Implement SubModule With Private Repository
2
star
84

caravan-html-css-js

Learning playground about HTML, CSS, JS
HTML
2
star
85

front-end-javascript-back-end-kotlin

Trying Combine Java Script And JS
Kotlin
2
star
86

caravan-python

Milestone learning path python programming language from newbie until expert || Complete With Tools and Guideline
Python
2
star
87

news-app

πŸš€ Simple News App focusing on UI, no need to worry about the data, because it's been handled with a library
Kotlin
2
star
88

submodule-android-library

Submodule of android-app-call-submodule-as-library
Kotlin
2
star
89

mini-search-data

Searching Data Using Filter RecyclerView
Kotlin
2
star
90

caravan-go

Milestone learning path golang from newbie until expert || Complete With Tools and Guideline
Go
2
star
91

android-studio-game-dev

Template Repository Researh Game Dev From Android Studio
Kotlin
2
star
92

android-skeleton-piece-java

Skeleton piece from repository android-skeleton
Kotlin
1
star
93

unity-project-git

Template save .gitignore unity project 2D games
1
star
94

flutter-inject-to-native

flutter-inject-to-native
Dart
1
star
95

research_flutter_module

Dart
1
star
96

json-generator

Json Generator From Kotlin
Kotlin
1
star
97

android-skeleton-cloned

Cloned Repository With Separated Linked Repository
Kotlin
1
star
98

android-skeleton

Template Repository With Separated Linked Repository
Kotlin
1
star
99

impl-automated-build

Implementation Automated Build Android With Github Action
Kotlin
1
star
100

android-app-call-submodule-as-library

App consume and fetch submodule library
Kotlin
1
star