Android

Deze handleiding veronderstelt dat u vertrouwd bent met Android NDK, Rust en Flutter. Als je dat niet bent, sla dan over. Of je kunt verder gaan maar op eigen risico

Het is mogelijk om RustDesk Android te bouwen op Windows en MacOS maar deze instructie is nog in actieve ontwikkeling

Introductie

Hier leert u hoe u uw omgeving zodanig kunt voorbereiden dat u de toepassing met succes kunt bouwen en u zelf aan de code kunt werken via bijvoorbeeld Android Studio.

Deze handleiding is gebaseerd op het laatste werkende workflow bestand, om ervoor te zorgen dat alles gewoon werkt, als je problemen tegenkomt neem dan gerust contact met ons op via onze Discord of via een ander communicatiekanaal.

Het is mogelijk om de Android versie op Windows te bouwen, uit te voeren en te bewerken, maar dat vereist een gepatchte flutter map

Met “gepatcht” bedoel ik de map in staat zoals voor het draaien van flutter build op Linux machine.

Veronderstellingen

  • U gebruikt Ubuntu 20.04 of later ( omdat deze handleiding gebaseerd is op deze versie )
  • Je hebt een werkende internetverbinding
  • Je hebt al de installatie van Flutter, vcpkg en Rust
  • Je kloonde RustDesk repository
  • e weet wat je doet

Systeem

Dit deel van de handleiding is gebaseerd op een schone Ubuntu 20.04 instantie met voorafgaande vereisten zoals Flutter, Rust en vcpkg reeds aanwezig en geconfigureerd.

Als u een van deze vereisten mist, moet u ze verkrijgen en configureren, en dan hier terugkeren.

Instructie

Dit is een stap voor stap instructie.

Genereer Bridge 🌉

Omdat dit project gebaseerd is op Flutter Rust Bridge moet je het eerst aanmaken, dat kan door de volgende commando’s uit te voeren:

Wijzig uw huidige map in rustdesk map:

cd rustdesk

Als je er geen had, kloon dan RustDesk repository, kun je dat voor elkaar krijgen door het draaien van:

git clone https://github.com/rustdesk/rustdesk

Dan kun je je map veranderen in rustdesk

cd rustdesk

Als u dit voor de eerste keer doet, moet u misschien ook een aantal vereisten installeren

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

Flutter Rust Bridge afhankelijkheden installeren

Bij deze stap installeert u extra afhankelijkheden die nodig zijn voor Flutter Rust Bridge ook download je flutter afhankelijkheden uit het pubspec.yaml bestand.

Dit kan enige tijd duren, afhankelijk van de snelheid van uw internetverbinding en de algemene prestaties van uw computer

cargo install flutter_rust_bridge_codegen
pushd flutter && flutter pub get && popd

Bridge-bestanden Genereren

Om alles te laten werken moet je Flutter Rust Bridge genereren, om dit te doen voer je gewoon uit:

~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart

Als alles gelukt is, zou u zoiets als dit in uw terminalvenster moeten zien:

2023/02/27 20:44:39 [INFO] Success!
2023/02/27 20:44:39 [INFO] Now go and use it :)

RustDesk bouwen voor Android 📱

Installatie van afhankelijkheden

Bij deze stap heeft u misschien wat extra afhankelijkheden nodig, die kunt u installeren door dit uit te voeren:

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

Je moet misschien ook ffigen activeren

dart pub global activate ffigen 5.0.1

Extra afhankelijkheden downloaden

Voor deze tutorial hebben we enkele afhankelijkheden voorbereid, voel je vrij om ze te gebruiken. Het vereist dat vcpkg geinstalleerd is, in dit geval in /opt

pushd /opt
sudo wget https://github.com/rustdesk/doc.rustdesk.com/releases/download/console/dep.tar.gz
sudo tar xzf dep.tar.gz
popd

Waarschuwing

Het vereist dat de vcpkg map op $HOME, als het Building rustdesk lib deel van deze instructie fouten zal opleveren zoals:

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

Overweeg de installatie van vcpkg in je home map, en voer je het uit:

pushd $HOME
sudo wget https://github.com/rustdesk/doc.rustdesk.com/releases/download/console/dep.tar.gz
sudo tar xzf dep.tar.gz
popd

Het uitschakelen van Flutter Rust Bridge build

Mogelijk moet u de build van Flutter Rust Bridge uitschakelen vanuit het bestand build.rs, u kunt dit doen door onderstaand uit te voeren:

sed -i "s/gen_flutter_rust_bridge();/\/\//g" build.rs

Bouwen rustdesk lib

In deze stap bouwt u het bestand librustdesk.so

Voeg eerst triplet toe aan rust:

rustup target add aarch64-linux-android

Installeer daarnacargo-ndk het is nodig om librustdesk.so te genereren

cargo install cargo-ndk

Nu is het tijd om ndk_arm64.sh te draaien, dit script bevat code die Rust bouwt voor Flutter, het vereist NDK in versie r23c.

Je kunt het downloaden hier, zul je het handmatig moeten installeren of volg deze instructie. Dit bestand is vrij zwaar, dus dit proces kan even duren, het hangt vooral af van uw internetverbinding.

Vergeet niet de ANDROID_NDK_HOME variabele en kijk of deze geldig is

Voer dan gewoon uit:

./flutter/ndk_arm64.sh

Aangemaakte bibliotheek verplaatsen naar jniLibs map

Als je librustdesk.so hebt aangemaakt, maak dan de juiste map aan:

mkdir -p ./flutter/android/app/src/main/jniLibs/arm64-v8a

En kopieer het gewoon daarheen

cp ./target/aarch64-linux-android/release/liblibrustdesk.so ./flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so

RustDesk Bouwen

Het is de laatste stap, nu ga je jouw versie van RustDesk apk bouwen.

Als je alles goed hebt gedaan kun je het gemakkelijk bouwen.

Eerst moet je het volgende downloaden so.tar.gz

pushd flutter
sudo wget -O so.tar.gz https://github.com/rustdesk/doc.rustdesk.com/releases/download/console/so.tar.gz

Pak het dan uit

tar xzvf so.tar.gz
popd

We gebruiken tijdelijk debug sign config

sed -i "s/signingConfigs.release/signingConfigs.debug/g" ./flutter/android/app/build.gradle

Dan moet u het volgende librustdesk.so bestand in de juiste map plaatsen

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

Nu gaan we eindelijk Flutter bouwen

pushd flutter
flutter build apk --release --target-platform android-arm64 --split-per-abi

Bij deze stap zie je misschien enkele fouten in terminal, dit is normaal zolang ze gaan over incompatible version of Kotlin of Runtime JAR files in the classpath should have the same version.

Als je resultaat is zoals ✓ Built build/app negeer het dan, het betekent gewoon dat je je apk met succes hebt gebouwd.

Optioneel

Als je wilt kun je de gebouwde app ergens anders heen verplaatsen, voel je vrij om het uit te voeren:

mv build/app/outputs/flutter-apk/app-arm64-v8a-release.apk ../rustdesk-release.apk