From 68c9c9df04b8e70e99de07d60e673b5a7f85db6c Mon Sep 17 00:00:00 2001 From: ardocrat Date: Sat, 14 Sep 2024 01:47:06 +0300 Subject: [PATCH] build: local android release --- .github/workflows/build.yml | 37 ----------- .github/workflows/release.yml | 83 ------------------------ scripts/android.sh | 117 +++++++++++++++++++--------------- 3 files changed, 67 insertions(+), 170 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 64ae3cd..c47b10f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,43 +2,6 @@ name: Build on: [push, pull_request] jobs: - android: - name: Android Build - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Setup JDK 17 - uses: actions/setup-java@v3 - with: - java-version: '17' - distribution: 'temurin' - cache: gradle - - name: Setup build - run: | - cargo install cargo-ndk - rustup target add aarch64-linux-android - rustup target add armv7-linux-androideabi - rustup target add x86_64-linux-android - - name: Setup Java build - run: | - chmod +x android/gradlew - echo "${{ secrets.ANDROID_RELEASE }}" > release.keystore.txt - base64 -d release.keystore.txt > android/keystore - echo -e "storePassword=${{ secrets.ANDROID_RELEASE_STORE }}\nkeyPassword=${{ secrets.ANDROID_RELEASE_KEY }}\nkeyAlias=${{ secrets.ANDROID_RELEASE_ALIAS }}\nstoreFile=../keystore" > android/keystore.properties - - name: Build lib 1/2 - continue-on-error: true - run: | - sed -i -e 's/"rlib"/"cdylib","rlib"/g' Cargo.toml - export CPPFLAGS="-DMDB_USE_ROBUST=0" && export CFLAGS="-DMDB_USE_ROBUST=0" && cargo ndk -t arm64-v8a build --profile release-apk - - name: Build lib 2/2 - run: | - unset CPPFLAGS && unset CFLAGS && cargo ndk -t arm64-v8a -o android/app/src/main/jniLibs build --profile release-apk - sed -i -e 's/"cdylib","rlib"/"rlib"/g' Cargo.toml - - name: Build APK - working-directory: android - run: | - ./gradlew assembleRelease - linux: name: Linux Build runs-on: ubuntu-latest diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e0bc60f..655b3f5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,89 +6,6 @@ on: - "v*.*.*" jobs: - android_release: - name: Android Release - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: Setup JDK 17 - uses: actions/setup-java@v3 - with: - java-version: '17' - distribution: 'temurin' - cache: gradle - - name: Setup Rust build - run: | - cargo install cargo-ndk - rustup target add aarch64-linux-android - rustup target add armv7-linux-androideabi - rustup target add x86_64-linux-android - - name: Setup Java build - run: | - chmod +x android/gradlew - echo "${{ secrets.ANDROID_RELEASE }}" > release.keystore.txt - base64 -d release.keystore.txt > android/keystore - echo -e "storePassword=${{ secrets.ANDROID_RELEASE_STORE }}\nkeyPassword=${{ secrets.ANDROID_RELEASE_KEY }}\nkeyAlias=${{ secrets.ANDROID_RELEASE_ALIAS }}\nstoreFile=../keystore" > android/keystore.properties - - name: Build lib ARMv8 1/2 - continue-on-error: true - run: | - sed -i -e 's/"rlib"/"cdylib","rlib"/g' Cargo.toml - export CPPFLAGS="-DMDB_USE_ROBUST=0" && export CFLAGS="-DMDB_USE_ROBUST=0" && cargo ndk -t arm64-v8a build --profile release-apk - - name: Build lib ARMv8 2/2 - run: | - unset CPPFLAGS && unset CFLAGS && cargo ndk -t arm64-v8a -o android/app/src/main/jniLibs build --profile release-apk - sed -i -e 's/"cdylib","rlib"/"rlib"/g' Cargo.toml - - name: Build lib ARMv7 1/2 - continue-on-error: true - run: | - sed -i -e 's/"rlib"/"cdylib","rlib"/g' Cargo.toml - export CPPFLAGS="-DMDB_USE_ROBUST=0" && export CFLAGS="-DMDB_USE_ROBUST=0" && cargo ndk -t armeabi-v7a build --profile release-apk - - name: Build lib ARMv7 2/2 - run: | - unset CPPFLAGS && unset CFLAGS && cargo ndk -t armeabi-v7a -o android/app/src/main/jniLibs build --profile release-apk - sed -i -e 's/"cdylib","rlib"/"rlib"/g' Cargo.toml - - name: Build APK ARM - working-directory: android - run: | - rm -rf app/build - ./gradlew assembleRelease - mv app/build/outputs/apk/release/app-release.apk grim-${{ github.ref_name }}-android.apk - rm -rf app/src/main/jniLibs/* - - name: Checksum APK ARM - working-directory: android - shell: pwsh - run: get-filehash -algorithm sha256 grim-${{ github.ref_name }}-android.apk | Format-List | Out-String | ForEach-Object { $_.Trim() } > grim-${{ github.ref_name }}-android-sha256sum.txt - - name: Build lib x86 1/2 - continue-on-error: true - run: | - sed -i -e 's/"rlib"/"cdylib","rlib"/g' Cargo.toml - export CPPFLAGS="-DMDB_USE_ROBUST=0" && export CFLAGS="-DMDB_USE_ROBUST=0" && cargo ndk -t x86_64 build --profile release-apk - - name: Build lib x86 2/2 - run: | - unset CPPFLAGS && unset CFLAGS && cargo ndk -t x86_64 -o android/app/src/main/jniLibs build --profile release-apk - sed -i -e 's/"cdylib","rlib"/"rlib"/g' Cargo.toml - - name: Build APK x86 - working-directory: android - run: | - rm -rf app/build - ./gradlew assembleRelease - mv app/build/outputs/apk/release/app-release.apk grim-${{ github.ref_name }}-android-x86_64.apk - - name: Checksum APK x86 - working-directory: android - shell: pwsh - run: get-filehash -algorithm sha256 grim-${{ github.ref_name }}-android-x86_64.apk | Format-List | Out-String | ForEach-Object { $_.Trim() } > grim-${{ github.ref_name }}-android-x86_64-sha256sum.txt - - name: Release - uses: softprops/action-gh-release@v1 - with: - files: | - android/grim-${{ github.ref_name }}-android.apk - android/grim-${{ github.ref_name }}-android-sha256sum.txt - android/grim-${{ github.ref_name }}-android-x86_64.apk - android/grim-${{ github.ref_name }}-android-x86_64-sha256sum.txt - linux_release: name: Linux Release runs-on: ubuntu-latest diff --git a/scripts/android.sh b/scripts/android.sh index 6366791..519ce6c 100755 --- a/scripts/android.sh +++ b/scripts/android.sh @@ -1,81 +1,98 @@ #!/bin/bash -usage="Usage: build_run_android.sh [type] [platform]\n - type: 'debug', 'release'\n - platform: 'v7', 'v8'" +usage="Usage: android.sh [type] [platform]\n - type: 'build', 'release', ''\n - platform, for build type: 'v7', 'v8', 'x86'" case $1 in - debug|release) + build|release) ;; *) printf "$usage" exit 1 esac -case $2 in - v7|v8) - ;; - *) - printf "$usage" - exit 1 -esac +if [[ $1 == "build" ]]; then + case $2 in + v7|v8|x86) + ;; + *) + printf "$usage" + exit 1 + esac +fi # Setup build directory BASEDIR=$(cd $(dirname $0) && pwd) cd ${BASEDIR} cd .. -# Setup release argument -type=$1 -[[ ${type} == "release" ]] && release_param="--profile release-apk" - -# Setup platform argument -[[ $2 == "v7" ]] && arch+=(armeabi-v7a) -[[ $2 == "v8" ]] && arch+=(arm64-v8a) - -# Setup platform path -[[ $2 == "v7" ]] && platform+=(armv7-linux-androideabi) -[[ $2 == "v8" ]] && platform+=(aarch64-linux-android) - -# Install platform -[[ $2 == "v7" ]] && rustup target install armv7-linux-androideabi -[[ $2 == "v8" ]] && rustup target install aarch64-linux-android - -# Build native code +# Install platforms and tools +rustup target add armv7-linux-androideabi +rustup target add aarch64-linux-android +rustup target add x86_64-linux-android cargo install cargo-ndk -sed -i -e 's/"rlib"/"cdylib","rlib"/g' Cargo.toml - -# temp fix for https://stackoverflow.com/questions/57193895/error-use-of-undeclared-identifier-pthread-mutex-robust-cargo-build-liblmdb-s success=0 -export CPPFLAGS="-DMDB_USE_ROBUST=0" && export CFLAGS="-DMDB_USE_ROBUST=0" -cargo ndk -t ${arch} build ${release_param} -unset CPPFLAGS && unset CFLAGS -cargo ndk -t ${arch} -o android/app/src/main/jniLibs build ${release_param} -if [ $? -eq 0 ] -then - success=1 -fi -sed -i -e 's/"cdylib","rlib"/"rlib"/g' Cargo.toml +### Build native code +function build_lib() { + [[ $1 == "v7" ]] && arch=(armeabi-v7a) + [[ $1 == "v8" ]] && arch=(arm64-v8a) + [[ $1 == "x86" ]] && arch=(x86_64) + + sed -i -e 's/"rlib"/"cdylib","rlib"/g' Cargo.toml + + # Fix for https://stackoverflow.com/questions/57193895/error-use-of-undeclared-identifier-pthread-mutex-robust-cargo-build-liblmdb-s + export CPPFLAGS="-DMDB_USE_ROBUST=0" && export CFLAGS="-DMDB_USE_ROBUST=0" + cargo ndk -t ${arch} build --profile release-apk + unset CPPFLAGS && unset CFLAGS + cargo ndk -t ${arch} -o android/app/src/main/jniLibs build --profile release-apk + if [ $? -eq 0 ] + then + success=1 + fi + + sed -i -e 's/"cdylib","rlib"/"rlib"/g' Cargo.toml +} + +### Build application +function build_apk() { + version=$(grep -m 1 -Po 'version = "\K[^"]*' Cargo.toml) -# Build Android application and launch at all connected devices -if [ $success -eq 1 ] -then cd android - - # Setup gradle argument - [[ $1 == "release" ]] && gradle_param+=(assembleRelease) - [[ $1 == "debug" ]] && gradle_param+=(build) - ./gradlew clean - ./gradlew ${gradle_param} + ./gradlew assembleRelease - # Setup apk path - [[ $1 == "release" ]] && apk_path+=(app/build/outputs/apk/release/app-release.apk) - [[ $1 == "debug" ]] && apk_path+=(app/build/outputs/apk/debug/app-debug.apk) + # Setup release file name + if [ -n $1 ]; then + rm -rf grim-${version}-$1.apk + mv app/build/outputs/apk/release/app-release.apk grim-${version}-$1.apk + fi + cd .. +} + +# Remove build targets +rm -rf target/release-apk +rm -rf target/aarch64-linux-android +rm -rf target/x86_64-linux-android +rm -rf target/armv7-linux-androideabi +rm -rf android/app/src/main/jniLibs/* + +if [[ $1 == "build" ]]; then + build_lib $2 + [ $success -eq 1 ] && build_apk + + # Launch application at all connected devices. for SERIAL in $(adb devices | grep -v List | cut -f 1); do adb -s $SERIAL install ${apk_path} sleep 1s adb -s $SERIAL shell am start -n mw.gri.android/.MainActivity; done +else + build_lib "v7" + [ $success -eq 1 ] && build_lib "v8" + [ $success -eq 1 ] && build_apk "arm" + rm -rf android/app/src/main/jniLibs/* + [ $success -eq 1 ] && build_lib "x86" + [ $success -eq 1 ] && build_apk "x86_64" fi \ No newline at end of file