Skip to main content

Mandochka ⚡

PyPI version License: MIT Python: >=3.10

Mandochka — высокопроизводительный инструмент сборки плагинов для ElyxCore (exteraGram, AyuGram, exteraless и др.), форк ElyxBuilder с полной переработкой под максимальную производительность и нативную интеграцию с D8/Javac/R8 (DEX) без необходимости писать костыльные скрипты-обёртки, как это приходилось делать в pluginmanager-canary.


В чём проблема ElyxBuilder и почему появилась Mandochka?

В оригинальном ElyxBuilder:

  1. Полное отсутствие поддержки DEX/Java: если плагину требовался нативный Java DEX мост (как в pluginmanager-canary для SIMD/DEX ускорения векторных моделей или хуков), разработчикам приходилось:
    • Вручную писать сложные скрипты build-dex.sh и build-dex.bat на 130+ строк.
    • Искать JDK, javac, Android SDK или писать скрипты скачивания r8.jar через PowerShell/curl.
    • Компилировать стабы (compile_stubs) вручную в два этапа.
    • Оборачивать elyb build во внешние скрипты build-uv.sh / build-uv.bat.
    • Терпеть отсутствие инкрементального кэширования для Java/DEX (каждый запуск компилировал всё заново).
  2. Экстремально медленная компиляция Python:
    • ElyxBuilder для каждого .py файла запускал отдельный процесс python -c "import py_compile...". При 50–100 файлах это занимало 15–20 секунд.
  3. Недописанный интерпретатор DSL:
    • Команда elyb script падала с ModuleNotFoundError: No module named 'elyb.elyxdsl.interpreter'.

Что даёт Mandochka?

1. Нативная интеграция с D8 / Javac / R8 («без извращений»)

  • Zero-config автоопределение: если в проекте есть dex_src/ или java_src/, Mandochka сама всё скомпилирует в .dex.
  • R8 Minify & Shrinking (--minify): сжатие байткода, удаление мертвого кода (DCE), оптимизация регистров и обфускация Java классов через com.android.tools.r8.R8 (уменьшает размер .dex на 20–50%).
  • Автопоиск компиляторов: автоматически находит javac в PATH, JAVA_HOME, Scoop (temurin17-jdk и др.), Program Files и системных путях Linux/macOS.
  • Автопоиск и автозагрузка D8/R8: находит d8 в Android SDK build-tools, либо автоматически скачивает официальный r8.jar с Google Maven в глобальный кэш ~/.mandochka/bin/r8.jar. Больше никаких ручных скачиваний!
  • Поддержка Stubs: двухэтапная компиляция стабов (compile_stubs/) и внешних .jar библиотек из коробки.
  • Инкрементальный кэш DEX: если Java-файлы и стабы не менялись, проверка занимает < 10 мс.
  • Команда mandochka dex: отдельная удобная команда для прямой сборки DEX без упаковки всего плагина.

2. Максимальная производительность & Быстрые библиотеки

  • Скоростные библиотеки:
    • orjson (Rust) — до 20x быстрее парсинг JSON манифестов и кэшей.
    • xxhash (xxh3_64) — хеширование файлов со скоростью 10–15 ГБ/с.
    • isal (Intel AVX-512 Deflate) — 5–10x быстрее упаковка zip/eaf архивов.
  • Пакетная и многопоточная компиляция Python 3.11:
    • Нативная компиляция в памяти при запуске под Python 3.11.
    • Высокоскоростной батч-воркер через потоки/процессы: 100+ файлов компилируются за ~150 мс вместо 15 секунд.
  • Многопоточная проверка AST (-a) и параллельная обфускация (-o) с инкрементальным кэшированием.
  • Сверхбыстрая повторная сборка: проект из 150 файлов пересобирается всего за ~40 миллисекунд!
  • Бенчмарк фаз (-b / --benchmark): детальный отчёт о времени каждой стадии (dex, ast, pyc, pack) в миллисекундах.

3. Полная совместимость и сохранение возможностей

  • Псевдонимы команд: mandochka, mando, elyb (полная обратная совместимость со всеми существующими скриптами и CI!).
  • Поддержка refmap.json, refmap.yml, config.yml, .mandochka/ и .elyxbuilder/.
  • Полный набор команд: new, build, dex, doctor, cached, stats, watch, ignore, script.
  • Полнофункциональный интерпретатор .edsl для автоматизации сборки.

Сравнение производительности

Сценарий ElyxBuilder Mandochka (чистый) Mandochka (инкрементальный)
Сборка плагина (~150 файлов) ~18.5 с ~1.2 с ~0.04 с (43 мс)
Сборка Java в DEX (3 файла + стабы) Вручную скриптами (~4.5 с) Нативно (~1.0 с) ~0.01 с (10 мс)
Сжатие и обфускация Java (R8 Minify) Не поддерживалось ~2.0 с ~0.01 с (10 мс)
Проверка AST синтаксиса ~0.8 с ~0.25 с ~0.001 с (1 мс)

Установка

pip install mandochka

Проверьте готовность системы:

mandochka doctor

Быстрый старт

Создание плагина с Java DEX мостом:

mandochka new -g -n "MyPlugin" -a "Nickname" --with-dex
cd Myplugin

Сборка плагина:

# Скомпилирует Python 3.11 bytecode + Java DEX + упакует в builds/MyPlugin-0.1.0-3.11.eaf
mandochka build -c 2 -b

# Сборка со сжатием DEX через R8 Minify
mandochka build -c 2 --minify -b

Отдельная компиляция только DEX:

# Обычная компиляция D8
mandochka dex -v

# Сжатие и обфускация R8 Minify
mandochka dex --minify -v

Просмотр статуса кэша:

mandochka cached

Конфигурация (config.yml)

zipFormat: eaf
source: myplugin/src
buildNameUncompiled: "{name}-{version}"
buildNameCompiled: "{name}-{version}-3.11"
ignoreAll:
  - myplugin/.mandochka/cache/*
compilationIgnore:
  - myplugin/src/main.py

# Нативная интеграция DEX / Java / R8
dex:
  enabled: true
  source: myplugin/dex_src
  stubs: myplugin/compile_stubs
  output: myplugin/res/dex/classes.dex
  minApi: 26
  targetJava: 8
  minify: true          # R8 Minify & Shrinking
  rules: rules.pro      # опциональные правила Proguard
  autoDownloadR8: true

obfuscationConfig:
  stripDocstrings: true
  removeLogs: true
  renameLocals: true
  encodeStrings: true
  encodeNumbers: true

CLI Справка

  • mandochka build: сборка плагина (-c [0-2], -a, -o, -p <method> <pass>, --dex, --skip-dex, --minify, --rules, -j <jobs>, -b).
  • mandochka dex: прямая компиляция Java в Dalvik DEX (--source, --output, --stubs, --min-api, --release, --minify, --rules, --d8, --javac, -f, -c, -v).
  • mandochka doctor: диагностика компиляторов и инструментов окружения.
  • mandochka cached: статус файлов в кэше Python и DEX.
  • mandochka stats: статистика проекта (builds, lines, size, files).
  • mandochka watch: авто-пересборка при изменениях файлов.
  • mandochka new: мастер создания плагина (интерактивный или через --gen).
  • mandochka script: запуск .edsl скриптов автоматизации.
  • mandochka add-ignore / del-ignore: управление списками игнорирования.

Документация


Лицензия

MIT License. См. файл LICENSE.

Metadata

Release files for mandochka 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mandochka 0.1.1
File Size Uploaded Provenance Actions
mandochka-0.1.1.tar.gz 83.4 kB Without provenance Details for mandochka-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for mandochka 0.1.1
File Interpreter ABI Platform Actions
mandochka-0.1.1-py3-none-any.whl Python 3 none any Details for mandochka-0.1.1-py3-none-any.whl

Total release size: 172.8 kB

Release files / mandochka-0.1.1.tar.gz

Download URL mandochka-0.1.1.tar.gz
Size 83.4 kB
Tags Source
SHA-256 checksum
How to use checksums
47ef77efca33bf78727a10c3e7149556e64bfd63653686bd0bbd5b06e0f524d5
BLAKE2b-256 checksum
How to use checksums
e2e9aad81149d7ba1cbbdad901202298147505482bc75e8cd143cf2ccae3c920
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.9

Release files / mandochka-0.1.1-py3-none-any.whl

Download URL mandochka-0.1.1-py3-none-any.whl
Size 89.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dc3862d9128a61c7ace8ce02e69a8f0ab772b9cc601edd4aa30576a7e06c6ada
BLAKE2b-256 checksum
How to use checksums
e91dc06c25580c4eeac378ce1421aac5cc15c5b7582107f1374497e3ffefc6cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.9

Security for mandochka 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page