零基础学会编译RustDesk之安卓客户端(100%成功)

众多周知 RustDesk 是一个免费开源且跨平台的远程桌面软件 ,来源: RustDesk 。 但是由于这个项目使用了各种交叉编译所以自行编译成功的概率非常低,为保证100%的自编成功率所以采用限定编译环境的方法来做到一劳永逸。 下载并安装ubuntu 24.04.4 可用虚拟机也可用物理机(建议...
零基础学会编译RustDesk之安卓客户端(100%成功)
零基础学会编译RustDesk之安卓客户端(100%成功)

众多周知 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 :slight_smile:

为了防止滥用,这里仅编译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 位参与者

阅读完整话题

来源: linux.do查看原文