- Java 54.4%
- C++ 25.8%
- C 11.4%
- Assembly 4%
- Go 1.4%
- Other 2.6%
| .github | ||
| assets | ||
| buildSrc | ||
| docs | ||
| gradle | ||
| tests | ||
| TMessagesProj | ||
| TMessagesProj_Modules | ||
| Tools | ||
| .gitignore | ||
| .gitmodules | ||
| build.gradle | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| LICENSE | ||
| README.md | ||
| settings.gradle | ||
Что это
exteraless — форк NagramX, в котором возможности exteraGram реализованы с открытым исходным кодом. Основа — Telegram для Android 13.1.1.
Отдельный упор — безопасность плагинов. В exteraGram плагин не ограничен ни в чём; здесь у него есть модель разрешений: плагин объявляет, что ему нужно, это видно на экране установки, и получает он только то, что вы разрешили.
Проект в бете: часть возможностей exteraGram ещё не перенесена. Если заметили, что каких-то функций не хватает, — откройте issue или напишите в канал.
- Имя пакета:
com.exteraless.app - Только 64-битные устройства (
arm64-v8a,x86_64)
Что внутри
Плагины
- Совместимость с плагинами exteraGram: одиночные
.plugin, архивы.elyx/.eaf, плагины с DEX и хуки Java-методов (Xposed API) - Разрешения: сеть, файлы, чтение и отправка сообщений, интенты, настройки, хуки, нативные библиотеки. Запрос без разрешения тихо отклоняется и попадает в журнал
- Журнал активности плагина с поиском и экспортом
- Защита от падений: плагин, который раз за разом роняет приложение, отключается; после нескольких падений на старте включается безопасный режим
- Экспорт и импорт всех плагинов вместе с настройками
- Python 3.11 на своей сборке Chaquopy
Клиент
- Настройки exteraGram: оформление, чаты, иконпаки, боковое меню, полоса пилюль, поиск по настройкам
- Плеер в стиле Material 3 с настраиваемой обложкой, мини-плеером, очередью и синхронизированными текстами песен
- Режим призрака и сохранение удалённых и отредактированных сообщений (с исключениями по чатам)
- Своя ИИ-служба вместо встроенных в Telegram редактора и пересказов
- Темы Monet, включая стиль Inugram
- Вход на другие устройства по QR из бокового меню
Ссылки
- Канал: @exteraless
- Исходники: github.com/exteraless/exteraless
Сборка
Понадобятся JDK 21, Android SDK с NDK и CMake, Python 3.11 на машине сборки.
-
Склонировать репозиторий вместе с подмодулями:
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>Если
python3в системе не 3.11, указать нужный интерпретатор:CHAQUOPY_BUILD_PYTHON=/usr/bin/python3.11 -
Для подписи APK положить свой
TMessagesProj/release.keystoreи дописать вlocal.properties:KEYSTORE_PASS=<пароль_хранилища> ALIAS_NAME=<имя_ключа> ALIAS_PASS=<пароль_ключа>Ключа в репозитории нет намеренно. Без него сборка не падает — APK подписывается отладочным ключом Android.
-
Для push-уведомлений заменить
TMessagesProj/google-services.jsonсвоим (Firebase, имя пакетаcom.exteraless.app). -
Необязательно: свои ключи в
local.properties—MAPS_API_KEY(Google Maps; ключ привязан к пакету и подписи, поэтому чужой показывает пустую карту) иGLYPH_API_KEY(Nothing Glyph). Для канала метаданных — его числовой id без префикса-100вBaseRemoteHelper.CHANNEL_METADATA_ID. -
Собрать:
./gradlew :TMessagesProj:assembleDebugили открыть проект в Android Studio. Среда выполнения Python собирается из подмодуляTMessagesProj/chaquopyво время сборки; Cython для этого ставится сам.
Про ABI. Переменная NATIVE_TARGET задаёт цель: arm64-v8a или x86_64 (один ABI,
быстрее), пусто или universal (один APK с обоими ABI), SKIP (без нативной части —
только Java и ресурсы). 32-битные ABI не собираются.
Сборка через GitHub Actions
Нужны два секрета репозитория:
-
LOCAL_PROPERTIES— содержимоеlocal.propertiesв base64:base64 -w0 local.properties -
RELEASE_KEYSTORE— файл ключа в base64:base64 -w0 TMessagesProj/release.keystore
Дальше запустить workflow Release Build. Готовый APK лежит в артефактах прогона.
Авторы дизайна
Иконки и оформление, унаследованные от exteraGram, созданы его дизайнером — @the8055u и студией @BlueprintDsgn. Права на эти материалы принадлежат авторам.
Благодарности
English
What this is
exteraless is a fork of NagramX that implements exteraGram's features open-source. It is based on Telegram for Android 13.1.1.
The special focus is plugin security. In exteraGram a plugin is not restricted in any way; here it comes with a permission model: a plugin declares what it needs, you see that on the install sheet, and it gets only what you allow.
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 - 64-bit devices only (
arm64-v8a,x86_64)
What's inside
- exteraGram plugins: single-file
.plugin,.elyx/.eafarchives, DEX plugins and Java method hooks (Xposed API) - Permissions for network, files, reading and sending messages, intents, settings, hooks and native libraries; denied calls fail quietly and go to the plugin's activity log
- Crash protection: a plugin that keeps crashing the app is disabled, repeated launch crashes bring up safe mode
- Export and import of all plugins with their settings
- Python 3.11 on our own Chaquopy build
- exteraGram settings, a Material 3 music player with synced lyrics, ghost mode, saved deleted and edited messages, Monet themes, QR login for other devices
Building
You need JDK 21, the Android SDK with NDK and CMake, and Python 3.11 on the build machine.
-
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. Ifpython3is not 3.11, setCHAQUOPY_BUILD_PYTHONthere to a 3.11 interpreter. -
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. -
Optional:
MAPS_API_KEYandGLYPH_API_KEYinlocal.properties, and your metadata channel id (without-100) inBaseRemoteHelper.CHANNEL_METADATA_ID. -
Build with
./gradlew :TMessagesProj:assembleDebugor from Android Studio. The Python runtime is built from theTMessagesProj/chaquopysubmodule during the build.
NATIVE_TARGET selects the ABI: arm64-v8a or x86_64 (one ABI, faster), empty or
universal (one APK with both), SKIP (no native part). 32-bit ABIs are not built.
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.
Design credits
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.