Learn to compile the RustDesk Android client from scratch (100% success)

As everyone knows, RustDesk is a free, open source, and cross-platform remote desktop software, source: RustDesk.

However, because this project uses various cross-compilation techniques, compiling it yourself is very unlikely to succeed. To ensure a 100% success rate for manual compilation, this guide uses a fixed build environment for a once-and-for-all solution.

Download and install Ubuntu 24.04.4
You can use either a virtual machine or a physical machine (virtual machine is recommended), but whichever you choose, you must have GitHub access (global access is recommended).
Ubuntu 24.04.4 Download Link

1. Install essential development packages

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

Return: Running kernel seems to be up-to-date.

2. Hold essential base packages

sudo apt-mark hold clang cmake ninja-build nasm openjdk-17-jdk-headless libgtk-3-dev

Return: 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. Install Rust toolchain

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.75.0

Return: Rust is installed now. Great!

4. Set Rust environment variables

source "$HOME/.cargo/env"
source ~/.bashrc

5. Install and confirm rustfmt component

rustup component add rustfmt

Return: component rustfmt is up to date

6. Install Rust cross-compilation libraries

rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android i686-linux-android

Return: rust-std installed

7. Install cargo-ndk

cargo install cargo-ndk --version 3.1.2 --locked

Return: Installed package cargo-ndk v3.1.2

8. Install flutter_rust_bridge_codegen

cargo install flutter_rust_bridge_codegen --version 1.80.1 --features "uuid" --locked

Return: Installed package flutter_rust_bridge_codegen v1.80.1

9. Download flutter

cd ~
wget https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.24.5-stable.tar.xz

Return: ‘flutter_linux_3.24.5-stable.tar.xz’ saved

10. Unzip flutter

tar xvf flutter_linux_3.24.5-stable.tar.xz
rm flutter_linux_3.24.5-stable.tar.xz

11. Set flutter environment variables

echo 'export PATH="$HOME/flutter/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

12. Initialize flutter

flutter --version

Return: Welcome to Flutter

Some content is set to hidden and will be revealed after you reply!

[reply]
13. Extract and apply some patch files

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. Install 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

Return: finishing deferred symbolic links

15. Set android ndk environment variables

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. Install 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. Set commandlinetools environment variables

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. Accept sdk licenses

yes | sdkmanager --licenses

Return: All SDK package licenses accepted

19. Install required SDKs

sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0" "ndk;28.2.13676358"

Return: [=======================================] 100% Unzipping… platform-tools/sqlit

20. Confirm license

flutter doctor --android-licenses

Return: All SDK package licenses accepted.

21. Initialize flutter

flutter doctor

Return: [✓] Flutter (Channel stable, 3.24.5

22. Install vcpkg

mkdir -p ~/vcpkg
cd ~/vcpkg
git clone https://github.com/microsoft/vcpkg.git .
git checkout 120deac3062162151622ca4860575a33844ba10b

Return: Note: switching to ‘120deac3062162151622ca4860575a33844ba10b’.

23. Set vcpkg environment variables

echo 'export VCPKG_ROOT="$HOME/vcpkg"' >> ~/.bashrc
source ~/.bashrc

24. Initialize vcpkg

./bootstrap-vcpkg.sh -disableMetrics

Return: vcpkg package management program version 2025-07-21-d4b65a2b83ae6c3526acd1c6f3b51aff2a884533

25. Download RustDesk source code

cd ~
git clone --recursive --depth 1 --branch 1.4.6 https://github.com/rustdesk/rustdesk.git

Return: Submodule path ‘libs/hbb_common’: checked out ‘48c37de3e6c4e399af6f51ca20e8e3e1fd037976’

26. Bridge preparation

cd ~/rustdesk/flutter
flutter clean
flutter pub get

27. Generate bridge files (this may take a long time)

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

Return: Now go and use it :slight_smile:

Build stage, for self-study and debugging only. Please use responsibly!

To prevent abuse, here we compile only the arm32 version.
28. Compile dependencies

./flutter/build_android_deps.sh armeabi-v7a

Return: [Finished] Move arm-neon-android to arm-android

29. Compile 75x files

./flutter/ndk_arm.sh

Return: Finished release [optimized] target(s)

30. Copy compiled libraries

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. Enter build directory

cd ~/rustdesk/flutter

32. Fix build options

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. Confirm dependencies again

flutter pub get

Return: Got dependencies!

finish: Officially build the APK

flutter build apk --release --split-per-abi --target-platform android-arm --obfuscate --split-debug-info=split-debug-info

Return: ✓ Built build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk

[/reply]

This post is probably the only 100% successful, no hidden defects, pure text build tutorial on the whole internet.

Finally, best wishes to everyone for successful compiling. This tutorial is for learning and exploration only—do not use it for other purposes, and always follow proper standards.
You are free to repost this tutorial, but please credit the source. Thank you!

Good luck to all

43 Likes

Thank you for sharing..

1 Like

Thanks for sharing

Thanks for sharing

Spotted another technical post from the legendary pro! :xhj006:

Thanks so much for sharing!

:hand_with_index_finger_and_thumb_crossed:

Full of valuable insights :xhj16:

1 Like

Learn from it and make the world great again.

Saved, thank you.

Serious study

I just love watching this kind of tutorial, thumbs up!

Great post—really useful info. Thumbs up!

Thanks for sharing

Thanks for sharing

Give me the real stuff, that’s what I want to see.

Looks pretty good, let’s check it out.

Thanks for sharing

This is great stuff!

Serious study

Packed with practical info

1 Like