- Java 52.9%
- C++ 26.8%
- C 11.6%
- Assembly 4%
- Go 1.4%
- Other 3%
| .github | ||
| assets | ||
| buildSrc | ||
| gradle | ||
| tests | ||
| TMessagesProj | ||
| TMessagesProj_Modules | ||
| Tools | ||
| .gitignore | ||
| .gitmodules | ||
| build.gradle | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| LICENSE | ||
| README.md | ||
| settings.gradle | ||
Что это
sngram — форк Exteraless(который форк NagramX), в котором возможности exteraGram реализованы с открытым исходным кодом.
Проект-оригинал в бете: часть возможностей exteraGram ещё не перенесена. Если заметили, что каких-то функций не хватает, — откройте issue или напишите в канал.
- Имя пакета:
xyz.snfsx.sngram - Что перенесено: экраны настроек, оформление и параметры чатов, иконпаки, полоса пилюль (Pill Stack), боковое меню, движок Python-плагинов
Ссылки
- Канал: @exteraless
- Исходники оригинала(зеркало): git.snfsx.xyz/exteralessMirror/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 и ресурсы).
Сборка через 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.
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:
xyz.snfsx.sngram
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.
Building
-
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.