Шаблон плагина для exteraGram / AyuGram, в котором вся логика написана на Kotlin,
собирается в DEX и встраивается прямо в .py-файл плагина.
<plugin-id>.py— сам плагин: метаданные, i18n, загрузка встроенного DEX черезInMemoryDexClassLoaderи вызов Kotlin-классаPlugin.src/main/kotlin/...— основная логика (хуки, пункты меню, настройки, i18n).- Gradle-плагин
io.github.n08i40k.exteraсобирает Kotlin в шейженный jar и прогоняет его через R8: задачиbuildDexDebug/buildDexReleaseкладут результат вdist/dex/<variant>/classes.dex. tools/embed_dex.py— вшивает собранныйclasses.dexв копию.py.tools/dev_watch.py— live-reload на устройстве черезextera dev-sync(adb).libs/Telegram.jar— классы хост-приложения, распакованные из APK рецептомjust update-apk(лежит в git через LFS). Gradle-плагин сам чинит в нём вложенные классы и выкидывает пакеты, приходящие из Gradle-зависимостей, прежде чем положить его в compile-classpath.
java (JDK 21), uv, just, adb. Для update-apk дополнительно dex2jar,
для gen-stubs — java2pyi.
# переименовать шаблон под себя: пакет, id и отображаемое имя
just init com.example.myplugin my-plugin "My Plugin"
just dex # debug-сборка DEX
just watch # live-reload на подключённом устройствеjust ci-release 1.2.3 # -> dist/<plugin-id>.plugin: версия, release-DEX и упаковкаjust embed вшивает уже собранный release-DEX в dist/<plugin-id>.py, не трогая версию.
Либо workflow Release в GitHub Actions (запуск вручную, версия в формате x.x.x).
just loc— перегенерировать i18n-файлы без полной пересборки DEX.just gen-stubs <rt.jar> <android.jar>— стабы для автодополнения в Python.just update-apk <apk>— обновитьlibs/Telegram.jarиз APK хоста и закоммитить его.