Skip to content
Snippets Groups Projects
flutter-android.gitlab-ci.yml 2.53 KiB
# Required variables:
## SIGNING_KEYSTORE: The keystore, base64 encoded
## SIGNING_STORE_FILE: The path to the keystore, storeFile property in the signing.properties file
## SIGNING_STORE_PW: The password for the keystore, keyPassword property in the signing.properties file
## SIGNING_KEY_PW: The password for the key, keyPassword property in the signing.properties file
## SIGNING_KEY_ALIAS: The alias for the key, keyAlias property in the signing.properties file
## APP_DIRECTORY: The directory of the app
## APP_NAME: The name of the output aab, the resulting apk will be named ${APP_NAME}_${APPLICATION_VERSION}.apk
## APPLICATION_VERSION: The build name of the application
## APPLICATION_BUILD_NUMBER: The build number of the application

stages:
  - build

variables:
  SIGNING_PROPERTIES_FILE: android/signing.properties
  SINGING_KEYSTORE_FILE: android/signing-keystore.jks
  FLUTTER_ANDROID_IMAGE: andrijoos/flutter:3.24.5-android
  BUNDLETOOL_IMAGE: andrijoos/bundletool
  ANDROID_PLATFORMS: android-arm,android-arm64,android-x64

android:
  stage: build
  image: 
    name: ${FLUTTER_ANDROID_IMAGE}
    pull_policy: always
  tags:
    - amd64
  artifacts:
    paths:
      - ${APP_NAME}_${APPLICATION_VERSION}.aab
    expire_in: 1 day
  script:
    - cd ${APP_DIRECTORY}
    - echo "storePassword=$SIGNING_STORE_PW" >> $SIGNING_PROPERTIES_FILE
    - echo "keyPassword=$SIGNING_KEY_PW" >> $SIGNING_PROPERTIES_FILE
    - echo "keyAlias=$SIGNING_KEY_ALIAS" >> $SIGNING_PROPERTIES_FILE
    - echo "storeFile=$SIGNING_STORE_FILE" >> $SIGNING_PROPERTIES_FILE
    - echo $SIGNING_KEYSTORE | base64 -d > $SINGING_KEYSTORE_FILE
    - flutter build appbundle --release --target-platform ${ANDROID_PLATFORMS} --build-name ${APPLICATION_VERSION} --build-number ${APPLICATION_BUILD_NUMBER}
  after_script:
    - mv ${APP_DIRECTORY}/build/app/outputs/bundle/release/app-release.aab ./${APP_NAME}_${APPLICATION_VERSION}.aab

.build_universal_apk:
  stage: build
  image: 
    name: ${BUNDLETOOL_IMAGE}
    pull_policy: always
  tags:
    - amd64
  when: manual
  needs:
    - android
  artifacts:
    paths:
      - ${APP_NAME}_${APPLICATION_VERSION}.apk
    expire_in: 1 day
  script:
    - echo $SIGNING_KEYSTORE | base64 -d > keystore.jks
    - java -jar /app/bundletool.jar build-apks --bundle=${APP_NAME}_${APPLICATION_VERSION}.aab --output=apks.apks --mode=universal --ks=keystore.jks --ks-pass=pass:$SIGNING_STORE_PW --ks-key-alias=$SIGNING_KEY_ALIAS --key-pass=pass:$SIGNING_KEY_PW
    - unzip -q apks.apks -d apks
    - mv apks/universal.apk ./${APP_NAME}_${APPLICATION_VERSION}.apk