├── entrypoint.sh ├── art └── screenshot.png ├── action.yml ├── setup-android-ndk.sh ├── Dockerfile ├── setup-android-sdk.sh └── README.md /entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -eu 4 | 5 | bash -c "$*" -------------------------------------------------------------------------------- /art/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xdtianyu/actions-android-ci/master/art/screenshot.png -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: 'actions-android-ci' 2 | description: 'Run Android build with GitHub Actions' 3 | author: 'xdtianyu' 4 | 5 | branding: 6 | color: green 7 | icon: package 8 | 9 | runs: 10 | using: 'docker' 11 | image: 'docker://xdtianyu/actions-android-ci' 12 | -------------------------------------------------------------------------------- /setup-android-ndk.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | VERSION=r17b 4 | 5 | echo $GITHUB_WORKSPACE 6 | 7 | SDK=/opt/sdk 8 | NDK=/opt/ndk 9 | 10 | if [ ! -z "$GITHUB_WORKSPACE" ]; then 11 | SDK="$GITHUB_WORKSPACE/.opt/sdk" 12 | NDK="$GITHUB_WORKSPACE/.opt/ndk" 13 | fi 14 | 15 | 16 | if [ ! -d "$NDK" ] || [ -z "$(ls -A $NDK)" ];then 17 | mkdir -p $NDK && cd $NDK 18 | wget "https://dl.google.com/android/repository/android-ndk-$VERSION-linux-x86_64.zip" 19 | unzip -qq "android-ndk-$VERSION-linux-x86_64.zip" 20 | mv "android-ndk-$VERSION/"* . 21 | rm "android-ndk-$VERSION-linux-x86_64.zip" 22 | rm -r "android-ndk-$VERSION/" 23 | cd - 24 | fi 25 | 26 | export ANDROID_NDK=$NDK 27 | export ANDROID_NDK_HOME=$NDK 28 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:8-jdk 2 | 3 | MAINTAINER ty "xdtianyu@gmail.com" 4 | 5 | LABEL "com.github.actions.name"="Android build action" 6 | LABEL "com.github.actions.description"="GitHub Actions for Android build" 7 | LABEL "com.github.actions.icon"="package" 8 | LABEL "com.github.actions.color"="green" 9 | 10 | LABEL "repository"="https://github.com/xdtianyu/actions-android-ci" 11 | LABEL "homepage"="https://github.com/xdtianyu/actions-android-ci" 12 | LABEL "maintainer"="xdtianyu" 13 | 14 | ENV ANDROID_HOME=/opt/sdk \ 15 | ANDROID_SDK=/opt/sdk \ 16 | ANDROID_NDK=/opt/ndk \ 17 | ANDROID_NDK_HOME=/opt/ndk \ 18 | GRADLE_USER_HOME=/opt/cache/gradle 19 | 20 | ADD setup-android-sdk.sh /opt/setup-android-sdk.sh 21 | ADD setup-android-ndk.sh /opt/setup-android-ndk.sh 22 | 23 | COPY entrypoint.sh / 24 | 25 | USER root 26 | 27 | ENTRYPOINT [ "/entrypoint.sh" ] -------------------------------------------------------------------------------- /setup-android-sdk.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo $GITHUB_WORKSPACE 4 | 5 | SDK=/opt/sdk 6 | NDK=/opt/ndk 7 | GRADLE=/opt/cache/gradle 8 | 9 | if [ ! -z "$GITHUB_WORKSPACE" ]; then 10 | SDK="$GITHUB_WORKSPACE/.opt/sdk" 11 | NDK="$GITHUB_WORKSPACE/.opt/ndk" 12 | GRADLE="$GITHUB_WORKSPACE/.opt/cache/gradle" 13 | fi 14 | 15 | if [ ! -d "$SDK" ] || [ -z "$(ls -A $SDK)" ];then 16 | mkdir -p $SDK && cd $SDK 17 | wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip 18 | unzip -qq sdk-tools-linux-4333796.zip 19 | rm sdk-tools-linux-4333796.zip 20 | sync 21 | mkdir licenses 22 | echo "8933bad161af4178b1185d1a37fbf41ea5269c55" > licenses/android-sdk-license 23 | echo "d56f5187479451eabf01fb78af6dfcb131a6481e" >> licenses/android-sdk-license 24 | echo "24333f8a63b6825ea9c5514f83c2829b004d1fee" >> licenses/android-sdk-license 25 | echo "84831b9409646a918e30573bab4c9c91346d8abd" > licenses/android-sdk-preview-license 26 | 27 | cd - 28 | 29 | fi 30 | 31 | export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$SDK/emulator/:$SDK/tools/bin:$SDK/tools:$SDK/platform-tools:$NDK:$SDK/cmake/3.10.2.4988404/bin 32 | export ANDROID_HOME=$SDK 33 | export ANDROID_SDK=$SDK 34 | export ANDROID_SDK_ROOT=$SDK 35 | export GRADLE_USER_HOME=$GRADLE 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Actions-Android-CI 2 | 3 | Run Android build with GitHub Actions, checkout [xdtianyu/CallerInfo](https://github.com/xdtianyu/CallerInfo/blob/master/.github/workflows/android.yml) for more usage. 4 | 5 | ### Usage example 6 | 7 | This example configure can build android app in ~2min with gradle and sdk cache. 8 | 9 | ![](https://raw.githubusercontent.com/xdtianyu/actions-android-ci/master/art/screenshot.png) 10 | 11 | ```yaml 12 | name: Android CI 13 | 14 | on: [push] 15 | 16 | jobs: 17 | build: 18 | 19 | runs-on: ubuntu-latest 20 | 21 | steps: 22 | - name: Checkout 23 | uses: actions/checkout@v1 24 | 25 | - name: Checkout submodule 26 | run: git submodule sync --recursive && git submodule update --init --recursive 27 | 28 | - name: Before build 29 | uses: xdtianyu/actions-android-ci@master 30 | env: 31 | ENCRYPTED_KEY: ${{ secrets.ENCRYPTED_KEY }} 32 | ENCRYPTED_IV: ${{ secrets.ENCRYPTED_IV }} 33 | with: 34 | args: '" 35 | . ./env.sh; 36 | openssl aes-256-cbc -K $ENCRYPTED_KEY -iv $ENCRYPTED_IV -in secrets.tar.enc -out secrets.tar -d; 37 | tar xvf secrets.tar; 38 | touch local.properties 39 | "' 40 | 41 | - name: Cache gradle and sdk 42 | uses: actions/cache@v2 43 | env: 44 | cache-name: cache-gradle-and-sdk 45 | with: 46 | path: | 47 | ${{ github.workspace }}/.opt/cache/gradle/wrapper 48 | ${{ github.workspace }}/.opt/cache/gradle/caches 49 | ${{ github.workspace }}/.opt/sdk 50 | key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/wrapper/gradle-wrapper.properties', '**/build.gradle') }} 51 | restore-keys: | 52 | ${{ runner.os }}-build-${{ env.cache-name }}- 53 | ${{ runner.os }}-build- 54 | ${{ runner.os }}- 55 | 56 | - name: Build 57 | uses: xdtianyu/actions-android-ci@master 58 | env: 59 | ENCRYPTED_KEY: ${{ secrets.ENCRYPTED_KEY }} 60 | ENCRYPTED_IV: ${{ secrets.ENCRYPTED_IV }} 61 | ALIAS: ${{ secrets.ALIAS }} 62 | ALIAS_PASSWORD: ${{ secrets.ALIAS_PASSWORD }} 63 | KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} 64 | with: 65 | args: '" 66 | umask 000; 67 | . ./env.sh; 68 | . /opt/setup-android-sdk.sh; 69 | ./gradlew assembleRelease 70 | "' 71 | 72 | - name: Upload artifacts 73 | uses: actions/upload-artifact@v2 74 | with: 75 | name: artifacts 76 | path: | 77 | app/**/apk/release/* 78 | app/**/mapping/release/mapping.txt 79 | 80 | ``` 81 | --------------------------------------------------------------------------------