From ba43424781ccc5c380906742c13ca860b5c0e849 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Sat, 3 Aug 2024 10:39:12 +0000 Subject: [PATCH] Build universal apk (#8941) Signed-off-by: Vasyl Gello --- .github/workflows/flutter-build.yml | 150 ++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 530a3186c..4ac2267eb 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -999,6 +999,12 @@ jobs: ;; esac + - name: Upload Rustdesk library to Artifacts + uses: actions/upload-artifact@master + with: + name: librustdesk.so.${{ matrix.job.target }} + path: ./target/${{ matrix.job.target }}/release/liblibrustdesk.so + - name: Build rustdesk shell: bash env: @@ -1088,6 +1094,150 @@ jobs: files: | signed-apk/rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk + build-rustdesk-android-universal: + needs: [build-rustdesk-android] + name: build rustdesk android universal apk + runs-on: ubuntu-20.04 + env: + reltype: release + steps: + - name: Export GitHub Actions cache environment variables + uses: actions/github-script@v6 + with: + script: | + core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); + core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y \ + clang \ + cmake \ + curl \ + gcc-multilib \ + git \ + g++ \ + g++-multilib \ + libappindicator3-dev \ + libasound2-dev \ + libc6-dev \ + libclang-10-dev \ + libgstreamer1.0-dev \ + libgstreamer-plugins-base1.0-dev \ + libgtk-3-dev \ + libpam0g-dev \ + libpulse-dev \ + libva-dev \ + libvdpau-dev \ + libxcb-randr0-dev \ + libxcb-shape0-dev \ + libxcb-xfixes0-dev \ + libxdo-dev \ + libxfixes-dev \ + llvm-10-dev \ + nasm \ + ninja-build \ + openjdk-11-jdk-headless \ + pkg-config \ + tree \ + wget + + - name: Checkout source code + uses: actions/checkout@v4 + - name: Install flutter + uses: subosito/flutter-action@v2 + with: + channel: "stable" + flutter-version: ${{ env.ANDROID_FLUTTER_VERSION }} + + - name: Restore bridge files + uses: actions/download-artifact@master + with: + name: bridge-artifact + path: ./ + + - name: Download Rustdesk library from Artifacts + uses: actions/download-artifact@master + with: + name: librustdesk.so.aarch64-linux-android + path: ./flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so + + - name: Download Rustdesk library from Artifacts + uses: actions/download-artifact@master + with: + name: librustdesk.so.armv7-linux-androideabi + path: ./flutter/android/app/src/main/jniLibs/armeabi-v7a/librustdesk.so + + - name: Download Rustdesk library from Artifacts + uses: actions/download-artifact@master + with: + name: librustdesk.so.x86_64-linux-android + path: ./flutter/android/app/src/main/jniLibs/x86_64/librustdesk.so + + - name: fix android for flutter 3.13 + if: $${{ env.ANDROID_FLUTTER_VERSION == '3.13.9' }} + run: | + sed -i 's/uni_links_desktop/#uni_links_desktop/g' flutter/pubspec.yaml + cd flutter/lib + find . | grep dart | xargs sed -i 's/textScaler: TextScaler.linear(\(.*\)),/textScaleFactor: \1,/g' + + - name: Build rustdesk + shell: bash + env: + JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64 + run: | + export PATH=/usr/lib/jvm/java-11-openjdk-amd64/bin:$PATH + # temporary use debug sign config + sed -i "s/signingConfigs.release/signingConfigs.debug/g" ./flutter/android/app/build.gradle + cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/ + cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/libc++_shared.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/ + cp ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/x86_64-linux-android/libc++_shared.so ./flutter/android/app/src/main/jniLibs/x86_64/ + # build flutter + pushd flutter + flutter build apk "--${{ env.reltype }}" --target-platform android-arm64,android-arm,android-x64 + mkdir -p signed-apk + mv build/app/outputs/flutter-apk/app-${{ matrix.job.reltype }}.apk ../signed-apk/rustdesk-${{ env.VERSION }}-universal.apk + + - uses: r0adkll/sign-android-release@v1 + name: Sign app APK + if: env.ANDROID_SIGNING_KEY != null + id: sign-rustdesk + with: + releaseDirectory: ./signed-apk + signingKeyBase64: ${{ secrets.ANDROID_SIGNING_KEY }} + alias: ${{ secrets.ANDROID_ALIAS }} + keyStorePassword: ${{ secrets.ANDROID_KEY_STORE_PASSWORD }} + keyPassword: ${{ secrets.ANDROID_KEY_PASSWORD }} + env: + # override default build-tools version (29.0.3) -- optional + BUILD_TOOLS_VERSION: "30.0.2" + + - name: Upload Artifacts + if: env.ANDROID_SIGNING_KEY != null && env.UPLOAD_ARTIFACT == 'true' + uses: actions/upload-artifact@master + with: + name: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk + path: ${{steps.sign-rustdesk.outputs.signedReleaseFile}} + + - name: Publish signed apk package + if: env.ANDROID_SIGNING_KEY != null && env.UPLOAD_ARTIFACT == 'true' + uses: softprops/action-gh-release@v1 + with: + prerelease: true + tag_name: ${{ env.TAG_NAME }} + files: | + ${{steps.sign-rustdesk.outputs.signedReleaseFile}} + + - name: Publish unsigned apk package + if: env.ANDROID_SIGNING_KEY == null && env.UPLOAD_ARTIFACT == 'true' + uses: softprops/action-gh-release@v1 + with: + prerelease: true + tag_name: ${{ env.TAG_NAME }} + files: | + signed-apk/rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk + build-rustdesk-linux: needs: [generate-bridge-linux] name: build rustdesk linux ${{ matrix.job.target }}