ACCRDP 1.1.0 — FUENTE Y COMPILACIÓN

Base RustDesk: 9f9585ce155a6558f0625eaf8fabfe8827c9a552.
hbb_common: 229b904508364c8997aad0fb5af57effac859f60 (sin cambios).
La fuente incluye el submódulo y los archivos generados del puente Flutter.
Licencia principal: client/LICENCE, AGPL-3.0. Los cambios ACCRDP se ofrecen
bajo la misma licencia. Se conservan las licencias de las dependencias.
Los portales de control y correo y los scripts ACCRDP también se ofrecen
bajo AGPL-3.0. Las claves, cuentas, buzones y bases de datos no son fuente.

ENTORNO UTILIZADO
Windows x64, Rust 1.98.1, Flutter 3.24.5, Visual Studio 18/MSVC 14.51.36231,
SDK Windows 10.0.26100.0, LLVM/libclang 15.0.6, Python 3.14.
vcpkg: 9e593bb18ea69cc5095e012465dcd675a822ed0d, puertos y triplets de client/res.
Android: JDK 17, SDK 36, NDK r28c (28.2.13676358), cargo-ndk 3.1.2.
Puente: flutter_rust_bridge_codegen 1.80.1, cargo-expand 1.0.95.
Instalador Windows: Inno Setup 6.7.3.
En Windows se usó una unidad corta R: para evitar rutas de dependencias
Git demasiado largas. No cambies la ubicación de una compilación en curso.

DEPENDENCIAS
Sigue client/.github/workflows/flutter-build.yml y flutter/build_android_deps.sh
para el conjunto exacto de paquetes vcpkg. Triplets: x64-windows-static y
arm64-android, arm-neon-android y x64-android. Los dos últimos usan los
triplets API 21 de scripts/android-triplets. Copia el contenido instalado
de arm-neon-android a installed/arm-android para el nombre que espera Rust.
Configura VCPKG_ROOT, VCPKG_DOWNLOADS, LIBCLANG_PATH, PATH,
PUB_CACHE y CARGO_HOME dentro de un directorio de trabajo.
Para Windows, BINDGEN_EXTRA_CLANG_ARGS debe incluir los encabezados MSVC y
ucrt/shared/um del SDK. Para Android, reemplázalos por el sysroot del NDK y
sysroot/usr/include/aarch64-linux-android. No mezcles los encabezados.
OpenSSL de Android se compila con Perl y make de MSYS2; el Perl reducido
que viene con Git y Strawberry Perl no sirven para esa compilación cruzada.

FLUTTER
Aplica al SDK Flutter el parche incluido
client/.github/patches/flutter_3.24.4_dropdown_menu_enableFilter.diff.
Para Windows usa el motor Windows personalizado que indica el workflow
oficial de RustDesk. Flutter 3.24 requiere que su detección de Visual Studio
18 seleccione el generador «Visual Studio 18 2026» si usas esa versión de VS.
El puente se genera desde src/flutter_ffi.rs. Al regenerarlo en Windows,
pasa --llvm-path y --llvm-compiler-opts con -std=c11 y los directorios de
encabezados de Clang/MSVC/SDK. No aceptes un puente que declare bool como
NativeFunction o DartPort como Int32: indica encabezados de C ausentes.
Ejecuta flutter pub get. La creación de enlaces de plugins en Windows
necesita permisos para enlaces simbólicos; se compiló con elevación UAC.

CONFIGURACIÓN
scripts/prepare_build.py genera JSON con ACCRDP_ROLE, ACCRDP_RENDEZVOUS_SERVER,
ACCRDP_RELAY_SERVER y ACCRDP_SERVER_PUBLIC_KEY a partir del servidor propio.
Para host genera también ACCRDP_CLOSE_SALT y ACCRDP_CLOSE_HASH. Utiliza
PBKDF2-SHA256, 600000 iteraciones; nunca guardes la contraseña en el código.
Exporta los valores JSON como variables de entorno del proceso de compilación.
ACCRDP_ROLE=master para administración; host para caja.
Endpoints de esta instalación: id.amanecerccu.com:22116 y
relay.amanecerccu.com:22117. La clave pública se obtiene de hbbs.

WINDOWS
En client: cargo build --locked --release --features flutter,accrdp --lib
Para Caja: sustituye flutter,accrdp por flutter,accrdp-host.
Conserva cada target/release/librustdesk.dll por separado antes de compilar
la otra función. En client/flutter: flutter build windows --release
  --build-name 1.1.1 --build-number 111 --dart-define=ACCRDP_VERSION=1.1.1.
Estos valores corresponden a Maestro Windows 1.1.1. Para Caja Windows
1.1.2 usa --build-name 1.1.2 --build-number 112 y
--dart-define=ACCRDP_VERSION=1.1.2. Android conserva 1.1.0/110.
Ambos motores Rust de Windows siguen siendo los de 1.1.0, cada uno con su
función correspondiente; estos cambios de ventanas están en Flutter.
Copia build/windows/x64/runner/Release a una carpeta de empaquetado por
función; renombra rustdesk.exe a ACCRDP.exe y coloca la DLL correspondiente.
Incluye los redistribuibles x64 Microsoft.VC145.CRT permitidos por VS,
LICENCE.txt y la ubicación de la fuente. Para Caja incluye
maintenance-default.json con salt/hash/iterations (600000), nunca contraseña.
Compila deploy/windows/ACCRDP.iss con ISCC /DRole=master o /DRole=host,
/DStageDir=<carpeta> y /DOutputDir=<salida>. Para Maestro 1.1.1 agrega
/DAppRelease=1.1.1 y empaqueta únicamente la carpeta de Maestro.
Para Caja 1.1.2 usa /DRole=host y /DAppRelease=1.1.2, junto con la DLL
compilada con flutter,accrdp-host y su configuración de mantenimiento.

ANDROID
En Windows usa scripts/Build-Android-Windows.ps1, que compila las tres
arquitecturas y genera una APK universal por función. Acepta Version y
BuildNumber para futuras actualizaciones. Instala los destinos Rust
aarch64-linux-android, armv7-linux-androideabi y x86_64-linux-android.
Compila también libsodium para cada arquitectura con vcpkg. ARM64 usa
--overlay-triplets=client/res/vcpkg-triplets (API 21; no el triplet por
defecto del vcpkg reciente, que exige una versión superior de Android).
El ajuste local vendor/libsodium-sys conserva la versión 0.2.7 y sus licencias.
Solo para destino Android utiliza ACCRDP_ANDROID_SODIUM_LIB_DIR; los binarios
de compilación de Windows conservan sus bibliotecas originales. No uses
SODIUM_LIB_DIR global para mezclar anfitrión Windows y destino Android.
Incluye también los encabezados NDK lib/clang/19/include en bindgen.
Se usan rutas con / para los compiladores NDK; las rutas con barra invertida
de cargo-ndk 3.1.2 fallan dentro de MSYS make. Android utiliza códecs de software VP8/VP9/AV1.
Define un directorio temporal Java con su ruta completa para evitar el error
de sockets Unix causado por la ruta 8.3 de TEMP en esta PC.
En un anfitrión Linux con las mismas dependencias puede utilizarse:
cargo ndk --platform 21 --target aarch64-linux-android build --locked
  --release --features flutter,accrdp --lib
Para Caja utiliza flutter,accrdp-host.
Copia target/aarch64-linux-android/release/liblibrustdesk.so a
flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so y agrega
libc++_shared.so del sysroot NDK para esa arquitectura.
Exporta ACCRDP_SIGNING_ALIAS, ACCRDP_SIGNING_PASSWORD y
ACCRDP_SIGNING_KEYSTORE con una firma privada propia.
Repite la copia de librustdesk.so y libc++_shared.so para armeabi-v7a y
x86_64, tomando cada biblioteca de su propio destino.
En flutter: flutter build apk --release
  --target-platform android-arm,android-arm64,android-x64
  --build-name 1.1.0 --build-number 110 --dart-define=ACCRDP_VERSION=1.1.0
Verifica cada APK mediante apksigner verify y comprueba ID, ABI, firma y
minSdk con aapt. La firma privada se conserva para las futuras versiones.

WEB
Instala control/requirements.txt en un entorno virtual. Configura un
ACCRDP_SECRET_KEY propio y un directorio de datos protegido. Usa las
configuraciones accrdp.settings y accrdp.mailsettings respectivamente.
Ejecuta las migraciones y collectstatic antes de iniciar waitress/Caddy.
No habilites ACCRDP_EXTERNAL_MAIL_READY hasta verificar entrega externa.
Pruebas: manage.py test desk --settings=accrdp.settings y
manage.py test correo --settings=accrdp.mailsettings.

PUBLICACIÓN
releases/manifest.json solo debe enumerar archivos ya generados y revisados,
con filename, version, size_mb y sha256. El servidor publica esos archivos
por /descargas/archivo/<producto>/. Nunca agregues credenciales o claves.
La cuenta Windows del servidor web necesita lectura de la carpeta releases.

COMPILACIÓN 1.2.0
Usa --build-name 1.2.0 --build-number 120 --dart-define=ACCRDP_VERSION=1.2.0.
Reconstruye la biblioteca Host Windows y las bibliotecas Android de ambos
roles/las tres ABI. El visor Windows conserva su motor Maestro anterior: los
cambios nativos del visor están limitados a Android. Compila Flutter Windows
con ACCRDP_ROLE definido; el ejecutable Flutter sirve a ambos roles y cada
paquete usa su DLL correspondiente. Incluye el nuevo encabezado de
credenciales Windows y AccrdpCredentials.kt de Android.
Pruebas nuevas: flutter test test/accrdp_tools_test.dart.
Almacenamiento Windows: https://learn.microsoft.com/windows/win32/api/wincred/nf-wincred-credwritew
Almacenamiento Android: https://developer.android.com/privacy-and-security/keystore
