Axion Платформа Скачать
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Разрешить capabilityapp_id, capability, scope
permissions.revokeЗапретить capabilityapp_id, capability
workspace.currentТекущий workspace
workspace.openОткрыть workspacepath
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(())
}
Оболочки и экосистема
Оболочки