如果大家已经熟悉安卓NDK、Flutter和Rust。本篇教程主要指导大家如何在Android上构建RustDesk,以便大家能够成功构建应用程序,并使自己能够通过Android Studio等方式处理代码。
一、环境准备
1、使用Ubuntu 20.04或更高版本。
2、拥有有效的互联网连接。
3、安装Flutter、Rust和vcpkg。
4、克隆RustDesk存储库。
二、在Android上构建RustDesk
1、生成Flutter Rust Bridge
由于RustDesk基于Flutter Rust Bridge,首先需要生成它。在rustdesk目录下运行以下命令:
cd rustdesk
可以通过运行以下命令来实现克隆RustDesk 存储库:
git clone https://github.com/rustdesk/rustdesk
将能够将rustdesk目录更改为:
cd rustdesk
如果是第一次执行此操作,还需要安装一些必备组件:
sudo apt install ca-certificates -y sudo apt update -y sudo apt install -y g++ gcc git curl wget nasm yasm libgtk-3-dev clang cmake libclang-dev ninja-build llvm-dev libclang-10-dev llvm-10-dev pkg-config rustfmt
2、安装依赖项
安装必要的依赖项,包括Android开发工具和RustDesk构建所需的库:
cargo install flutter_rust_bridge_codegen pushd flutter && flutter pub get && popd
3、生成Flutter Rust Bridge文件
下载并解压vcpkg依赖项到指定目录(如/opt),确保vcpkg目录位于正确的位置,以便构建过程可以正确引用。
~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart
成功后会在终端窗口中看到如下内容:
2023/02/27 20:44:39 [INFO] Success! 2023/02/27 20:44:39 [INFO] Now go and use it :)
三、构建适用于Android的RustDesk
1、安装依赖项
在此步骤中需要一些额外的依赖项,可以通过运行以下命令来安装它们:
sudo apt update -y sudo apt-get -qq install -y git curl wget nasm yasm libgtk-3-dev clang libxcb-randr0-dev libxdo-dev libxfixes-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev libpulse-dev cmake libclang-dev ninja-build libappindicator3-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libvdpau-dev libva-dev libclang-dev llvm-dev libclang-10-dev llvm-10-dev pkg-config tree g++ libc6-dev gcc-multilib g++-multilib openjdk-11-jdk-headless
需要激活ffigen:
dart pub global activate ffigen 5.0.1
2、下载其他依赖项
pushd /opt sudo wget https://github.com/rustdesk/doc.rustdesk.com/releases/download/console/dep.tar.gz sudo tar xzf dep.tar.gz popd
可能出现的错误:
error: failed to run custom build command for `magnum-opus v0.4.0 (https://github.com/rustdesk/magnum-opus#79be072c)` Caused by: process didn't exit successfully: `/home/user/rustdesk/target/release/build/magnum-opus-05dc0023b86da8fc/build-script-build` (exit status: 101) --- stdout cargo:info=arm64-android cargo:rustc-link-lib=static=opus cargo:rustc-link-search=/home/user/vcpkg/installed/arm64-android/lib cargo:include=/home/user/vcpkg/installed/arm64-android/include rerun-if-changed=/home/user/.cargo/git/checkouts/magnum-opus-4bb999f3bcbf6ab0/79be072/opus_ffi.h rerun-if-changed=/home/user/vcpkg/installed/arm64-android/include
考虑在主目录中安装,然后运行:
pushd $HOME sudo wget https://github.com/rustdesk/doc.rustdesk.com/releases/download/console/dep.tar.gz sudo tar xzf dep.tar.gz popd
3、禁用Flutter Rust Bridge
sed -i "s/gen_flutter_rust_bridge();/\/\//g" build.rs
4、构建RustDesk库
rustup target add aarch64-linux-android
生成文件:
cargo install cargo-ndk
现在需要运行ndk_arm64.sh脚本为Flutter构建Rust的代码,设置ANDROID_NDK_HOME变量并检查它是否有效。
然后运行:
./flutter/ndk_arm64.sh
5、将生成的库移动到jniLibs目录中
mkdir -p ./flutter/android/app/src/main/jniLibs/arm64-v8a
复制:
cp ./target/aarch64-linux-android/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so
6、构建RustDesk
接下来将构建RustDesk apk版本。
首先需要下载:
pushd flutter sudo wget -O so.tar.gz https://github.com/rustdesk/doc.rustdesk.com/releases/download/console/so.tar.gz
然后打开包装:
tar xzvf so.tar.gz popd sed -i "s/signingConfigs.release/signingConfigs.debug/g" ./flutter/android/app/build.gradle
将文件复制到正确的目录中:
mkdir -p ./flutter/android/app/src/main/jniLibs/arm64-v8a cp ./target/aarch64-linux-android/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so
成功构建Flutter:
pushd flutter flutter build apk --release --target-platform android-arm64 --split-per-abi