Mandochka ⚡
Mandochka — высокопроизводительный инструмент сборки плагинов для ElyxCore (exteraGram, AyuGram, exteraless и др.), форк ElyxBuilder с полной переработкой под максимальную производительность и нативную интеграцию с D8/Javac/R8 (DEX) без необходимости писать костыльные скрипты-обёртки, как это приходилось делать в pluginmanager-canary.
В чём проблема ElyxBuilder и почему появилась Mandochka?
В оригинальном ElyxBuilder:
- Полное отсутствие поддержки 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 (каждый запуск компилировал всё заново).
- Вручную писать сложные скрипты
- Экстремально медленная компиляция Python:
- ElyxBuilder для каждого
.pyфайла запускал отдельный процессpython -c "import py_compile...". При 50–100 файлах это занимало 15–20 секунд.
- ElyxBuilder для каждого
- Недописанный интерпретатор 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 SDKbuild-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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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.