exteraless — форк NagramX, в котором возможности exteraGram реализованы с открытым исходным кодом.
Отдельный упор — безопасность плагинов. В exteraGram плагин не ограничен ни в чём; здесь у него есть модель разрешений: плагин объявляет, что ему нужно, это видно на экране установки, и получает он только заявленное.
Проект в бете: часть возможностей exteraGram ещё не перенесена. Если заметили, что каких-то функций не хватает, — откройте issue или напишите в канал.
- Имя пакета:
com.exteraless.app - Что перенесено: экраны настроек, оформление и параметры чатов, иконпаки, полоса пилюль (Pill Stack), боковое меню, движок Python-плагинов
- Канал: @exteraless
- Исходники: github.com/exteraless/exteraless
-
Склонировать репозиторий вместе с подмодулями:
git clone --recursive --shallow-submodules https://github.com/exteraless/exteraless.git exteraless
Если репозиторий уже склонирован без подмодулей:
git submodule update --init --recursive --depth=1
-
Получить
TELEGRAM_APP_IDиTELEGRAM_APP_HASHна my.telegram.org и создатьlocal.propertiesв корне проекта:TELEGRAM_APP_ID=<ваш_app_id> TELEGRAM_APP_HASH=<ваш_app_hash>
-
Для подписи APK положить свой
TMessagesProj/release.keystoreи дописать вlocal.properties:KEYSTORE_PASS=<пароль_хранилища> ALIAS_NAME=<имя_ключа> ALIAS_PASS=<пароль_ключа>
Ключа в репозитории нет намеренно. Без него сборка не падает — APK подписывается отладочным ключом Android.
-
Для push-уведомлений положить свой
TMessagesProj/google-services.json(Firebase, имя пакетаcom.exteraless.app). -
Заменить метаданные проекта:
- ключ Google Maps в записи
com.google.android.maps.v2.API_KEYвTMessagesProj/src/main/AndroidManifest.xml; BaseRemoteHelper.CHANNEL_METADATA_ID— числовой id вашего канала метаданных, без префикса-100.
- ключ Google Maps в записи
-
Собрать:
./gradlew :TMessagesProj:assembleDebugили открыть проект в Android Studio.
Про ABI. Собираются только 64-битные arm64-v8a и x86_64: Chaquopy собирает
Python 3.12 лишь под них, и на armeabi-v7a конфигурация обрывается. Переменная
NATIVE_TARGET задаёт цель: arm64-v8a (один ABI, быстрее), universal (оба),
SKIP (без нативной части — только Java и ресурсы).
Нужны два секрета репозитория:
-
LOCAL_PROPERTIES— содержимоеlocal.propertiesв base64:base64 -w0 local.properties
-
RELEASE_KEYSTORE— файл ключа в base64:base64 -w0 TMessagesProj/release.keystore
Дальше запустить workflow Release Build. Готовый APK лежит в артефактах прогона.
Иконки и оформление, унаследованные от exteraGram, созданы его дизайнером — @the8055u и студией @BlueprintDsgn. Права на эти материалы принадлежат авторам.
exteraless is a fork of NagramX that implements exteraGram's features open-source.
The special focus is plugin security. In exteraGram a plugin is not restricted in any way; here it comes with a permission model and isolation: a plugin declares what it needs, you see that on the install sheet, and it gets only what was declared.
The project is in beta: some exteraGram features have not been ported yet. If you notice a missing feature, open an issue or write to the channel.
- Package name:
com.exteraless.app
Icons and visual design inherited from exteraGram are the work of its designer, @the8055u, and the @BlueprintDsgn studio. Rights to those materials belong to their authors.
-
Clone with submodules:
git clone --recursive --shallow-submodules https://github.com/exteraless/exteraless.git exteraless
-
Get
TELEGRAM_APP_IDandTELEGRAM_APP_HASHfrom my.telegram.org and put them intolocal.propertiesin the project root. -
For release signing, drop your own
TMessagesProj/release.keystoreand addKEYSTORE_PASS,ALIAS_NAME,ALIAS_PASStolocal.properties. No keystore is shipped with the repository; without one the build is signed with the Android debug key. -
For push notifications, replace
TMessagesProj/google-services.jsonwith your own Firebase config forcom.exteraless.app. -
Build with
./gradlew :TMessagesProj:assembleDebugor from Android Studio.
Only 64-bit ABIs are built (arm64-v8a, x86_64): Chaquopy ships Python 3.12 for those
only, and armeabi-v7a fails at configuration time. NATIVE_TARGET selects the target:
arm64-v8a, universal (both) or SKIP (no native part).
For CI, set two repository secrets — LOCAL_PROPERTIES and RELEASE_KEYSTORE, both
base64-encoded — and run the Release Build workflow. The APK ends up in the run
artifacts.
