Быстрый старт для Android
Соберите среду выполнения туннеля ForestVPN для Android из исходников с помощью cargo-ndk и свяжите её из своего VpnService.
Поверхность для Android — это крейт forestvpn-android-jni: среда
выполнения туннеля, скомпилированная как cdylib
(libforestvpn_android_jni.so), которой ваш VpnService управляет через
небольшой стабильный C-ABI.
Честно о распространении: сегодня этот путь — только из исходников. Готового AAR, артефакта в Maven и библиотеки-обёртки на Kotlin/Java нет — вы собираете разделяемую библиотеку из исходников и приносите собственный мост на JNI (или JNA). Когда это изменится, изменится и эта страница.
Что понадобится
- Набор инструментов Rust (rustup.rs) с Android-таргетами
(
rustup target add aarch64-linux-android) cargo-ndk(cargo install cargo-ndk)- Android NDK с установленной переменной
ANDROID_NDK_HOME - Локальная копия репозитория ForestVPN
1. Получите исходники
git clone [email protected]:forestvpn/forestvpn.git
cd forestvpn2. Соберите разделяемую библиотеку
#!/usr/bin/env bash
# Build the ForestVPN Android tunnel runtime from source (the only
# distribution path today — no prebuilt AAR ships). Run from the repo root.
# Prerequisites: the Rust toolchain, cargo-ndk, and the Android NDK
# (ANDROID_NDK_HOME).
set -euo pipefail
cd forestvpn-sdk
cargo ndk -t arm64-v8a build -p forestvpn-android-jni --release
# → target/aarch64-linux-android/release/libforestvpn_android_jni.soДобавляйте другие таргеты через -t (armeabi-v7a, x86_64) по мере
необходимости вашей матрицы ABI. Скопируйте полученный .so в каталог
src/main/jniLibs/<abi>/ вашего модуля приложения и загрузите его вызовом
System.loadLibrary("forestvpn_android_jni").
3. C-ABI, который вы связываете
Библиотека экспортирует компактную поверхность extern "C" (см.
forestvpn-sdk/crates/forestvpn-android-jni/src/exports.rs — там находятся
канонические сигнатуры):
| Точка входа | Что делает |
|---|---|
fvpn_android_abi_version | Согласование версии ABI — проверьте его прежде всего остального |
fvpn_android_initialize | Создаёт среду выполнения туннеля из установленного TUN-fd VpnService и версионированной конфигурации среды выполнения |
fvpn_android_set_target_state | Управляет конечным автоматом туннеля (secured / unsecured) |
fvpn_android_apply_runtime_config | Применяет новую конфигурацию к работающей среде выполнения |
fvpn_android_status | Читает документ статуса среды выполнения |
fvpn_android_last_error_message | Копирует потоко-локальное сообщение об ошибке после неудачного вызова |
fvpn_android_shutdown | Останавливает и освобождает дескриптор среды выполнения |
Схема повторяет любую другую туннельную платформу ForestVPN: ваш
VpnService поднимает интерфейс TUN, передаёт его fd вместе с конфигурацией
среды выполнения из управляющей плоскости в fvpn_android_initialize, затем
задаёт целевое состояние secured. Статус и ошибки опрашиваются через тот же
дескриптор.
Чем проверяется
scripts/quickstart-verify/android-jni.sh — проверяет, что крейт существует
по документированному пути, что каждая перечисленная выше точка входа
действительно экспортируется, и (при наличии cargo-ndk и NDK) запускает
тот же скрипт сборки, что встроен на этой странице. Без Android-тулчейна шаг
сборки явно пропускается.
Быстрый старт для Apple
Подключите Swift-пакет ForestVPN из исходников и прочитайте первый статус туннеля на iOS, macOS или tvOS.
Быстрый старт для C ABI и Dart
Используйте чистый C-интерфейс клиента ForestVPN — один заголовок, одна разделяемая библиотека — из C или сгенерируйте Dart-привязки для Flutter.