mandochka 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mandochka-0.1.0/LICENSE +22 -0
- mandochka-0.1.0/MANIFEST.in +23 -0
- mandochka-0.1.0/PKG-INFO +197 -0
- mandochka-0.1.0/README.md +162 -0
- mandochka-0.1.0/docs/en/en.md +123 -0
- mandochka-0.1.0/docs/ru/build.md +58 -0
- mandochka-0.1.0/docs/ru/commands.md +43 -0
- mandochka-0.1.0/docs/ru/dex.md +96 -0
- mandochka-0.1.0/pyproject.toml +71 -0
- mandochka-0.1.0/setup.cfg +4 -0
- mandochka-0.1.0/src/elyb/__init__.py +6 -0
- mandochka-0.1.0/src/elyb/cli.py +4 -0
- mandochka-0.1.0/src/elyb/cmds/build.py +1 -0
- mandochka-0.1.0/src/elyb/cmds/cached.py +1 -0
- mandochka-0.1.0/src/elyb/cmds/components/progress.py +2 -0
- mandochka-0.1.0/src/elyb/cmds/components/rawterm.py +1 -0
- mandochka-0.1.0/src/elyb/cmds/ignore.py +1 -0
- mandochka-0.1.0/src/elyb/cmds/new.py +1 -0
- mandochka-0.1.0/src/elyb/cmds/obfuscate.py +1 -0
- mandochka-0.1.0/src/elyb/cmds/script.py +1 -0
- mandochka-0.1.0/src/elyb/cmds/stats.py +1 -0
- mandochka-0.1.0/src/elyb/cmds/version.py +1 -0
- mandochka-0.1.0/src/elyb/cmds/watch.py +1 -0
- mandochka-0.1.0/src/elyb/config.json +6 -0
- mandochka-0.1.0/src/elyb/elyxdsl/__init__.py +1 -0
- mandochka-0.1.0/src/elyb/elyxdsl/ast_nodes.py +1 -0
- mandochka-0.1.0/src/elyb/elyxdsl/errors.py +1 -0
- mandochka-0.1.0/src/elyb/elyxdsl/interpreter.py +1 -0
- mandochka-0.1.0/src/elyb/elyxdsl/lexer.py +1 -0
- mandochka-0.1.0/src/elyb/elyxdsl/parser/parser.py +1 -0
- mandochka-0.1.0/src/mandochka/__init__.py +3 -0
- mandochka-0.1.0/src/mandochka/cli.py +265 -0
- mandochka-0.1.0/src/mandochka/cmds/build.py +412 -0
- mandochka-0.1.0/src/mandochka/cmds/cached.py +129 -0
- mandochka-0.1.0/src/mandochka/cmds/dex.py +96 -0
- mandochka-0.1.0/src/mandochka/cmds/doctor.py +84 -0
- mandochka-0.1.0/src/mandochka/cmds/ignore.py +77 -0
- mandochka-0.1.0/src/mandochka/cmds/new.py +335 -0
- mandochka-0.1.0/src/mandochka/cmds/script.py +59 -0
- mandochka-0.1.0/src/mandochka/cmds/stats.py +200 -0
- mandochka-0.1.0/src/mandochka/cmds/version.py +12 -0
- mandochka-0.1.0/src/mandochka/cmds/watch.py +106 -0
- mandochka-0.1.0/src/mandochka/config.json +8 -0
- mandochka-0.1.0/src/mandochka/core/config.py +97 -0
- mandochka-0.1.0/src/mandochka/core/fastio.py +163 -0
- mandochka-0.1.0/src/mandochka/core/manifest.py +60 -0
- mandochka-0.1.0/src/mandochka/core/progress.py +129 -0
- mandochka-0.1.0/src/mandochka/core/terminal.py +145 -0
- mandochka-0.1.0/src/mandochka/dex/compiler.py +259 -0
- mandochka-0.1.0/src/mandochka/dex/config.py +158 -0
- mandochka-0.1.0/src/mandochka/dex/toolchain.py +307 -0
- mandochka-0.1.0/src/mandochka/dsl/__init__.py +6 -0
- mandochka-0.1.0/src/mandochka/dsl/ast_nodes.py +239 -0
- mandochka-0.1.0/src/mandochka/dsl/errors.py +36 -0
- mandochka-0.1.0/src/mandochka/dsl/interpreter.py +258 -0
- mandochka-0.1.0/src/mandochka/dsl/lexer.py +175 -0
- mandochka-0.1.0/src/mandochka/dsl/parser.py +571 -0
- mandochka-0.1.0/src/mandochka/pack/archive.py +225 -0
- mandochka-0.1.0/src/mandochka/pack/meta.py +68 -0
- mandochka-0.1.0/src/mandochka/py/ast_check.py +86 -0
- mandochka-0.1.0/src/mandochka/py/compiler.py +306 -0
- mandochka-0.1.0/src/mandochka/py/obfuscate.py +372 -0
- mandochka-0.1.0/src/mandochka.egg-info/PKG-INFO +197 -0
- mandochka-0.1.0/src/mandochka.egg-info/SOURCES.txt +66 -0
- mandochka-0.1.0/src/mandochka.egg-info/dependency_links.txt +1 -0
- mandochka-0.1.0/src/mandochka.egg-info/entry_points.txt +4 -0
- mandochka-0.1.0/src/mandochka.egg-info/requires.txt +10 -0
- mandochka-0.1.0/src/mandochka.egg-info/top_level.txt +2 -0
mandochka-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Mandochka Contributors
|
|
4
|
+
Copyright (c) 2026 shareui
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
include LICENSE
|
|
2
|
+
include README.md
|
|
3
|
+
include pyproject.toml
|
|
4
|
+
|
|
5
|
+
recursive-include src/mandochka *.json *.py
|
|
6
|
+
recursive-include src/elyb *.json *.py
|
|
7
|
+
recursive-include docs *
|
|
8
|
+
|
|
9
|
+
exclude tests/*
|
|
10
|
+
prune tests
|
|
11
|
+
prune ElyxBuilder-main
|
|
12
|
+
prune pluginmanager-canary
|
|
13
|
+
|
|
14
|
+
global-exclude __pycache__
|
|
15
|
+
global-exclude *.py[cod]
|
|
16
|
+
global-exclude *.dex
|
|
17
|
+
global-exclude *.jar
|
|
18
|
+
global-exclude *.class
|
|
19
|
+
global-exclude *.eaf
|
|
20
|
+
global-exclude *.zip
|
|
21
|
+
global-exclude .git*
|
|
22
|
+
global-exclude .DS_Store
|
|
23
|
+
global-exclude Thumbs.db
|
mandochka-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mandochka
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: High-performance plugin builder for ElyxCore with native D8/Javac DEX compilation and incremental architecture
|
|
5
|
+
Author: Mandochka Team
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/shareui/Mandochka
|
|
8
|
+
Project-URL: Repository, https://github.com/shareui/Mandochka
|
|
9
|
+
Project-URL: Issues, https://github.com/shareui/Mandochka/issues
|
|
10
|
+
Project-URL: Documentation, https://github.com/shareui/Mandochka#readme
|
|
11
|
+
Keywords: elyx,elyxbuilder,plugin,builder,d8,javac,dex,android,compiler,fast,exteragram,ayugram
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Software Development :: Build Tools
|
|
21
|
+
Classifier: Topic :: Software Development :: Compilers
|
|
22
|
+
Classifier: Topic :: Software Development :: Code Generators
|
|
23
|
+
Requires-Python: >=3.10
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Requires-Dist: pyyaml>=6.0
|
|
27
|
+
Requires-Dist: orjson>=3.9.0
|
|
28
|
+
Requires-Dist: xxhash>=3.3.0
|
|
29
|
+
Requires-Dist: isal>=1.5.0
|
|
30
|
+
Provides-Extra: crypto
|
|
31
|
+
Requires-Dist: pyzipper>=0.3.6; extra == "crypto"
|
|
32
|
+
Provides-Extra: all
|
|
33
|
+
Requires-Dist: pyzipper>=0.3.6; extra == "all"
|
|
34
|
+
Dynamic: license-file
|
|
35
|
+
|
|
36
|
+
# Mandochka ⚡
|
|
37
|
+
|
|
38
|
+
[](LICENSE)
|
|
39
|
+
[](pyproject.toml)
|
|
40
|
+
|
|
41
|
+
**Mandochka** — высокопроизводительный инструмент сборки плагинов для **ElyxCore** (exteraGram, AyuGram, exteraless и др.), форк ElyxBuilder с полной переработкой под **максимальную производительность** и **нативную интеграцию с D8/Javac (DEX)** без необходимости писать костыльные скрипты-обёртки, как это приходилось делать в `pluginmanager-canary`.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## В чём проблема ElyxBuilder и почему появилась Mandochka?
|
|
46
|
+
|
|
47
|
+
В оригинальном `ElyxBuilder`:
|
|
48
|
+
1. **Полное отсутствие поддержки DEX/Java**: если плагину требовался нативный Java DEX мост (как в `pluginmanager-canary` для SIMD/DEX ускорения векторных моделей или хуков), разработчикам приходилось:
|
|
49
|
+
- Вручную писать сложные скрипты `build-dex.sh` и `build-dex.bat` на 130+ строк.
|
|
50
|
+
- Искать JDK, javac, Android SDK или писать скрипты скачивания `r8.jar` через PowerShell/curl.
|
|
51
|
+
- Компилировать стабы (`compile_stubs`) вручную в два этапа.
|
|
52
|
+
- Оборачивать `elyb build` во внешние скрипты `build-uv.sh` / `build-uv.bat`.
|
|
53
|
+
- Терпеть отсутствие инкрементального кэширования для Java/DEX (каждый запуск компилировал всё заново).
|
|
54
|
+
2. **Экстремально медленная компиляция Python**:
|
|
55
|
+
- ElyxBuilder для каждого `.py` файла запускал отдельный процесс `python -c "import py_compile..."`. При 50–100 файлах это занимало **15–20 секунд**.
|
|
56
|
+
3. **Недописанный интерпретатор DSL**:
|
|
57
|
+
- Команда `elyb script` падала с `ModuleNotFoundError: No module named 'elyb.elyxdsl.interpreter'`.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Что даёт Mandochka?
|
|
62
|
+
|
|
63
|
+
### 1. Нативная интеграция с D8 / Javac («без извращений»)
|
|
64
|
+
- **Zero-config автоопределение**: если в проекте есть `dex_src/` или `java_src/`, Mandochka сама всё скомпилирует в `.dex`.
|
|
65
|
+
- **Автопоиск компиляторов**: автоматически находит `javac` в PATH, `JAVA_HOME`, Scoop (`temurin17-jdk` и др.), Program Files и системных путях Linux/macOS.
|
|
66
|
+
- **Автопоиск и автозагрузка D8/R8**: находит `d8` в Android SDK `build-tools`, либо **автоматически скачивает официальный `r8.jar`** с Google Maven в глобальный кэш `~/.mandochka/bin/r8.jar`. Больше никаких ручных скачиваний!
|
|
67
|
+
- **Поддержка Stubs**: двухэтапная компиляция стабов (`compile_stubs/`) и внешних `.jar` библиотек из коробки.
|
|
68
|
+
- **Инкрементальный кэш DEX**: если Java-файлы и стабы не менялись, проверка занимает **< 15 мс**.
|
|
69
|
+
- **Команда `mandochka dex`**: отдельная удобная команда для прямой сборки DEX без упаковки всего плагина.
|
|
70
|
+
|
|
71
|
+
### 2. Максимальная производительность
|
|
72
|
+
- **Пакетная и многопоточная компиляция Python 3.11**:
|
|
73
|
+
- Нативная компиляция в памяти при запуске под Python 3.11.
|
|
74
|
+
- Высокоскоростной батч-воркер через потоки/процессы: **100+ файлов компилируются за ~150 мс** вместо 15 секунд.
|
|
75
|
+
- **Многопоточная проверка AST (`-a`)** и параллельная обфускация (`-o`).
|
|
76
|
+
- **Сверхбыстрая повторная сборка**: проект из 150 файлов пересобирается всего за **~170 миллисекунд**!
|
|
77
|
+
- **Бенчмарк фаз (`-b` / `--benchmark`)**: детальный отчёт о времени каждой стадии (dex, ast, pyc, pack) в миллисекундах.
|
|
78
|
+
|
|
79
|
+
### 3. Полная совместимость и сохранение возможностей
|
|
80
|
+
- Псевдонимы команд: `mandochka`, `mando`, `elyb` (полная обратная совместимость со всеми существующими скриптами и CI!).
|
|
81
|
+
- Поддержка `refmap.json`, `refmap.yml`, `config.yml`, `.mandochka/` и `.elyxbuilder/`.
|
|
82
|
+
- Полный набор команд: `new`, `build`, `dex`, `doctor`, `cached`, `stats`, `watch`, `ignore`, `script`.
|
|
83
|
+
- **Полнофункциональный интерпретатор `.edsl`** для автоматизации сборки.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Сравнение производительности
|
|
88
|
+
|
|
89
|
+
| Сценарий | ElyxBuilder | Mandochka | Ускорение |
|
|
90
|
+
|---|---|---|---|
|
|
91
|
+
| Сборка плагина (~150 файлов) без кэша | ~18.5 с | **~1.2 с** | **~15x быстрее** |
|
|
92
|
+
| Инкрементальная пересборка (кэш hit) | ~3.2 с | **~0.17 с (170 мс)** | **~19x быстрее** |
|
|
93
|
+
| Сборка Java в DEX (3 файла + стабы) | Вручную скриптами (~4.5 с) | **Нативно (~1.0 с)** | **Автоматически** |
|
|
94
|
+
| Повторный DEX (кэш hit) | Перекомпиляция (~4.5 с) | **~0.01 с (10 мс)** | **Мгновенно** |
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Установка
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
git clone https://github.com/shareui/Mandochka.git
|
|
102
|
+
cd Mandochka
|
|
103
|
+
pip install -e .
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Проверьте готовность системы:
|
|
107
|
+
```bash
|
|
108
|
+
mandochka doctor
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Быстрый старт
|
|
114
|
+
|
|
115
|
+
### Создание плагина с Java DEX мостом:
|
|
116
|
+
```bash
|
|
117
|
+
mandochka new -g -n "MyPlugin" -a "Nickname" --with-dex
|
|
118
|
+
cd Myplugin
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Сборка плагина:
|
|
122
|
+
```bash
|
|
123
|
+
# Скомпилирует Python 3.11 bytecode + Java DEX + упакует в builds/MyPlugin-0.1.0-3.11.eaf
|
|
124
|
+
mandochka build -c 2 -b
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Отдельная компиляция только DEX:
|
|
128
|
+
```bash
|
|
129
|
+
mandochka dex -v
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Просмотр статуса кэша:
|
|
133
|
+
```bash
|
|
134
|
+
mandochka cached
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Конфигурация (`config.yml`)
|
|
140
|
+
|
|
141
|
+
```yaml
|
|
142
|
+
zipFormat: eaf
|
|
143
|
+
source: myplugin/src
|
|
144
|
+
buildNameUncompiled: "{name}-{version}"
|
|
145
|
+
buildNameCompiled: "{name}-{version}-3.11"
|
|
146
|
+
ignoreAll:
|
|
147
|
+
- myplugin/.mandochka/cache/*
|
|
148
|
+
compilationIgnore:
|
|
149
|
+
- myplugin/src/main.py
|
|
150
|
+
|
|
151
|
+
# Нативная интеграция DEX / Java
|
|
152
|
+
dex:
|
|
153
|
+
enabled: true
|
|
154
|
+
source: myplugin/dex_src
|
|
155
|
+
stubs: myplugin/compile_stubs
|
|
156
|
+
output: myplugin/res/dex/classes.dex
|
|
157
|
+
minApi: 26
|
|
158
|
+
targetJava: 8
|
|
159
|
+
autoDownloadR8: true
|
|
160
|
+
|
|
161
|
+
obfuscationConfig:
|
|
162
|
+
stripDocstrings: true
|
|
163
|
+
removeLogs: true
|
|
164
|
+
renameLocals: true
|
|
165
|
+
encodeStrings: true
|
|
166
|
+
encodeNumbers: true
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## CLI Справка
|
|
172
|
+
|
|
173
|
+
- `mandochka build`: сборка плагина (`-c [0-2]`, `-a`, `-o`, `-p <method> <pass>`, `--dex`, `--skip-dex`, `-j <jobs>`, `-b`).
|
|
174
|
+
- `mandochka dex`: прямая компиляция Java в Dalvik DEX (`--source`, `--output`, `--stubs`, `--min-api`, `--release`, `--d8`, `--javac`, `-f`, `-c`, `-v`).
|
|
175
|
+
- `mandochka doctor`: диагностика компиляторов и инструментов окружения.
|
|
176
|
+
- `mandochka cached`: статус файлов в кэше Python и DEX.
|
|
177
|
+
- `mandochka stats`: статистика проекта (`builds`, `lines`, `size`, `files`).
|
|
178
|
+
- `mandochka watch`: авто-пересборка при изменениях файлов.
|
|
179
|
+
- `mandochka new`: мастер создания плагина (интерактивный или через `--gen`).
|
|
180
|
+
- `mandochka script`: запуск `.edsl` скриптов автоматизации.
|
|
181
|
+
- `mandochka add-ignore` / `del-ignore`: управление списками игнорирования.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Документация
|
|
186
|
+
|
|
187
|
+
- [Русская документация](docs/ru/)
|
|
188
|
+
- [Интеграция с D8 / Javac](docs/ru/dex.md)
|
|
189
|
+
- [Сборка плагинов](docs/ru/build.md)
|
|
190
|
+
- [Команды и утилиты](docs/ru/commands.md)
|
|
191
|
+
- [English Documentation](docs/en/en.md)
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Лицензия
|
|
196
|
+
|
|
197
|
+
MIT License. См. файл [LICENSE](LICENSE).
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Mandochka ⚡
|
|
2
|
+
|
|
3
|
+
[](LICENSE)
|
|
4
|
+
[](pyproject.toml)
|
|
5
|
+
|
|
6
|
+
**Mandochka** — высокопроизводительный инструмент сборки плагинов для **ElyxCore** (exteraGram, AyuGram, exteraless и др.), форк ElyxBuilder с полной переработкой под **максимальную производительность** и **нативную интеграцию с D8/Javac (DEX)** без необходимости писать костыльные скрипты-обёртки, как это приходилось делать в `pluginmanager-canary`.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## В чём проблема ElyxBuilder и почему появилась Mandochka?
|
|
11
|
+
|
|
12
|
+
В оригинальном `ElyxBuilder`:
|
|
13
|
+
1. **Полное отсутствие поддержки DEX/Java**: если плагину требовался нативный Java DEX мост (как в `pluginmanager-canary` для SIMD/DEX ускорения векторных моделей или хуков), разработчикам приходилось:
|
|
14
|
+
- Вручную писать сложные скрипты `build-dex.sh` и `build-dex.bat` на 130+ строк.
|
|
15
|
+
- Искать JDK, javac, Android SDK или писать скрипты скачивания `r8.jar` через PowerShell/curl.
|
|
16
|
+
- Компилировать стабы (`compile_stubs`) вручную в два этапа.
|
|
17
|
+
- Оборачивать `elyb build` во внешние скрипты `build-uv.sh` / `build-uv.bat`.
|
|
18
|
+
- Терпеть отсутствие инкрементального кэширования для Java/DEX (каждый запуск компилировал всё заново).
|
|
19
|
+
2. **Экстремально медленная компиляция Python**:
|
|
20
|
+
- ElyxBuilder для каждого `.py` файла запускал отдельный процесс `python -c "import py_compile..."`. При 50–100 файлах это занимало **15–20 секунд**.
|
|
21
|
+
3. **Недописанный интерпретатор DSL**:
|
|
22
|
+
- Команда `elyb script` падала с `ModuleNotFoundError: No module named 'elyb.elyxdsl.interpreter'`.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Что даёт Mandochka?
|
|
27
|
+
|
|
28
|
+
### 1. Нативная интеграция с D8 / Javac («без извращений»)
|
|
29
|
+
- **Zero-config автоопределение**: если в проекте есть `dex_src/` или `java_src/`, Mandochka сама всё скомпилирует в `.dex`.
|
|
30
|
+
- **Автопоиск компиляторов**: автоматически находит `javac` в PATH, `JAVA_HOME`, Scoop (`temurin17-jdk` и др.), Program Files и системных путях Linux/macOS.
|
|
31
|
+
- **Автопоиск и автозагрузка D8/R8**: находит `d8` в Android SDK `build-tools`, либо **автоматически скачивает официальный `r8.jar`** с Google Maven в глобальный кэш `~/.mandochka/bin/r8.jar`. Больше никаких ручных скачиваний!
|
|
32
|
+
- **Поддержка Stubs**: двухэтапная компиляция стабов (`compile_stubs/`) и внешних `.jar` библиотек из коробки.
|
|
33
|
+
- **Инкрементальный кэш DEX**: если Java-файлы и стабы не менялись, проверка занимает **< 15 мс**.
|
|
34
|
+
- **Команда `mandochka dex`**: отдельная удобная команда для прямой сборки DEX без упаковки всего плагина.
|
|
35
|
+
|
|
36
|
+
### 2. Максимальная производительность
|
|
37
|
+
- **Пакетная и многопоточная компиляция Python 3.11**:
|
|
38
|
+
- Нативная компиляция в памяти при запуске под Python 3.11.
|
|
39
|
+
- Высокоскоростной батч-воркер через потоки/процессы: **100+ файлов компилируются за ~150 мс** вместо 15 секунд.
|
|
40
|
+
- **Многопоточная проверка AST (`-a`)** и параллельная обфускация (`-o`).
|
|
41
|
+
- **Сверхбыстрая повторная сборка**: проект из 150 файлов пересобирается всего за **~170 миллисекунд**!
|
|
42
|
+
- **Бенчмарк фаз (`-b` / `--benchmark`)**: детальный отчёт о времени каждой стадии (dex, ast, pyc, pack) в миллисекундах.
|
|
43
|
+
|
|
44
|
+
### 3. Полная совместимость и сохранение возможностей
|
|
45
|
+
- Псевдонимы команд: `mandochka`, `mando`, `elyb` (полная обратная совместимость со всеми существующими скриптами и CI!).
|
|
46
|
+
- Поддержка `refmap.json`, `refmap.yml`, `config.yml`, `.mandochka/` и `.elyxbuilder/`.
|
|
47
|
+
- Полный набор команд: `new`, `build`, `dex`, `doctor`, `cached`, `stats`, `watch`, `ignore`, `script`.
|
|
48
|
+
- **Полнофункциональный интерпретатор `.edsl`** для автоматизации сборки.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Сравнение производительности
|
|
53
|
+
|
|
54
|
+
| Сценарий | ElyxBuilder | Mandochka | Ускорение |
|
|
55
|
+
|---|---|---|---|
|
|
56
|
+
| Сборка плагина (~150 файлов) без кэша | ~18.5 с | **~1.2 с** | **~15x быстрее** |
|
|
57
|
+
| Инкрементальная пересборка (кэш hit) | ~3.2 с | **~0.17 с (170 мс)** | **~19x быстрее** |
|
|
58
|
+
| Сборка Java в DEX (3 файла + стабы) | Вручную скриптами (~4.5 с) | **Нативно (~1.0 с)** | **Автоматически** |
|
|
59
|
+
| Повторный DEX (кэш hit) | Перекомпиляция (~4.5 с) | **~0.01 с (10 мс)** | **Мгновенно** |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Установка
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
git clone https://github.com/shareui/Mandochka.git
|
|
67
|
+
cd Mandochka
|
|
68
|
+
pip install -e .
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Проверьте готовность системы:
|
|
72
|
+
```bash
|
|
73
|
+
mandochka doctor
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Быстрый старт
|
|
79
|
+
|
|
80
|
+
### Создание плагина с Java DEX мостом:
|
|
81
|
+
```bash
|
|
82
|
+
mandochka new -g -n "MyPlugin" -a "Nickname" --with-dex
|
|
83
|
+
cd Myplugin
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Сборка плагина:
|
|
87
|
+
```bash
|
|
88
|
+
# Скомпилирует Python 3.11 bytecode + Java DEX + упакует в builds/MyPlugin-0.1.0-3.11.eaf
|
|
89
|
+
mandochka build -c 2 -b
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Отдельная компиляция только DEX:
|
|
93
|
+
```bash
|
|
94
|
+
mandochka dex -v
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Просмотр статуса кэша:
|
|
98
|
+
```bash
|
|
99
|
+
mandochka cached
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Конфигурация (`config.yml`)
|
|
105
|
+
|
|
106
|
+
```yaml
|
|
107
|
+
zipFormat: eaf
|
|
108
|
+
source: myplugin/src
|
|
109
|
+
buildNameUncompiled: "{name}-{version}"
|
|
110
|
+
buildNameCompiled: "{name}-{version}-3.11"
|
|
111
|
+
ignoreAll:
|
|
112
|
+
- myplugin/.mandochka/cache/*
|
|
113
|
+
compilationIgnore:
|
|
114
|
+
- myplugin/src/main.py
|
|
115
|
+
|
|
116
|
+
# Нативная интеграция DEX / Java
|
|
117
|
+
dex:
|
|
118
|
+
enabled: true
|
|
119
|
+
source: myplugin/dex_src
|
|
120
|
+
stubs: myplugin/compile_stubs
|
|
121
|
+
output: myplugin/res/dex/classes.dex
|
|
122
|
+
minApi: 26
|
|
123
|
+
targetJava: 8
|
|
124
|
+
autoDownloadR8: true
|
|
125
|
+
|
|
126
|
+
obfuscationConfig:
|
|
127
|
+
stripDocstrings: true
|
|
128
|
+
removeLogs: true
|
|
129
|
+
renameLocals: true
|
|
130
|
+
encodeStrings: true
|
|
131
|
+
encodeNumbers: true
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## CLI Справка
|
|
137
|
+
|
|
138
|
+
- `mandochka build`: сборка плагина (`-c [0-2]`, `-a`, `-o`, `-p <method> <pass>`, `--dex`, `--skip-dex`, `-j <jobs>`, `-b`).
|
|
139
|
+
- `mandochka dex`: прямая компиляция Java в Dalvik DEX (`--source`, `--output`, `--stubs`, `--min-api`, `--release`, `--d8`, `--javac`, `-f`, `-c`, `-v`).
|
|
140
|
+
- `mandochka doctor`: диагностика компиляторов и инструментов окружения.
|
|
141
|
+
- `mandochka cached`: статус файлов в кэше Python и DEX.
|
|
142
|
+
- `mandochka stats`: статистика проекта (`builds`, `lines`, `size`, `files`).
|
|
143
|
+
- `mandochka watch`: авто-пересборка при изменениях файлов.
|
|
144
|
+
- `mandochka new`: мастер создания плагина (интерактивный или через `--gen`).
|
|
145
|
+
- `mandochka script`: запуск `.edsl` скриптов автоматизации.
|
|
146
|
+
- `mandochka add-ignore` / `del-ignore`: управление списками игнорирования.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Документация
|
|
151
|
+
|
|
152
|
+
- [Русская документация](docs/ru/)
|
|
153
|
+
- [Интеграция с D8 / Javac](docs/ru/dex.md)
|
|
154
|
+
- [Сборка плагинов](docs/ru/build.md)
|
|
155
|
+
- [Команды и утилиты](docs/ru/commands.md)
|
|
156
|
+
- [English Documentation](docs/en/en.md)
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Лицензия
|
|
161
|
+
|
|
162
|
+
MIT License. См. файл [LICENSE](LICENSE).
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Mandochka — Documentation
|
|
2
|
+
|
|
3
|
+
**Mandochka** is a high-performance, next-generation plugin builder for **ElyxCore** (exteraGram, AyuGram, exteraless, etc.), forked from ElyxBuilder and rewritten for maximum speed and first-class native Android D8 & Javac DEX compilation.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Why Mandochka?
|
|
8
|
+
|
|
9
|
+
In standard ElyxBuilder:
|
|
10
|
+
- DEX / Java compilation was completely unsupported. Complex plugins (such as `pluginmanager-canary`) had to invent custom multi-platform shell/batch scripts, download `r8.jar`, compile stubs, and wrap everything in brittle external scripts.
|
|
11
|
+
- Python compilation spawned a new `python -c` process for every single file sequentially, taking 15–20 seconds on medium-sized plugins.
|
|
12
|
+
- Script runner (`.edsl`) lacked an interpreter implementation.
|
|
13
|
+
|
|
14
|
+
Mandochka solves all of these problems:
|
|
15
|
+
1. **Zero-overhead native D8 / Javac integration**:
|
|
16
|
+
- Automatic discovery of JDK (`javac`, `java`) and Android SDK build-tools (`d8`).
|
|
17
|
+
- Automatic on-demand download and global caching of official `r8.jar` from Google Maven if Android SDK is absent.
|
|
18
|
+
- Automatic detection of `dex_src/` or `java_src/` and `compile_stubs/`.
|
|
19
|
+
- Dedicated standalone subcommand `mandochka dex` and unified `mandochka build`.
|
|
20
|
+
- Incremental caching for Java / DEX compilation (< 15 ms on cached runs).
|
|
21
|
+
2. **Maximum Performance**:
|
|
22
|
+
- Batch & in-process Python 3.11 bytecode compilation using worker pools.
|
|
23
|
+
- Parallel AST syntax checking (`-a`) and parallel obfuscation.
|
|
24
|
+
- Complete project build in < 200 ms on cached runs and ~1.5s on clean runs.
|
|
25
|
+
- Benchmark profiling mode (`-b` / `--benchmark`).
|
|
26
|
+
3. **100% Drop-in Compatibility**:
|
|
27
|
+
- Supports `refmap.json`, `refmap.yml`, `config.yml`, `.mandochka/`, `.elyxbuilder/`.
|
|
28
|
+
- CLI command aliases: `mandochka`, `mando`, and `elyb`.
|
|
29
|
+
- Complete feature parity: `new`, `build`, `cached`, `stats`, `watch`, `ignore`, `script`, `doctor`.
|
|
30
|
+
- Full working `.edsl` scripting engine interpreter.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Installation
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
git clone https://github.com/shareui/Mandochka.git
|
|
38
|
+
cd Mandochka
|
|
39
|
+
pip install -e .
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Verify your environment:
|
|
43
|
+
```bash
|
|
44
|
+
mandochka doctor
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Quick Start
|
|
50
|
+
|
|
51
|
+
### Create a new plugin with native Java DEX bridge:
|
|
52
|
+
```bash
|
|
53
|
+
mandochka new -g -n "MySuperPlugin" -a "Nickname" --with-dex
|
|
54
|
+
cd Mysuperplugin
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Build plugin into `.eaf`:
|
|
58
|
+
```bash
|
|
59
|
+
mandochka build -c 2 -b
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Compile only the DEX binary:
|
|
63
|
+
```bash
|
|
64
|
+
mandochka dex
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Inspect cache status:
|
|
68
|
+
```bash
|
|
69
|
+
mandochka cached
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Configuration (`config.yml`)
|
|
75
|
+
|
|
76
|
+
```yaml
|
|
77
|
+
zipFormat: eaf
|
|
78
|
+
source: myplugin/src
|
|
79
|
+
buildNameUncompiled: "{name}-{version}"
|
|
80
|
+
buildNameCompiled: "{name}-{version}-3.11"
|
|
81
|
+
ignoreAll:
|
|
82
|
+
- myplugin/.mandochka/cache/*
|
|
83
|
+
compilationIgnore:
|
|
84
|
+
- myplugin/src/main.py
|
|
85
|
+
|
|
86
|
+
# Native DEX / Java integration
|
|
87
|
+
dex:
|
|
88
|
+
enabled: true
|
|
89
|
+
source: myplugin/dex_src
|
|
90
|
+
stubs: myplugin/compile_stubs
|
|
91
|
+
output: myplugin/res/dex/classes.dex
|
|
92
|
+
minApi: 26
|
|
93
|
+
targetJava: 8
|
|
94
|
+
autoDownloadR8: true
|
|
95
|
+
|
|
96
|
+
obfuscationConfig:
|
|
97
|
+
stripDocstrings: true
|
|
98
|
+
removeLogs: true
|
|
99
|
+
renameLocals: true
|
|
100
|
+
encodeStrings: true
|
|
101
|
+
encodeNumbers: true
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## CLI Reference
|
|
107
|
+
|
|
108
|
+
- `mandochka doctor`: diagnose compiler toolchains (JDK, Javac, D8, Python 3.11).
|
|
109
|
+
- `mandochka build [options]`: build plugin into `.eaf` or `.zip`.
|
|
110
|
+
- `-c [0|1|2]`: Python 3.11 bytecode compilation.
|
|
111
|
+
- `-a`: parallel AST syntax validation.
|
|
112
|
+
- `-o [files...]`: AST obfuscation.
|
|
113
|
+
- `-p <method> <pass>`: encryption (`aes-256`, `aes-128`, `zipcrypto`).
|
|
114
|
+
- `--dex`: force DEX build.
|
|
115
|
+
- `--skip-dex`: skip DEX build.
|
|
116
|
+
- `-j N`: number of parallel workers (default: 8).
|
|
117
|
+
- `-b`: benchmark timing report.
|
|
118
|
+
- `mandochka dex [options]`: standalone Java to DEX compilation.
|
|
119
|
+
- `mandochka cached`: view status of cached Python and DEX files.
|
|
120
|
+
- `mandochka stats [builds|lines|size|files]`: project statistics.
|
|
121
|
+
- `mandochka watch [interval]`: watch filesystem and auto-rebuild.
|
|
122
|
+
- `mandochka new`: interactive or non-interactive scaffolding wizard.
|
|
123
|
+
- `mandochka script <name> [args...]`: execute `.edsl` automation scripts.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Сборка плагинов в Mandochka (`mandochka build`)
|
|
2
|
+
|
|
3
|
+
Команда `mandochka build` предназначена для высокопроизводительной сборки плагинов ElyxCore в архивы (`.eaf` или `.zip`).
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Ключевые оптимизации производительности
|
|
8
|
+
|
|
9
|
+
1. **Пакетная и многопоточная компиляция Python 3.11**:
|
|
10
|
+
- В ElyxBuilder каждый `.py` файл компилировался через отдельный запуск процесса `python -c "..."`. При 50-100 файлах это занимало до 15–20 секунд.
|
|
11
|
+
- В Mandochka компиляция выполняется либо **нативно в памяти** (если запущен Python 3.11), либо через **высокоскоростной батч-воркер** с пулом потоков. 100 файлов компилируются за **~150 миллисекунд**!
|
|
12
|
+
2. **Параллельная проверка AST**:
|
|
13
|
+
- Проверка синтаксиса выполняется параллельно всеми ядрами процессора (`--jobs`).
|
|
14
|
+
3. **Параллельная обфускация**:
|
|
15
|
+
- Анализ символов и трансформация AST распараллелены.
|
|
16
|
+
4. **Многоуровневый инкрементальный кэш**:
|
|
17
|
+
- Отслеживание mtime, размера и уровня оптимизации.
|
|
18
|
+
- Повторная сборка без изменений занимает **~150 мс** на крупном проекте.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Флаги команды `build`
|
|
23
|
+
|
|
24
|
+
| Флаг | Описание |
|
|
25
|
+
|---|---|
|
|
26
|
+
| `-c [LEVEL]`, `--compile [LEVEL]` | Компиляция `.py` в `.pyc` (уровень оптимизации 0, 1 или 2; по умолчанию 1) |
|
|
27
|
+
| `-a`, `--ast` | Быстрая многопоточная проверка синтаксиса AST без компиляции |
|
|
28
|
+
| `-v`, `--verbose` | Подробный лог сборки |
|
|
29
|
+
| `-r`, `--reset` | Очистка кэша компиляции перед сборкой |
|
|
30
|
+
| `-p METHOD PASS`, `--password` | Шифрование архива (`aes-128`, `aes-192`, `aes-256`, `zipcrypto`) |
|
|
31
|
+
| `-o [FILES...]`, `--obfuscation` | Обфускация исходного кода (всего или указанных файлов) |
|
|
32
|
+
| `--dex` | Принудительно скомпилировать DEX |
|
|
33
|
+
| `--skip-dex`, `--no-dex` | Пропустить компиляцию DEX |
|
|
34
|
+
| `-j N`, `--jobs N` | Количество параллельных воркеров (по умолчанию: 8) |
|
|
35
|
+
| `-b`, `--benchmark` | Вывести точный тайминг фаз сборки в миллисекундах |
|
|
36
|
+
| `--no-assets` | Исключить файлы из `optionalAssets` |
|
|
37
|
+
| `-nf`, `--no-folder` | Исключить каталог builder из архива |
|
|
38
|
+
| `-ni`, `--no-info` | Не внедрять блок метаинформации о сборке |
|
|
39
|
+
| `-sv VER [APPEND]`, `--static-version` | Установить static_ver; если APPEND=true, версия добавится к имени архива |
|
|
40
|
+
| `-sc PKG [NAME]`, `--static-client` | Установить целевой клиент в манифест |
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Примеры
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# Стандартная быстрая сборка с байткодом
|
|
48
|
+
mandochka build -c 2
|
|
49
|
+
|
|
50
|
+
# С бенчмарком фаз (dex, pyc, pack)
|
|
51
|
+
mandochka build -c 2 -b
|
|
52
|
+
|
|
53
|
+
# С обфускацией и проверкой AST
|
|
54
|
+
mandochka build -c 2 -o -b
|
|
55
|
+
|
|
56
|
+
# Зашифрованный архив AES-256
|
|
57
|
+
mandochka build -c 2 -p aes-256 MyPassword123
|
|
58
|
+
```
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Команды и возможности Mandochka
|
|
2
|
+
|
|
3
|
+
## `mandochka doctor`
|
|
4
|
+
Диагностическая утилита, которая проверяет готовность системы к сборке плагинов:
|
|
5
|
+
- Версию и путь к интерпретатору Python 3.11.
|
|
6
|
+
- Наличие компилятора Java (`javac`) и версии JDK.
|
|
7
|
+
- Наличие среды исполнения Java (`java`).
|
|
8
|
+
- Наличие утилиты Android D8 (в Android SDK или standalone `r8.jar`).
|
|
9
|
+
- Доступность библиотек PyYAML и PyZipper.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## `mandochka cached`
|
|
14
|
+
Отображает детальный статус кэша:
|
|
15
|
+
- Для каждого `.py` файла: `[cached]` (актуален), `[changed]` (изменён, требует перекомпиляции), `[missing]` (отсутствует в кэше) или `[ignored]`.
|
|
16
|
+
- Размер и время создания каждого файла.
|
|
17
|
+
- Статус кэша DEX: отслеживаемые Java-исходники, стабы, целевые версии API.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## `mandochka stats`
|
|
22
|
+
Статистика проекта:
|
|
23
|
+
- `mandochka stats builds`: количество успешных, скомпилированных, нескомпилированных и упавших сборок.
|
|
24
|
+
- `mandochka stats lines [-a]`: подсчёт строк кода по файлам.
|
|
25
|
+
- `mandochka stats size [-a]`: размеры файлов.
|
|
26
|
+
- `mandochka stats files [-a]`: распределение файлов по расширениям.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## `mandochka watch [interval]`
|
|
31
|
+
Режим автоматической пересборки:
|
|
32
|
+
- Отслеживает изменения в `.py`, `.java`, `.json`, `.yml`, `.dex`.
|
|
33
|
+
- Мгновенно перезапускает `build` при сохранении файлов в IDE.
|
|
34
|
+
- Горячие клавиши: `r` — принудительно пересобрать, `q` — выйти.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## `mandochka script <name> [args...]`
|
|
39
|
+
Исполнение скриптов автоматизации на языке `.edsl`:
|
|
40
|
+
- Встроенный полнофункциональный интерпретатор.
|
|
41
|
+
- Поддержка функций `sh()`, `capture()`, `prompt()`, `confirm()`, `background()`, `wait()`, `pipe()`.
|
|
42
|
+
- Доступ к переменным окружения, `meta()`, `config()`, `refmap()`.
|
|
43
|
+
- Параллельное исполнение шагов (`parallel { ... }`), таймауты (`timeout(N) { ... }`) и перезапуски (`retry(N) { ... }`).
|