Skip to content

Latest commit

 

History

History
218 lines (156 loc) · 13 KB

File metadata and controls

218 lines (156 loc) · 13 KB


MonoGram
MonoGram

Читать на других языках: English, Türkçe, 한국어, اُردو, Español


MonoGram — это современный, молниеносный и элегантный неофициальный клиент Telegram для Android. Созданный с использованием Jetpack Compose и Material Design 3, он обеспечивает нативный и плавный опыт использования на базе официальной библиотеки TDLib.

Important

MonoGram находится в стадии активной разработки. Ожидайте частых обновлений, архитектурных изменений и возможных ошибок.

Поддержите наш проект на Boosty.


Скриншоты

Скриншот 1 Скриншот 2 Скриншот 3 Скриншот 4

Ключевые особенности

  • Независимый клиент — Не форк Telegram для Android. MonoGram написан полностью с нуля как самостоятельный проект.
  • Material Design 3 — Красивый, адаптивный интерфейс, который отлично смотрится на телефонах, планшетах и складных устройствах.
  • Безопасность — Встроенная биометрическая блокировка и зашифрованное локальное хранилище.
  • Мультимедиа — Высокопроизводительное воспроизведение медиа с ExoPlayer и Coil 3.
  • Быстродействие — Работает на Kotlin Coroutines и оптимизирован для производительности.
  • Clean Architecture — Чёткое разделение ответственности с помощью слоёв Domain, Data и Presentation.
  • Паттерн MVI — Предсказуемое управление состоянием с использованием MVIKotlin.
  • Без NFT и крипты — MonoGram никогда не будет включать NFT, подарки и прочие функции, продвигаемые Telegram, которые мы считаем лишними в мессенджере.

Начало работы

Следуйте этим шагам, чтобы настроить проект локально.

Предварительные требования

  • Android Studio: Ladybug или новее (рекомендуется).
  • JDK: Java 17 или новее.

1. Клонирование репозитория

git clone --recurse-submodules https://github.com/monogram-android/monogram.git
cd monogram

2. Настройка API ключей Telegram

Для подключения к серверам Telegram вам понадобятся собственные учётные данные API.

  1. Войдите на my.telegram.org.
  2. Перейдите в API development tools.
  3. Создайте новое приложение, чтобы получить App api_id и App api_hash.
  4. Создайте файл local.properties в корневой директории проекта (если он не существует).
  5. Добавьте следующие строки:
API_ID=12345678
API_HASH=your_api_hash_here

3. Настройка push-уведомлений

  1. Войдите в консоль Firebase.
  2. Создайте новый проект.
  3. Добавьте новое приложение с нужным applicationId. Если в проекте есть несколько вариантов с разными ID, создайте несколько приложений. По умолчанию applicationId для debug и release сборок отличаются.
  4. Скачайте файл google-services.json и скопируйте его в корень модуля app (monogram/app/google-services.json). Если вы создали несколько приложений, скопируйте только самый последний конфиг.
  5. Перейдите в раздел Cloud Messaging.
  6. Нажмите Manage service accounts.
  7. В открывшемся окне выберите раздел Keys вверху.
  8. Нажмите Add key и выберите вариант JSON. Дождитесь скачивания файла.
  9. Вернитесь на страницу, где вы получали App ID от Telegram.
  10. Нажмите Update рядом с разделом FCM credentials.
  11. Загрузите JSON сервисного аккаунта на открывшейся странице.

4. Первичная настройка: сборка libvpx

Для анимаций требуется собрать libvpx. Это нужно сделать до запуска сборки Gradle, иначе сборка завершится с ошибками.

  1. Перейдите в директорию presentation/src/main/cpp
  2. В build.sh укажите ваш ANDROID_NDK_HOME
  3. Запустите build.sh и дождитесь завершения

5. Сборка и запуск

  1. Откройте проект в Android Studio.
  2. Увеличьте лимиты индексации IDE, чтобы TdApi.java (обёртка над TDLib) корректно индексировался. В Android Studio или IntelliJ IDEA откройте Help → Edit Custom Properties..., вставьте строки ниже и при необходимости перезапустите IDE:
# size in Kb
idea.max.intellisense.filesize=20480
# size in Kb
idea.max.content.load.filesize=20480
  1. Синхронизируйте Gradle.
  2. Выберите конфигурацию запуска app.
  3. Подключите устройство или запустите эмулятор.
  4. Нажмите Run.

Сборка TDLib

Если вам необходимо собрать TDLib из исходного кода, сначала установите необходимые зависимости. Для дистрибутивов на основе Debian/Ubuntu:

sudo apt-get update
sudo apt-get install build-essential git curl wget php perl gperf unzip zip default-jdk cmake

Затем запустите скрипт сборки из корневой директории проекта:

./build-tdlib.sh

Участие в разработке

Мы приветствуем любой вклад в развитие проекта — будь то исправление ошибок, улучшение документации или предложение новых функций.

  1. Проверьте Issues — Посмотрите открытые задачи или создайте новую для обсуждения ваших идей.
  2. Работайте от develop — Создавайте ветки от develop и держите все изменения на её базе.
  3. Fork & Branch — Сделайте форк репозитория и создайте ветку для вашей функции.
  4. Стиль кода — Следуйте существующему стилю кода Kotlin и принципам Clean Architecture.
  5. Отправьте PR — Откройте Pull Request в develop с чётким описанием ваших изменений.

Important

Сообщения об ошибках и предложения

  • Ошибки — Откройте issue и используйте тег [Bug] в заголовке (например, [Bug] Приложение падает при запуске). Список известных ошибок доступен на доске багов.
  • Запросы функций — Откройте issue с тегом [Feature] (например, [Feature] Поддержка отложенных сообщений). Существующие запросы можно найти на доске функций.

Переводы

MonoGram приветствует переводы от сообщества! Вы можете добавить свой язык, отредактировав файл строковых ресурсов.

Исходные строки находятся в presentation/src/main/res/values/string.xml. Чтобы добавить новый язык, создайте соответствующий файл values-<locale>/string.xml (например, values-de/string.xml для немецкого) и переведите строки. Откройте PR с вашим переводом — мы его рассмотрим и примем.


Технологический стек

MonoGram использует новейшие инструменты и библиотеки для разработки под Android:

Категория Библиотеки
Язык Kotlin
UI Toolkit Jetpack Compose (Material 3)
Архитектура Decompose (Навигация), MVIKotlin
Внедрение зависимостей Koin
Асинхронность Coroutines & Flow
Ядро Telegram TDLib (Telegram Database Library)
Загрузка изображений Coil 3
Медиа Media3 (ExoPlayer)
Карты MapLibre
Локальная БД Room

Структура проекта

Проект следует многомодульной структуре для обеспечения разделения ответственности и масштабируемости:

Модуль Описание
:app Основной модуль приложения Android.
:domain Чистый Kotlin-модуль с бизнес-логикой, use cases и интерфейсами репозиториев.
:data Реализация репозиториев, источников данных и интеграция с TDLib.
:presentation UI-компоненты, экраны и view models (MVI Stores).
:core Общие вспомогательные классы и расширения, используемые во всех модулях.
:baselineprofile Baseline Profiles для оптимизации запуска и производительности приложения.

Лицензия

Этот проект распространяется под лицензией GNU General Public License v3.0.