Skip to content
Быстрые старты

Быстрый старт для 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 forestvpn

2. Соберите разделяемую библиотеку

android-jni-build.sh
#!/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-тулчейна шаг сборки явно пропускается.