众多周知 RustDesk 是一个免费开源且跨平台的远程桌面软件,来源:RustDesk。
但是由于这个项目使用了各种交叉编译所以自行编译成功的概率非常低,为保证100%的自编成功率所以采用限定编译环境的方法来做到一劳永逸。
下载并安装ubuntu 24.04.4
可用虚拟机也可用物理机(建议虚拟机),但是不管用哪种方式必须保证可以访问github(建议全局)。
Ubuntu24.04.4下载链接
1.安装基础开发包
sudo apt update
sudo apt install -y autoconf automake build-essential clang cmake g++-multilib gcc-multilib git curl wget tree unzip zip xz-utils libasound2-dev libclang-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev libgtk-3-dev libpulse-dev libssl-dev libstdc++-12-dev libtool libx11-dev libxcb-randr0-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libxcb1-dev libxdo-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev llvm-dev nasm yasm ninja-build openjdk-17-jdk pkg-config
返回: Running kernel seems to be up-to-date.
2.锁定关键基础包
sudo apt-mark hold clang cmake ninja-build nasm openjdk-17-jdk-headless libgtk-3-dev
返回:clang set on hold.
cmake set on hold.
ninja-build set on hold.
nasm set on hold.
openjdk-17-jdk-headless set on hold.
libgtk-3-dev set on hold.
3.安装Rust工具链
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0
返回:Rust is installed now. Great!
4.设置Rust环境变量
source "$HOME/.cargo/env"
source ~/.bashrc
5.安装并确认rustfmt组件
rustup component add rustfmt
返回:component rustfmt is up to date
6.安装Rust编译依赖库
rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android i686-linux-android
返回:rust-std installed
7.安装cargo-ndk
cargo install cargo-ndk --version 3.1.2 --locked
返回:Installed package `cargo-ndk v3.1.2
8.安装flutter_rust_bridge_codegen
cargo install flutter_rust_bridge_codegen --version 1.80.1 --features "uuid" --locked
返回:Installed package `flutter_rust_bridge_codegen v1.80.1
9.下载flutter
cd ~
wget https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.24.5-stable.tar.xz
返回:‘flutter_linux_3.24.5-stable.tar.xz’ saved
10.解压flutter
tar xvf flutter_linux_3.24.5-stable.tar.xz
rm flutter_linux_3.24.5-stable.tar.xz
11.设置flutter环境变量
echo 'export PATH="$HOME/flutter/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
12.初始化flutter
flutter --version
返回:Welcome to Flutter
13.提取并应用一些修复文件
git clone https://github.com/rustdesk/rustdesk.git --depth 1 --branch 1.4.6 /tmp/rustdesk-temp
cd /tmp/rustdesk-temp
cp .github/patches/flutter_3.24.4_dropdown_menu_enableFilter.diff ~/flutter/
cd ~/flutter
git apply flutter_3.24.4_dropdown_menu_enableFilter.diff
cd ~
rm -rf /tmp/rustdesk-temp
14.安装android ndk
mkdir -p ~/android-ndk
cd ~/android-ndk
wget https://dl.google.com/android/repository/android-ndk-r28c-linux.zip
unzip android-ndk-r28c-linux.zip
返回:finishing deferred symbolic links
15.设置android ndk 环境变量
echo 'export ANDROID_NDK_HOME="$HOME/android-ndk/android-ndk-r28c"' >> ~/.bashrc
source ~/.bashrc
echo 'export PATH="$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
16.安装commandlinetools
cd ~
wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip
mkdir -p ~/android-sdk/cmdline-tools
unzip commandlinetools-linux-11076708_latest.zip -d ~/android-sdk/cmdline-tools/
mv ~/android-sdk/cmdline-tools/cmdline-tools ~/android-sdk/cmdline-tools/latest
17.设置commandlinetools环境变量
echo 'export ANDROID_HOME="$HOME/android-sdk"' >> ~/.bashrc
source ~/.bashrc
echo 'export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH"' >> ~/.bashrc
source ~/.bashrc
18.同意sdk协议
yes | sdkmanager --licenses
返回:All SDK package licenses accepted
19.安装相应的SDK
sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0" "ndk;28.2.13676358"
返回:[=======================================] 100% Unzipping… platform-tools/sqlit
20.确认协议
flutter doctor --android-licenses
返回:All SDK package licenses accepted.
21.初始化flutter
flutter doctor
返回:[✓] Flutter (Channel stable, 3.24.5
22.安装vcpkg
mkdir -p ~/vcpkg
cd ~/vcpkg
git clone https://github.com/microsoft/vcpkg.git .
git checkout 120deac3062162151622ca4860575a33844ba10b
返回:Note: switching to ‘120deac3062162151622ca4860575a33844ba10b’.
23.设置vcpkg环境变量
echo 'export VCPKG_ROOT="$HOME/vcpkg"' >> ~/.bashrc
source ~/.bashrc
24.初始化vcpkg
./bootstrap-vcpkg.sh -disableMetrics
返回:vcpkg package management program version 2025-07-21-d4b65a2b83ae6c3526acd1c6f3b51aff2a884533
25.下载RustDesk源码
cd ~
git clone --recursive --depth 1 --branch 1.4.6 https://github.com/rustdesk/rustdesk.git
返回:Submodule path ‘libs/hbb_common’: checked out ‘48c37de3e6c4e399af6f51ca20e8e3e1fd037976’
26.桥接准备工作
cd ~/rustdesk/flutter
flutter clean
flutter pub get
27.生成桥接文件,耗时比较长。
cd ~/rustdesk
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
返回:Now go and use it ![]()
为了防止滥用,这里仅编译arm32位版本。
28.编译依赖项
./flutter/build_android_deps.sh armeabi-v7a
返回:[Finished] Move arm-neon-android to arm-android
29.编译75x个文件
./flutter/ndk_arm.sh
返回:Finished release [optimized] target(s)
30.复制编译好的库
mkdir -p flutter/android/app/src/main/jniLibs/armeabi-v7a
cp target/armv7-linux-androideabi/release/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/
31.进入编译目录
cd ~/rustdesk/flutter
32.修复编译选项
sed -i "s/org.gradle.jvmargs=-Xmx1024M/org.gradle.jvmargs=-Xmx2g/g" ./android/gradle.properties
sed -i "s/signingConfigs.release/signingConfigs.debug/g" ./android/app/build.gradle
33.再次确认依赖包
flutter pub get
返回:Got dependencies!
finish:正式编译APK
flutter build apk --release --split-per-abi --target-platform android-arm --obfuscate --split-debug-info=split-debug-info
返回:✓ Built build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk
此教程应该是全网唯一100%编译成功且无任何潜在缺陷的纯爽文字编译教程。
最后祝各位佬友编译成功,此教程仅限自学探讨勿做它途,切记规范使用。
此教程可随意转载,但请注明出处,谢谢!
Good luck to all
1 个帖子 - 1 位参与者