Documentation · Engine · 07
Нативная интеграция
Как встроить Axion Engine в Flutter, Qt, нативное приложение или собственную оболочку.
07 Нативная интеграция
Движок не зависит от конкретного UI. Внешняя оболочка (Flutter, Qt, нативное приложение) общается с Engine через Axion Protocol или напрямую через Rust API.
7.1Axion Protocol
Protocol — стабильный JSON-RPC-интерфейс, через который клиент управляет Engine:
use axion_protocol::{ProtocolRequest, method};
let req = ProtocolRequest {
id: "req-1".into(),
method: method::APP_LIST.into(),
params: serde_json::json!({}),
};
let resp = axion_engine::protocol::handle(&engine, &req);
Клиент получает ProtocolResponse с полем ok, data и error.
7.2Методы протокола
| Метод | Описание | Параметры |
|---|---|---|
engine.info | Информация о движке | — |
app.install | Установка пакета | package_b64 |
app.launch | Запуск приложения | app_id |
app.stop | Остановка сессии | run_id |
app.suspend | Приостановка | run_id |
app.resume | Возобновление | run_id |
app.list | Установленные приложения | — |
app.state | Состояние сессии | run_id |
permissions.get | Текущая политика | — |
permissions.grant | Разрешить capability | app_id, capability, scope |
permissions.revoke | Запретить capability | app_id, capability |
workspace.current | Текущий workspace | — |
workspace.open | Открыть workspace | path |
capabilities.list | Доступные capabilities | — |
ipc.call | Вызов IPC-метода | method, args |
events.subscribe | Подписка на событие | event |
7.3C ABI
Для оболочек на других языках (Dart, Swift, Kotlin, C++) Engine может экспортировать стабильный C ABI:
┌─────────────────────────────────────────┐
│ MyShell (Flutter / Qt) │
│ │
│ Dart / QML / Native UI │
│ │ │
│ Language Bindings (Dart FFI / Q_INV) │
│ │ │
└───────┼─────────────────────────────────┘
│ C ABI (libaxion)
│
┌───────▼─────────────────────────────────┐
│ Axion Engine (Rust) │
│ │
│ Runtime | WebView | Capabilities │
│ Permissions | IPC | Storage │
│ Package Manager | Lifecycle │
└─────────────────────────────────────────┘
7.4Нативное приложение
Самый простой способ — подключить axion-engine как зависимость и вызывать API напрямую:
// Rust: нативное приложение с Axion Engine use axion_engine::{AxionEngine, EngineOptions}; fn main() -> Result<(), Box<dyn std::error::Error>> { let engine = AxionEngine::init( EngineOptions::new(dirs::data_local_dir().unwrap().join("my-shell")) )?; // Установка приложения let app = engine.install_file(std::path::Path::new("todo.axn"))?; // Запуск let run_id = engine.launch(&app.extension_id())?; // Создание WebView и загрузка entry.html let entry = engine.app_files_dir(&app.extension_id())?.join("index.html"); // ... WebView::load(&entry) Ok(()) }
Оболочки и экосистема
Оболочки