forked from mirrors/rustdesk
Compare commits
No commits in common. "patch-android-package-name-change" and "master" have entirely different histories.
patch-andr
...
master
13 changed files with 0 additions and 672 deletions
512
.github/workflows/custom-android-build.yml
vendored
512
.github/workflows/custom-android-build.yml
vendored
|
|
@ -1,512 +0,0 @@
|
|||
name: Build RustDesk Android
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
upload-release:
|
||||
type: boolean
|
||||
default: true
|
||||
description: "Upload APKs to release"
|
||||
upload-tag:
|
||||
type: string
|
||||
default: "nightly"
|
||||
description: "Release tag name"
|
||||
|
||||
env:
|
||||
RUST_VERSION: "1.75"
|
||||
CARGO_NDK_VERSION: "3.1.2"
|
||||
FLUTTER_VERSION: "3.24.5"
|
||||
ANDROID_FLUTTER_VERSION: "3.24.5"
|
||||
TAG_NAME: "${{ inputs.upload-tag }}"
|
||||
VCPKG_BINARY_SOURCES: "clear;files,/opt/vcpkg-cache,readwrite"
|
||||
VCPKG_COMMIT_ID: "120deac3062162151622ca4860575a33844ba10b"
|
||||
NDK_VERSION: "r27c"
|
||||
ANDROID_SIGNING_KEY: "${{ secrets.ANDROID_SIGNING_KEY }}"
|
||||
UPLOAD_RELEASE: "${{ inputs.upload-release }}"
|
||||
|
||||
jobs:
|
||||
# -------------------------------------------------------
|
||||
# Step 1: Generate flutter-rust bridge bindings
|
||||
# Runs on: ubuntu-22.04
|
||||
# -------------------------------------------------------
|
||||
generate-bridge:
|
||||
uses: ./.github/workflows/custom-bridge.yml
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Step 2: Build per-arch Android APKs
|
||||
# Runs on: ubuntu-24.04
|
||||
# Targets: aarch64, armv7, x86_64
|
||||
# -------------------------------------------------------
|
||||
build-rustdesk-android:
|
||||
needs: [generate-bridge]
|
||||
name: build rustdesk android apk ${{ matrix.job.target }}
|
||||
runs-on: ${{ matrix.job.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
job:
|
||||
- { arch: aarch64, target: aarch64-linux-android, os: ubuntu-24.04, reltype: release, suffix: "" }
|
||||
- { arch: armv7, target: armv7-linux-androideabi, os: ubuntu-24.04, reltype: release, suffix: "" }
|
||||
- { arch: x86_64, target: x86_64-linux-android, os: ubuntu-24.04, reltype: release, suffix: "" }
|
||||
steps:
|
||||
- name: Free Disk Space (Ubuntu)
|
||||
uses: https://github.com/jlumbroso/free-disk-space@main
|
||||
with:
|
||||
tool-cache: false
|
||||
android: false
|
||||
dotnet: true
|
||||
haskell: true
|
||||
large-packages: false
|
||||
docker-images: true
|
||||
swap-storage: false
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y \
|
||||
clang \
|
||||
cmake \
|
||||
curl \
|
||||
gcc-multilib \
|
||||
git \
|
||||
g++ \
|
||||
g++-multilib \
|
||||
libayatana-appindicator3-dev \
|
||||
libasound2-dev \
|
||||
libc6-dev \
|
||||
libclang-dev \
|
||||
libunwind-dev \
|
||||
libgstreamer1.0-dev \
|
||||
libgstreamer-plugins-base1.0-dev \
|
||||
libgtk-3-dev \
|
||||
libpam0g-dev \
|
||||
libpulse-dev \
|
||||
libva-dev \
|
||||
libxcb-randr0-dev \
|
||||
libxcb-shape0-dev \
|
||||
libxcb-xfixes0-dev \
|
||||
libxdo-dev \
|
||||
libxfixes-dev \
|
||||
llvm-dev \
|
||||
nasm \
|
||||
ninja-build \
|
||||
openjdk-17-jdk-headless \
|
||||
pkg-config \
|
||||
tree \
|
||||
wget
|
||||
|
||||
- name: Checkout source code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Install flutter
|
||||
uses: https://github.com/subosito/flutter-action@v2
|
||||
with:
|
||||
channel: "stable"
|
||||
flutter-version: ${{ env.ANDROID_FLUTTER_VERSION }}
|
||||
|
||||
- name: Patch flutter
|
||||
run: |
|
||||
cd $(dirname $(dirname $(which flutter)))
|
||||
[[ "3.24.5" == ${{env.ANDROID_FLUTTER_VERSION}} ]] && git apply ${{ github.workspace }}/.github/patches/flutter_3.24.4_dropdown_menu_enableFilter.diff
|
||||
|
||||
- uses: https://github.com/nttld/setup-ndk@v1
|
||||
id: setup-ndk
|
||||
with:
|
||||
ndk-version: ${{ env.NDK_VERSION }}
|
||||
add-to-path: true
|
||||
|
||||
# vcpkg 빌드 바이너리 캐시 — 첫 실행 이후 수시간 절약
|
||||
# 캐시 키: VCPKG_COMMIT_ID + target arch 조합 → arch별 독립 캐시
|
||||
- name: Cache vcpkg binary cache
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: /opt/vcpkg-cache
|
||||
key: vcpkg-android-${{ matrix.job.target }}-${{ env.VCPKG_COMMIT_ID }}
|
||||
|
||||
- name: Setup vcpkg
|
||||
uses: https://github.com/lukka/run-vcpkg@v11
|
||||
with:
|
||||
vcpkgDirectory: /opt/artifacts/vcpkg
|
||||
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }}
|
||||
doNotCache: false
|
||||
|
||||
- name: Install vcpkg dependencies
|
||||
shell: bash
|
||||
env:
|
||||
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
|
||||
ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }}
|
||||
run: |
|
||||
mkdir -p /opt/vcpkg-cache
|
||||
case ${{ matrix.job.target }} in
|
||||
aarch64-linux-android) ANDROID_TARGET=arm64-v8a ;;
|
||||
armv7-linux-androideabi) ANDROID_TARGET=armeabi-v7a ;;
|
||||
x86_64-linux-android) ANDROID_TARGET=x86_64 ;;
|
||||
i686-linux-android) ANDROID_TARGET=x86 ;;
|
||||
esac
|
||||
if ! ./flutter/build_android_deps.sh "${ANDROID_TARGET}"; then
|
||||
find "${VCPKG_ROOT}/" -name "*.log" | while read -r _1; do
|
||||
echo "$_1:"; echo "======"; cat "$_1"; echo "======"; echo ""
|
||||
done
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Restore bridge files
|
||||
uses: https://code.forgejo.org/forgejo/download-artifact@v4
|
||||
with:
|
||||
name: bridge-artifact
|
||||
path: ./
|
||||
|
||||
- name: Install Rust toolchain
|
||||
uses: https://github.com/dtolnay/rust-toolchain@v1
|
||||
with:
|
||||
toolchain: ${{ env.RUST_VERSION }}
|
||||
components: "rustfmt"
|
||||
|
||||
- uses: https://github.com/Swatinem/rust-cache@v2
|
||||
with:
|
||||
prefix-key: rustdesk-lib-cache-android
|
||||
key: ${{ matrix.job.target }}
|
||||
|
||||
# cargo-ndk 바이너리 캐시 — 버전 고정이므로 거의 항상 hit
|
||||
- name: Cache cargo-ndk binary
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.cargo/bin/cargo-ndk
|
||||
key: cargo-ndk-${{ env.CARGO_NDK_VERSION }}-${{ runner.os }}
|
||||
|
||||
- name: Build rustdesk lib
|
||||
env:
|
||||
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
|
||||
ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }}
|
||||
run: |
|
||||
rustup target add ${{ matrix.job.target }}
|
||||
# 캐시 hit 시 재설치 생략
|
||||
command -v cargo-ndk &>/dev/null || cargo install cargo-ndk --version ${{ env.CARGO_NDK_VERSION }} --locked
|
||||
case ${{ matrix.job.target }} in
|
||||
aarch64-linux-android)
|
||||
./flutter/ndk_arm64.sh
|
||||
mkdir -p ./flutter/android/app/src/main/jniLibs/arm64-v8a
|
||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so
|
||||
;;
|
||||
armv7-linux-androideabi)
|
||||
./flutter/ndk_arm.sh
|
||||
mkdir -p ./flutter/android/app/src/main/jniLibs/armeabi-v7a
|
||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/librustdesk.so
|
||||
;;
|
||||
x86_64-linux-android)
|
||||
./flutter/ndk_x64.sh
|
||||
mkdir -p ./flutter/android/app/src/main/jniLibs/x86_64
|
||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/x86_64/librustdesk.so
|
||||
;;
|
||||
esac
|
||||
|
||||
- name: Upload Rustdesk library to Artifacts
|
||||
uses: https://code.forgejo.org/forgejo/upload-artifact@v4
|
||||
with:
|
||||
name: librustdesk.so.${{ matrix.job.target }}
|
||||
path: ./target/${{ matrix.job.target }}/release/liblibrustdesk.so
|
||||
|
||||
- name: Setup Android SDK
|
||||
uses: https://github.com/android-actions/setup-android@v3
|
||||
|
||||
- name: Patch Android package name
|
||||
run: bash ./patch_package_name.sh
|
||||
|
||||
- name: Build rustdesk APK
|
||||
shell: bash
|
||||
env:
|
||||
JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
|
||||
run: |
|
||||
export PATH=/usr/lib/jvm/java-17-openjdk-amd64/bin:$PATH
|
||||
# Increase Gradle JVM memory for CI builds
|
||||
sed -i "s/org.gradle.jvmargs=-Xmx1024M/org.gradle.jvmargs=-Xmx2g/g" ./flutter/android/gradle.properties
|
||||
# temporary use debug sign config
|
||||
sed -i "s/signingConfigs.release/signingConfigs.debug/g" ./flutter/android/app/build.gradle
|
||||
case ${{ matrix.job.target }} in
|
||||
aarch64-linux-android)
|
||||
mkdir -p ./flutter/android/app/src/main/jniLibs/arm64-v8a
|
||||
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 ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so
|
||||
# build flutter
|
||||
pushd flutter
|
||||
flutter build apk "--${{ matrix.job.reltype }}" --target-platform android-arm64 --split-per-abi
|
||||
mv build/app/outputs/flutter-apk/app-arm64-v8a-${{ matrix.job.reltype }}.apk ../rustdesk-${{ env.TAG_NAME }}-${{ matrix.job.arch }}${{ matrix.job.suffix }}.apk
|
||||
;;
|
||||
armv7-linux-androideabi)
|
||||
mkdir -p ./flutter/android/app/src/main/jniLibs/armeabi-v7a
|
||||
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 ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/armeabi-v7a/librustdesk.so
|
||||
# build flutter
|
||||
pushd flutter
|
||||
flutter build apk "--${{ matrix.job.reltype }}" --target-platform android-arm --split-per-abi
|
||||
mv build/app/outputs/flutter-apk/app-armeabi-v7a-${{ matrix.job.reltype }}.apk ../rustdesk-${{ env.TAG_NAME }}-${{ matrix.job.arch }}${{ matrix.job.suffix }}.apk
|
||||
;;
|
||||
x86_64-linux-android)
|
||||
mkdir -p ./flutter/android/app/src/main/jniLibs/x86_64
|
||||
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/
|
||||
cp ./target/${{ matrix.job.target }}/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/x86_64/librustdesk.so
|
||||
# build flutter
|
||||
pushd flutter
|
||||
flutter build apk "--${{ matrix.job.reltype }}" --target-platform android-x64 --split-per-abi
|
||||
mv build/app/outputs/flutter-apk/app-x86_64-${{ matrix.job.reltype }}.apk ../rustdesk-${{ env.TAG_NAME }}-${{ matrix.job.arch }}${{ matrix.job.suffix }}.apk
|
||||
;;
|
||||
esac
|
||||
popd
|
||||
mkdir -p signed-apk
|
||||
mv ../rustdesk-${{ env.TAG_NAME }}-${{ matrix.job.arch }}${{ matrix.job.suffix }}.apk signed-apk/ 2>/dev/null || \
|
||||
mv ./rustdesk-${{ env.TAG_NAME }}-${{ matrix.job.arch }}${{ matrix.job.suffix }}.apk signed-apk/
|
||||
|
||||
- name: Setup sign tool version variable
|
||||
shell: bash
|
||||
run: |
|
||||
BUILD_TOOL_VERSION=$(ls "$ANDROID_SDK_ROOT/build-tools/" | tail -n 1)
|
||||
echo "ANDROID_SIGN_TOOL_VERSION=$BUILD_TOOL_VERSION" >> $GITHUB_ENV
|
||||
|
||||
- uses: https://github.com/r0adkll/sign-android-release@v1
|
||||
name: Sign app APK
|
||||
if: env.ANDROID_SIGNING_KEY != ''
|
||||
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:
|
||||
BUILD_TOOLS_VERSION: ${{ env.ANDROID_SIGN_TOOL_VERSION }}
|
||||
|
||||
- name: Copy APK to artifact dir
|
||||
if: env.UPLOAD_RELEASE == 'true'
|
||||
shell: bash
|
||||
env:
|
||||
SIGNED_RELEASE_FILE: ${{ steps.sign-rustdesk.outputs.signedReleaseFile }}
|
||||
run: |
|
||||
mkdir -p dist/apk
|
||||
if [[ -n "${ANDROID_SIGNING_KEY}" ]]; then
|
||||
cp "${SIGNED_RELEASE_FILE}" "dist/apk/rustdesk-${{ env.TAG_NAME }}-${{ matrix.job.arch }}.apk"
|
||||
else
|
||||
cp "signed-apk/rustdesk-${{ env.TAG_NAME }}-${{ matrix.job.arch }}${{ matrix.job.suffix }}.apk" \
|
||||
"dist/apk/rustdesk-${{ env.TAG_NAME }}-${{ matrix.job.arch }}.apk"
|
||||
fi
|
||||
|
||||
- name: Upload APK for release
|
||||
if: env.UPLOAD_RELEASE == 'true'
|
||||
uses: https://code.forgejo.org/forgejo/upload-artifact@v4
|
||||
with:
|
||||
name: rustdesk-apk-${{ matrix.job.arch }}
|
||||
path: dist/apk/rustdesk-${{ env.TAG_NAME }}-${{ matrix.job.arch }}.apk
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Step 3: Build universal APK (all ABIs combined)
|
||||
# Runs on: ubuntu-24.04
|
||||
# Needs: build-rustdesk-android (all 3 arch .so files)
|
||||
# -------------------------------------------------------
|
||||
build-rustdesk-android-universal:
|
||||
needs: [build-rustdesk-android]
|
||||
name: build rustdesk android universal apk
|
||||
runs-on: ubuntu-24.04
|
||||
env:
|
||||
reltype: release
|
||||
suffix: ""
|
||||
steps:
|
||||
- name: Free Disk Space (Ubuntu)
|
||||
uses: https://github.com/jlumbroso/free-disk-space@main
|
||||
with:
|
||||
tool-cache: false
|
||||
android: false
|
||||
dotnet: true
|
||||
haskell: true
|
||||
large-packages: false
|
||||
docker-images: true
|
||||
swap-storage: false
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y \
|
||||
clang cmake curl gcc-multilib git g++ g++-multilib \
|
||||
libayatana-appindicator3-dev libasound2-dev libc6-dev \
|
||||
libclang-dev libunwind-dev libgstreamer1.0-dev \
|
||||
libgstreamer-plugins-base1.0-dev libgtk-3-dev \
|
||||
libpam0g-dev libpulse-dev libva-dev \
|
||||
libxcb-randr0-dev libxcb-shape0-dev libxcb-xfixes0-dev \
|
||||
libxdo-dev libxfixes-dev llvm-dev nasm ninja-build \
|
||||
openjdk-17-jdk-headless pkg-config tree wget
|
||||
|
||||
- name: Checkout source code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Install flutter
|
||||
uses: https://github.com/subosito/flutter-action@v2
|
||||
with:
|
||||
channel: "stable"
|
||||
flutter-version: ${{ env.ANDROID_FLUTTER_VERSION }}
|
||||
|
||||
- name: Patch flutter
|
||||
run: |
|
||||
cd $(dirname $(dirname $(which flutter)))
|
||||
[[ "3.24.5" == ${{env.ANDROID_FLUTTER_VERSION}} ]] && git apply ${{ github.workspace }}/.github/patches/flutter_3.24.4_dropdown_menu_enableFilter.diff
|
||||
|
||||
- uses: https://github.com/nttld/setup-ndk@v1
|
||||
id: setup-ndk
|
||||
with:
|
||||
ndk-version: ${{ env.NDK_VERSION }}
|
||||
add-to-path: true
|
||||
|
||||
- name: Restore bridge files
|
||||
uses: https://code.forgejo.org/forgejo/download-artifact@v4
|
||||
with:
|
||||
name: bridge-artifact
|
||||
path: ./
|
||||
|
||||
- name: Install Rust toolchain
|
||||
uses: https://github.com/dtolnay/rust-toolchain@v1
|
||||
with:
|
||||
toolchain: ${{ env.RUST_VERSION }}
|
||||
|
||||
- name: Download arm64 library
|
||||
uses: https://code.forgejo.org/forgejo/download-artifact@v4
|
||||
with:
|
||||
name: librustdesk.so.aarch64-linux-android
|
||||
path: ./flutter/android/app/src/main/jniLibs/arm64-v8a
|
||||
|
||||
- name: Download armv7 library
|
||||
uses: https://code.forgejo.org/forgejo/download-artifact@v4
|
||||
with:
|
||||
name: librustdesk.so.armv7-linux-androideabi
|
||||
path: ./flutter/android/app/src/main/jniLibs/armeabi-v7a
|
||||
|
||||
- name: Download x86_64 library
|
||||
uses: https://code.forgejo.org/forgejo/download-artifact@v4
|
||||
with:
|
||||
name: librustdesk.so.x86_64-linux-android
|
||||
path: ./flutter/android/app/src/main/jniLibs/x86_64
|
||||
|
||||
- name: Setup Android SDK
|
||||
uses: https://github.com/android-actions/setup-android@v3
|
||||
|
||||
- name: Patch Android package name
|
||||
run: bash ./patch_package_name.sh
|
||||
|
||||
- name: Build universal APK
|
||||
shell: bash
|
||||
env:
|
||||
JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
|
||||
run: |
|
||||
export PATH=/usr/lib/jvm/java-17-openjdk-amd64/bin:$PATH
|
||||
sed -i "s/org.gradle.jvmargs=-Xmx1024M/org.gradle.jvmargs=-Xmx2g/g" ./flutter/android/gradle.properties
|
||||
sed -i "s/signingConfigs.release/signingConfigs.debug/g" ./flutter/android/app/build.gradle
|
||||
|
||||
mv ./flutter/android/app/src/main/jniLibs/arm64-v8a/liblibrustdesk.so \
|
||||
./flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so
|
||||
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/
|
||||
|
||||
mv ./flutter/android/app/src/main/jniLibs/armeabi-v7a/liblibrustdesk.so \
|
||||
./flutter/android/app/src/main/jniLibs/armeabi-v7a/librustdesk.so
|
||||
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/
|
||||
|
||||
mv ./flutter/android/app/src/main/jniLibs/x86_64/liblibrustdesk.so \
|
||||
./flutter/android/app/src/main/jniLibs/x86_64/librustdesk.so
|
||||
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/
|
||||
|
||||
pushd flutter
|
||||
flutter build apk "--${{ env.reltype }}" --target-platform android-arm64,android-arm,android-x64
|
||||
popd
|
||||
mkdir -p signed-apk
|
||||
mv ./flutter/build/app/outputs/flutter-apk/app-${{ env.reltype }}.apk \
|
||||
signed-apk/rustdesk-${{ env.TAG_NAME }}-universal${{ env.suffix }}.apk
|
||||
|
||||
- name: Setup sign tool version variable
|
||||
shell: bash
|
||||
run: |
|
||||
BUILD_TOOL_VERSION=$(ls "$ANDROID_SDK_ROOT/build-tools/" | tail -n 1)
|
||||
echo "ANDROID_SIGN_TOOL_VERSION=$BUILD_TOOL_VERSION" >> $GITHUB_ENV
|
||||
|
||||
- uses: https://github.com/r0adkll/sign-android-release@v1
|
||||
name: Sign universal APK
|
||||
if: env.ANDROID_SIGNING_KEY != ''
|
||||
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:
|
||||
BUILD_TOOLS_VERSION: ${{ env.ANDROID_SIGN_TOOL_VERSION }}
|
||||
|
||||
- name: Copy universal APK to artifact dir
|
||||
if: env.UPLOAD_RELEASE == 'true'
|
||||
shell: bash
|
||||
env:
|
||||
SIGNED_RELEASE_FILE: ${{ steps.sign-rustdesk.outputs.signedReleaseFile }}
|
||||
run: |
|
||||
mkdir -p dist/apk
|
||||
if [[ -n "${ANDROID_SIGNING_KEY}" ]]; then
|
||||
cp "${SIGNED_RELEASE_FILE}" "dist/apk/rustdesk-${{ env.TAG_NAME }}-universal.apk"
|
||||
else
|
||||
cp "signed-apk/rustdesk-${{ env.TAG_NAME }}-universal${{ env.suffix }}.apk" \
|
||||
"dist/apk/rustdesk-${{ env.TAG_NAME }}-universal.apk"
|
||||
fi
|
||||
|
||||
- name: Upload universal APK for release
|
||||
if: env.UPLOAD_RELEASE == 'true'
|
||||
uses: https://code.forgejo.org/forgejo/upload-artifact@v4
|
||||
with:
|
||||
name: rustdesk-apk-universal
|
||||
path: dist/apk/rustdesk-${{ env.TAG_NAME }}-universal.apk
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Step 4: Publish all APKs to a single Forgejo release
|
||||
# Runs on: ubuntu-24.04
|
||||
# Needs: build-rustdesk-android-universal (all APK artifacts ready)
|
||||
# -------------------------------------------------------
|
||||
publish-android-release:
|
||||
needs: [build-rustdesk-android-universal]
|
||||
if: ${{ inputs['upload-release'] }}
|
||||
name: publish rustdesk android release
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Download arm64 APK
|
||||
uses: https://code.forgejo.org/forgejo/download-artifact@v4
|
||||
with:
|
||||
name: rustdesk-apk-aarch64
|
||||
path: dist/release
|
||||
|
||||
- name: Download armv7 APK
|
||||
uses: https://code.forgejo.org/forgejo/download-artifact@v4
|
||||
with:
|
||||
name: rustdesk-apk-armv7
|
||||
path: dist/release
|
||||
|
||||
- name: Download x86_64 APK
|
||||
uses: https://code.forgejo.org/forgejo/download-artifact@v4
|
||||
with:
|
||||
name: rustdesk-apk-x86_64
|
||||
path: dist/release
|
||||
|
||||
- name: Download universal APK
|
||||
uses: https://code.forgejo.org/forgejo/download-artifact@v4
|
||||
with:
|
||||
name: rustdesk-apk-universal
|
||||
path: dist/release
|
||||
|
||||
- name: Create Release
|
||||
uses: actions/forgejo-release@v2.12.1
|
||||
with:
|
||||
direction: upload
|
||||
token: ${{ secrets.FORGEJO_TOKEN }}
|
||||
tag: ${{ env.TAG_NAME }}
|
||||
title: Release ${{ env.TAG_NAME }}
|
||||
release-dir: dist/release
|
||||
override: true
|
||||
89
.github/workflows/custom-bridge.yml
vendored
89
.github/workflows/custom-bridge.yml
vendored
|
|
@ -1,89 +0,0 @@
|
|||
# This yaml shares the build bridge steps with ci and nightly.
|
||||
name: Build flutter-rust-bridge
|
||||
# 2023-11-23 18:00:00+00:00
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
env:
|
||||
CARGO_EXPAND_VERSION: "1.0.95"
|
||||
FLUTTER_VERSION: "3.22.3"
|
||||
FLUTTER_RUST_BRIDGE_VERSION: "1.80.1"
|
||||
RUST_VERSION: "1.75" # https://github.com/rustdesk/rustdesk/discussions/7503
|
||||
|
||||
jobs:
|
||||
generate_bridge:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout source code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Install prerequisites
|
||||
run: |
|
||||
sudo apt-get install ca-certificates -y
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y \
|
||||
clang \
|
||||
cmake \
|
||||
curl \
|
||||
gcc \
|
||||
git \
|
||||
g++ \
|
||||
libclang-dev \
|
||||
libgtk-3-dev \
|
||||
llvm-dev \
|
||||
nasm \
|
||||
ninja-build \
|
||||
pkg-config \
|
||||
wget
|
||||
|
||||
- name: Install Rust toolchain
|
||||
uses: https://github.com/dtolnay/rust-toolchain@v1
|
||||
with:
|
||||
toolchain: ${{ env.RUST_VERSION }}
|
||||
targets: ${{ matrix.job.target }}
|
||||
components: "rustfmt"
|
||||
|
||||
- uses: https://github.com/Swatinem/rust-cache@v2
|
||||
with:
|
||||
prefix-key: bridge-${{ matrix.job.os }}
|
||||
|
||||
- name: Cache Bridge
|
||||
id: cache-bridge
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: /tmp/flutter_rust_bridge
|
||||
key: vcpkg-${{ matrix.job.arch }}
|
||||
|
||||
- name: Install flutter
|
||||
uses: https://github.com/subosito/flutter-action@v2
|
||||
with:
|
||||
channel: "stable"
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
cache: true
|
||||
|
||||
- name: Install flutter rust bridge deps
|
||||
shell: bash
|
||||
run: |
|
||||
cargo install cargo-expand --version ${{ env.CARGO_EXPAND_VERSION }} --locked
|
||||
cargo install flutter_rust_bridge_codegen --version ${{ env.FLUTTER_RUST_BRIDGE_VERSION }} --features "uuid" --locked
|
||||
pushd flutter && sed -i -e 's/extended_text: 14.0.0/extended_text: 13.0.0/g' pubspec.yaml && flutter pub get && popd
|
||||
|
||||
- name: Run flutter rust bridge
|
||||
run: |
|
||||
~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart --c-output ./flutter/macos/Runner/bridge_generated.h
|
||||
cp ./flutter/macos/Runner/bridge_generated.h ./flutter/ios/Runner/bridge_generated.h
|
||||
|
||||
- name: Upload Artifact
|
||||
uses: https://code.forgejo.org/forgejo/upload-artifact@v4
|
||||
with:
|
||||
name: bridge-artifact
|
||||
path: |
|
||||
./src/bridge_generated.rs
|
||||
./src/bridge_generated.io.rs
|
||||
./flutter/lib/generated_bridge.dart
|
||||
./flutter/lib/generated_bridge.freezed.dart
|
||||
./flutter/macos/Runner/bridge_generated.h
|
||||
./flutter/ios/Runner/bridge_generated.h
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
# patch_package_name.sh
|
||||
# Patches Android package name from com.carriez.flutter_hbb to sh.kyu.undercover
|
||||
# Also patches app display name from RustDesk to Undercover
|
||||
# Revert: git reset --hard HEAD && git clean -fd flutter/android/
|
||||
|
||||
set -e
|
||||
|
||||
OLD_PKG="com.carriez.flutter_hbb"
|
||||
NEW_PKG="sh.kyu.undercover"
|
||||
|
||||
OLD_APP_NAME="RustDesk"
|
||||
NEW_APP_NAME="Undercover"
|
||||
|
||||
OLD_PATH="com/carriez/flutter_hbb"
|
||||
NEW_PATH="sh/kyu/undercover"
|
||||
|
||||
KOTLIN_BASE="flutter/android/app/src/main/kotlin"
|
||||
OLD_DIR="$KOTLIN_BASE/$OLD_PATH"
|
||||
NEW_DIR="$KOTLIN_BASE/$NEW_PATH"
|
||||
|
||||
echo "[1/4] Patching build.gradle and AndroidManifest files..."
|
||||
|
||||
FILES=(
|
||||
"flutter/android/app/build.gradle"
|
||||
"flutter/android/app/src/main/AndroidManifest.xml"
|
||||
"flutter/android/app/src/debug/AndroidManifest.xml"
|
||||
"flutter/android/app/src/profile/AndroidManifest.xml"
|
||||
"flutter/android/app/src/main/kotlin/ffi.kt"
|
||||
)
|
||||
|
||||
for f in "${FILES[@]}"; do
|
||||
if grep -q "$OLD_PKG" "$f" 2>/dev/null; then
|
||||
sed -i "s|$OLD_PKG|$NEW_PKG|g" "$f"
|
||||
echo " Patched: $f"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "[2/4] Creating new Kotlin package directory: $NEW_DIR"
|
||||
mkdir -p "$NEW_DIR"
|
||||
|
||||
echo "[3/4] Moving and patching Kotlin source files..."
|
||||
for kt in "$OLD_DIR"/*.kt; do
|
||||
filename=$(basename "$kt")
|
||||
dest="$NEW_DIR/$filename"
|
||||
cp "$kt" "$dest"
|
||||
sed -i "s|package $OLD_PKG|package $NEW_PKG|g" "$dest"
|
||||
sed -i "s|import $OLD_PKG|import $NEW_PKG|g" "$dest"
|
||||
echo " Moved & patched: $filename"
|
||||
done
|
||||
|
||||
echo "[4/4] Removing old Kotlin package directory..."
|
||||
rm -rf "$KOTLIN_BASE/com"
|
||||
|
||||
echo "[5/5] Patching app display name..."
|
||||
STRINGS_XML="flutter/android/app/src/main/res/values/strings.xml"
|
||||
if grep -q "$OLD_APP_NAME" "$STRINGS_XML" 2>/dev/null; then
|
||||
sed -i "s|>$OLD_APP_NAME<|>$NEW_APP_NAME<|g" "$STRINGS_XML"
|
||||
echo " Patched: $STRINGS_XML"
|
||||
fi
|
||||
if grep -q "android:label=\"$OLD_APP_NAME\"" "flutter/android/app/src/main/AndroidManifest.xml" 2>/dev/null; then
|
||||
sed -i "s|android:label=\"$OLD_APP_NAME\"|android:label=\"$NEW_APP_NAME\"|g" "flutter/android/app/src/main/AndroidManifest.xml"
|
||||
echo " Patched: flutter/android/app/src/main/AndroidManifest.xml (android:label)"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Done! Package name changed: $OLD_PKG -> $NEW_PKG"
|
||||
echo " App display name changed: $OLD_APP_NAME -> $NEW_APP_NAME"
|
||||
echo ""
|
||||
echo "To revert all changes:"
|
||||
echo " git reset --hard HEAD && git clean -fd flutter/android/"
|
||||
Loading…
Add table
Add a link
Reference in a new issue