Skip to content

Releases: YOpenSOS/maxpkg

maxpkg v0.2.0 (Pre-Release)

Pre-release

Choose a tag to compare

@github-actions github-actions released this 28 Oct 08:12

maxpkg v0.2.0 - Native Package Manager, Kernel EventBus & Multi-Language HAL SDK (Pre-Release)

Warning

Статус API: Experimental / Unstable (Pre-1.0)
Текущая архитектура libmax_hal, шина EventBus и контракты SDK находятся в активной разработке и ещё не зафиксированы. В следующих версиях возможны полные переработки (rewrites) отдельных модулей и ломающие изменения C-ABI без сохранения обратной совместимости. Всегда используйте maxctl и maxpkg-sdk-aarch64-v0.2.0.zip из одного и того же релиза.

Added

  • Ядерная событийная шина EventBus (modules::events / max_events_*):
    • Единый блокирующий мультиплексор poll(2) с нулевой нагрузкой на CPU (0% в режиме ожидания), объединяющий:
      • EventKind::Input (3) — прямое чтение /dev/input/event0..3 со встроенным конечным автоматом распознавания жестов (click, double_click, quadro_click, long_press) и вращения энкодера.
      • EventKind::BtPower (4) — мгновенное чтение 8-байтовых бинарных структур ядра struct rfkill_event из /dev/rfkill (RFKILL_TYPE_BLUETOOTH) с автоматической фильтрацией стартовых RFKILL_OP_ADD состояний.
      • EventKind::SoundPlay (7) — ядерный inotify (IN_OPEN | IN_CLOSE_WRITE) на /data/data/com.yandex.io.sdk/files/system/sounds/{common,ru-RU}, перехватывающий момент открытия любого системного звука демоном quasmodromd.
      • EventKind::AliceState (6) — ядерный inotify (IN_OPEN) на каталог ledpatterns, определяющий переходы состояний Алисы (listening, speaking, thinking, bluetooth, muted, idle) без чтения logcat.
      • EventKind::BtConfig (5) — ядерный inotify (IN_CLOSE_WRITE) на /data/misc/bluedroid/bt_config.conf при сопряжении или обновлении профиля Bluetooth-клиента.
      • EventKind::Tick (2) — встроенный периодический таймер timerfd_create(CLOCK_MONOTONIC) (set_tick_ms) для совмещения реактивной обработки событий и рендера кадров fb4/fb5 в одном потоке.
      • EventKind::Stop (1) — мгновенное пробуждение poll(2) при получении SIGTERM / SIGINT от супервизора maxctl.
  • Транзакционная подмена системных звуков в модуле audio (SoundOverrideManager):
    • Новые методы override_sound(target_rel, custom_src) и restore_sounds() во всех 5 SDK (max_audio_override_sound, max_audio_restore_sounds).
    • Автоматическое резервное копирование оригинальных звуков Яндекса в MAX_PKG_DATA/sound_backups/ при первой подмене.
    • Выставление прав 0644 и системного владельца u0_a38:u0_a38 (libc::chown) для бесшовного чтения процессом com.yandex.io.sdk.
    • Автоматическая проверка и самовосстановление подменённых файлов при попытке их перезаписи со стороны OTA (ensure_all_applied()) и гарантированный возврат заводских звуков в Drop при остановке пакета.
  • Аппаратный DSP Master Mute в модуле audio:
    • Методы is_muted() и set_mute(bool) (max_audio_is_muted, max_audio_set_mute), управляющие напрямую регистром NUMID_MASTER_MUTE = 68 (ctl 67) в /dev/snd/controlC0 за < 0.2 мс.
  • Приватная сборка и поставка готовых бинарных артефактов:
    • Полное удаление локальных путей хост-машины из исходников и бинарных артефактов (--remap-path-prefix, -ffile-prefix-map, -trimpath, llvm-strip) с автоматическим аудитом приватности на этапе сборки (scripts/build_all.ps1).
    • Скрипт автоматической сборки и публикации релизов scripts/release.ps1 и GitHub Actions workflow .github/workflows/release.yml, формирующие готовые архивы maxpkg-runtime-aarch64 (для установки на колонку) и maxpkg-sdk-aarch64 (предсобранные libmax_hal.a, libmax_hal.so и заголовки для разработки пакетов без компиляции ядра).

Changed

  • Полный отказ от порождения дочерних процессов (fork/exec) в модуле system:
    • Чтение и запись системных свойств Android (get_prop / set_prop) переведены с вызовов /system/bin/getprop и /system/bin/setprop на прямые FFI-вызовы __system_property_get и __system_property_set из системной библиотеки Bionic libc.so.
    • Получение IPv4-адреса и сетевой статистики wlan0 (wifi()) переведено с вызова /system/bin/ip на прямой ядерный вызов ioctl(SIOCGIFADDR) и чтение /sys/class/net/wlan0/statistics/{rx,tx}_bytes.
  • Перевод всех пакетов (bt-memes, pkg-rust, pkg-c, pkg-cpp, pkg-go, pkg-zig) на EventBus:
    • Убраны циклы поллинга sleep_ms() в пользу блокирующего ожидания ядерных событий next_event(-1).

Готовые артефакты релиза (aarch64-linux-android, без компиляции)

Файл Назначение
maxpkg-runtime-aarch64-v0.2.0.tar.gz Полный комплект для Яндекс Станции Макс: бинарник maxctl, динамическая библиотека libmax_hal.so, автоустановщик install-on-station.sh и 6 готовых пакетов (bt-memes, pkg-rust, pkg-c, pkg-cpp, pkg-go, pkg-zig)
maxpkg-sdk-aarch64-v0.2.0.zip SDK для разработчиков пакетов: предсобранные libmax_hal.a и libmax_hal.so (aarch64-linux-android, API 28), заголовки C99 (max_hal.h) и C++17 (max_hal.hpp), модули для Go (maxhal), Zig (maxhal.zig), Rust (max-sdk) и docs/API.md
maxctl-aarch64-linux-android Отдельный исполняемый файл пакетного менеджера и супервизора maxctl
libmax_hal.so Отдельная разделяемая библиотека ядра HAL (C-ABI)
libmax_hal.a Отдельная статическая библиотека ядра HAL для статической линковки
SHA256SUMS.txt Контрольные суммы SHA-256 всех бинарных файлов релиза

Быстрая установка на Яндекс Станцию Макс

tar -xzf maxpkg-runtime-aarch64-v0.2.0.tar.gz -C /data/local/tmp/
sh /data/local/tmp/maxpkg-runtime/install-on-station.sh

Сборка собственного пакета с готовым maxpkg-sdk-aarch64-v0.2.0.zip (без компиляции Rust)

# C99:
aarch64-linux-android28-clang -std=c99 -O2 main.c -I./include -L./lib -lmax_hal -ldl -llog -lm -o my-pkg

# C++17:
aarch64-linux-android28-clang++ -std=c++17 -O2 -static-libstdc++ main.cpp -I./include -L./lib -lmax_hal -ldl -llog -lm -o my-pkg

Контрольные суммы (SHA-256)

d314bad1aa5436a6522c051b3c21413bdc954b088841362ec73b034ac8524893  maxpkg-runtime-aarch64-v0.2.0.tar.gz
019bb2a5fa726a7e5520bf26ae4af56317a0d96d82ebe8fde83110ac698ecf41  maxpkg-sdk-aarch64-v0.2.0.zip
de500f7b0f1045b5230dad201c5fab11cb463de3bccda6156c75732994be65c1  maxctl-aarch64-linux-android
e7c64f792caf5fc8505dd3098426bf0c1be10c522e5f156037d91c49bb0e816b  libmax_hal.so
ca27c1c1f5b05122fcaceafd2cf18d9abba862d94b84163a4d0618dd6251f35b  libmax_hal.a