Skip to content

Commit

Permalink
feat: support building apk on github action (AppFlowy-IO#4117)
Browse files Browse the repository at this point in the history
  • Loading branch information
LucasXu0 authored Dec 8, 2023
1 parent acb3c79 commit 6338ca1
Show file tree
Hide file tree
Showing 5 changed files with 124 additions and 3 deletions.
99 changes: 99 additions & 0 deletions .github/workflows/build_android_apk.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
name: Build AppFlowy Release APK

on: workflow_dispatch

env:
FLUTTER_VERSION: "3.13.9"
RUST_TOOLCHAIN: "1.70"

jobs:
build:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
include:
- os: ubuntu-latest
target: aarch64-linux-android
runs-on: ${{ matrix.os }}

steps:
# the following step is required to avoid running out of space
- name: Maximize build space
if: matrix.os == 'ubuntu-latest'
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf "/usr/local/share/boost"
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- name: Checkout source code
uses: actions/checkout@v2

- name: Install Rust toolchain
id: rust_toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.RUST_TOOLCHAIN }}
target: ${{ matrix.target }}
override: true
profile: minimal

- name: Install flutter
id: flutter
uses: subosito/flutter-action@v2
with:
channel: "stable"
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true

- uses: nttld/setup-ndk@v1
id: setup-ndk
with:
ndk-version: "r24"
add-to-path: true

- uses: Swatinem/rust-cache@v2
with:
prefix-key: ${{ matrix.os }}
workspaces: |
frontend/rust-lib
- uses: davidB/rust-cargo-make@v1
with:
version: "0.36.6"

- name: Install prerequisites
working-directory: frontend
run: |
rustup target install aarch64-linux-android
rustup target install x86_64-linux-android
cargo install --force duckscript_cli
cargo install cargo-ndk
if [ "$RUNNER_OS" == "Linux" ]; then
sudo wget -qO /etc/apt/trusted.gpg.d/dart_linux_signing_key.asc https://dl-ssl.google.com/linux/linux_signing_key.pub
sudo wget -qO /etc/apt/sources.list.d/dart_stable.list https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list
sudo apt-get update
sudo apt-get install -y dart curl build-essential libssl-dev clang cmake ninja-build pkg-config libgtk-3-dev
sudo apt-get install keybinder-3.0 libnotify-dev
sudo apt-get install gcc-multilib
elif [ "$RUNNER_OS" == "Windows" ]; then
vcpkg integrate install
elif [ "$RUNNER_OS" == "macOS" ]; then
echo 'do nothing'
fi
cargo make appflowy-flutter-deps-tools
shell: bash

- name: Build AppFlowy
working-directory: frontend
env:
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
run: |
cargo make --profile production-android appflowy-android
- name: Upload APK
uses: actions/upload-artifact@v2
with:
name: app-arm64-v8a-release.apk
path: frontend/appflowy_flutter/build/app/outputs/flutter-apk/
2 changes: 2 additions & 0 deletions frontend/Makefile.toml
Original file line number Diff line number Diff line change
Expand Up @@ -201,13 +201,15 @@ TARGET_OS = "android"
CRATE_TYPE = "cdylib"
FLUTTER_OUTPUT_DIR = "Debug"
LIB_EXT = "so"
PRODUCT_EXT = "apk"
FLUTTER_DESKTOP_FEATURES = "dart,rev-sqlite,openssl_vendored"

[env.production-android]
BUILD_FLAG = "release"
TARGET_OS = "android"
CRATE_TYPE = "cdylib"
FLUTTER_OUTPUT_DIR = "Release"
PRODUCT_EXT = "apk"
LIB_EXT = "so"

[tasks.echo_env]
Expand Down
3 changes: 3 additions & 0 deletions frontend/appflowy_flutter/android/app/src/main/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ cmake_minimum_required(VERSION 3.10.0)

project(AppFlowy)

message(CONFIGURE_LOG "NDK PATH: ${ANDROID_NDK}")
message(CONFIGURE_LOG "Copying libc++_shared.so")

# arm64-v8a
file(COPY
${ANDROID_NDK}/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so
Expand Down
21 changes: 19 additions & 2 deletions frontend/scripts/makefile/flutter.toml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ run_task = { name = [
"code_generation",
"set-app-version",
"flutter-build-android",
"copy-to-product-mobile",
"copy-to-product-android",
] }
script_runner = "@shell"

Expand Down Expand Up @@ -139,6 +139,23 @@ script = [
]
script_runner = "@shell"

[tasks.copy-to-product-android]
script = [
"""
product_path=${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/appflowy_flutter/product/${APP_VERSION}
output_path=${product_path}/${TARGET_OS}/${FLUTTER_OUTPUT_DIR}
if [ -d "${output_path}" ]; then
rm -rf ${output_path}/
fi
mkdir -p ${output_path}
product=${PRODUCT_NAME}-arm64-v8a-release.${PRODUCT_EXT}
cp -R ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/appflowy_flutter/build/app/outputs/flutter-apk/app-arm64-v8a-release.apk \
${output_path}/${product}
""",
]
script_runner = "@shell"

[tasks.copy-to-product-macos]
script = [
"""
Expand All @@ -149,7 +166,7 @@ script = [
fi
mkdir -p ${output_path}
product=${PRODUCT_NAME}.${PRODUCT_EXT}
product=${PRODUCT_NAME}-arm64-v8a-release.${PRODUCT_EXT}
cp -R ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/appflowy_flutter/build/${TARGET_OS}/Build/Products/${FLUTTER_OUTPUT_DIR}/${product} \
${output_path}/${product}
""",
Expand Down
2 changes: 1 addition & 1 deletion frontend/scripts/makefile/mobile.toml
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ script = [
lib = set lib${LIB_NAME}.${LIB_EXT}
echo "💻 💻 💻 Copying ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/jniLibs/ to ${dart_ffi_dir}/"
rm -r ${dart_ffi_dir}/jniLibs/
rm -r ${dart_ffi_dir}/jniLibs
cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/jniLibs/ \
${dart_ffi_dir}/
Expand Down

0 comments on commit 6338ca1

Please sign in to comment.