English · Русский · Türkçe · 한국어 · اُردو · Español
Monogram, Android 7.0 ve üzeri için yıldırım hızında, tamamen yerel bir Telegram istemcisidir. Kotlin, Jetpack Compose ve Material 3 ile geliştirilen modern Android arayüzünü Rust ile yazdığımız kendi MTProto uygulamamızla bir araya getirir
Important
Monogram aktif geliştirme aşamasındadır. Özellikler ve mimari gelişmeye devam etmektedir; hatalar ve eksik işlevler olabilir.
Projeyi Boosty üzerinden destekleyebilirsiniz.
- Tamamen yerel — Kotlin ve Jetpack Compose ile Android için geliştirildi
- Ekranınıza uygun — Telefonlara, tabletlere ve büyük ekranlara uyarlanan Material 3 düzenleri
- Sohbetlerinizde medya — Konuşmalarınızda fotoğraflar, videolar ve animasyonlu çıkartmalar
- Rust gücüyle yıldırım hızında — Telegram'ın MTProto protokolünün bize ait yerel uygulaması 🚀
- NFT ve kripto yok — Monogram, NFT tanıtımlarını, hediyeleri veya bir mesajlaşma uygulamasının kapsamı dışında gördüğümüz diğer Telegram özelliklerini içermeyecektir
- JDK 17 ve projenin Android Gradle Plugin sürümüyle uyumlu bir Android Studio sürümü (sürüm kataloğuna bakın)
- Android SDK Platform 37, platform tools ve Android NDK. CI, NDK r28c kullanır. NDK'yı açıkça seçmek için
ANDROID_NDK_HOMEayarlayın; aksi hâlde Gradle, SDK'nınndkdizininde arar. - Rust 1.98 veya üzeri, Cargo ve yerel bağımlılıklar ile UniFFI üretimi için ana sistemin C/C++ derleme araçları
- Git, aşağıdaki Android Rust hedefleri ve cargo-ndk:
rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android
cargo install cargo-ndk --lockedgit clone --recurse-submodules https://github.com/monogram-android/monogram.git
git clone --recurse-submodules https://github.com/gdlbo/telers-mtproto-impl.git
cd monogram
git submodule update --init --recursiveHer iki klonlama komutunu aynı üst dizinden çalıştırın. Mevcut Cargo bildirimleri, Monogram dizininin yanında ../telers-mtproto-impl bulunmasını gerektirir; vendor altındaki alt modül bu komşu kopyanın yerini tutmaz. CI da aynı dizin düzenini kullanır.
local.properties.example dosyasını local.properties olarak kopyalayın ve sdk.dir, API_ID, API_HASH değerlerini ayarlayın.
Unix benzeri sistemler:
cp local.properties.example local.propertiesWindows (PowerShell):
Copy-Item local.properties.example local.propertiesAPI kimlik bilgilerinizi my.telegram.org/apps adresinden alın. Bunlar olmadan derleme yapılabilir ancak Telegram'a giriş için geçerli bilgiler gereklidir. local.properties, imzalama anahtarları ve hizmet hesabı kimlik bilgilerini sürüm kontrolüne, günlüklere veya commit'lere eklemeyin.
Dağıtım derlemelerini kendi anahtarınızla imzalamak için şunları da ayarlayın:
RELEASE_STORE_FILE=keystore/release.jks
RELEASE_STORE_PASSWORD=your_store_password
RELEASE_KEY_ALIAS=your_key_alias
RELEASE_KEY_PASSWORD=your_key_passwordRELEASE_STORE_FILE yoksa release ve beta derlemeleri varsayılan olarak hata ayıklama anahtarıyla imzalanır. -Punsigned=true, bir dağıtım anahtarı yapılandırılmadığında bu varsayılanı devre dışı bırakır. Hata ayıklama imzası geliştirme içindir; üretim imzanızla dağıtımın yerini tutmaz.
- FCM: Firebase'de
org.monogramkimliğiyle bir Android uygulaması kaydedin (debug, release ve beta aynı uygulama kimliğini kullanır). Yapılandırmayıapp/google-services.jsonkonumuna koyun; Gradle, Google Services eklentisini yalnızca bu dosya varsa uygular. Yapılandırma dosyası olmasa da Firebase bağımlılıkları uygulamada kalır. - İlgili FCM kimlik bilgilerini Telegram API ID'niz için my.telegram.org/apps adresinde kaydedin.
google-services.jsonve tümfirebase-adminsdkJSON dosyalarını sürüm kontrolünün dışında tutun; hizmet hesabı anahtarını asla APK'ya eklemeyin. - FCM testleri Google Play hizmetlerini gerektirir; emülatör testleri için Google Play imajı kullanın
- UnifiedPush: Cihaza uyumlu bir dağıtıcı kurup yapılandırın. Uygulama UnifiedPush kaydını destekler.
Depoyu Android Studio'da açın, Gradle'ı senkronize edin ve app çalıştırma yapılandırmasını seçin veya aşağıdaki komutları depo kökünden çalıştırın. installDebug, bağlı bir cihaz ya da çalışan bir emülatör gerektirir.
Unix benzeri sistemler:
./gradlew :app:assembleDebug
./gradlew :app:installDebug
./gradlew :app:assembleRelease
./gradlew :app:assembleBetaWindows (PowerShell):
./gradlew.bat :app:assembleDebug
./gradlew.bat :app:installDebug
./gradlew.bat :app:assembleRelease
./gradlew.bat :app:assembleBetadebug: geliştirme derlemesirelease: R8 ile optimize edilmiş derlemebeta: hata ayıklamayı kolaylaştırmak için R8'in devre dışı bırakıldığı, release tabanlı derleme
Normal derlemenin parçası olarak Gradle, Rust kitaplıklarını armeabi-v7a, arm64-v8a ve x86_64 için derler ve ana sistemin hata ayıklama kitaplıklarından UniFFI Kotlin bağlarını yeniden üretir. Video çıkartmaları için önceden derlenmiş libvpx kitaplıkları native/vpx/prebuilt altındadır. Android yerel derleme görevlerini doğrudan çalıştırmak için:
./gradlew :native:mtproto:buildNativeMtproto :native:markup:buildNativeMarkupWindows'ta ./gradlew yerine ./gradlew.bat kullanın. -PskipNativeBuild=true seçeneğini yalnızca uyumlu yerel kitaplıklar ve üretilmiş bağlar zaten mevcutken, sadece Kotlin değişiklikleri için kullanın. Hem yerel derlemeyi hem de bağların yeniden üretilmesini atlar; SDK/NDK yapılandırması yine gereklidir.
- Diller ve protokol: Kotlin, Rust, MTProto, UniFFI
- Arayüz ve durum: Jetpack Compose, Material 3, Decompose, MVIKotlin
- Ortak hizmetler: Koin, Coroutines, Flow, Room
- Medya ve bildirimler: Media3, Coil, libvpx, tlottie, Firebase Cloud Messaging, UnifiedPush
| Yol | Sorumluluk |
|---|---|
app |
Uygulama giriş noktası, bağımlılık enjeksiyonu, gezinme ve bildirim entegrasyonu |
core/* |
Ortak modeller, veritabanı, arayüz, yardımcı araçlar ve işaretleme işleme erişimi |
feature/* |
Kimlik doğrulama, sohbet listesi, konuşmalar, klasörler, profiller ve ayarlar |
network/bridge |
Kotlin istemci API'si, alan modeli dönüşümleri ve hata yönetimi |
network/http |
HTTP medya indirmeleri, önbellek ve kuyruk |
native/mtproto-rs |
Rust protokol istemcisi ve UniFFI dışa aktarımları |
native/markup-rs |
Rust ile Markdown, sözdizimi vurgulama ve matematik ayrıştırma |
native/mtproto, native/markup |
Kotlin arayüz katmanları, üretilmiş bağlar ve yerel kitaplıklar |
native/vpx |
Video çıkartmaları için önceden derlenmiş VP9 çözücü |
vendor |
Üçüncü taraf kaynak kodları ve alt modüller |
Feature modülleri network/bridge üzerinden çağrı yapar; yerel protokol mantığı Rust'tadır. Feature modülleri üretilmiş UniFFI türlerini içe aktarmamalı veya birbirine bağımlı olmamalıdır. Geliştirme kuralları ve protokol değişmezleri için AGENTS.md dosyasına bakın.
Dalınızı develop üzerinden oluşturun ve pull request'in hedefini develop olarak ayarlayın. Mevcut mimariyi ve kod stilini izleyin, değişiklikleri görevle sınırlayın, açık bir açıklama ve ilgili doğrulama sonuçlarını ekleyin. Telegram API Kullanım Koşulları'na uyun.
Değiştirilen modüle uygun kontrolleri çalıştırın. Örnekler:
./gradlew :network:bridge:test
cargo test --manifest-path native/mtproto-rs/Cargo.toml
cargo test --manifest-path native/markup-rs/Cargo.toml
git diff --checkWindows'ta ./gradlew.bat kullanın. Yalnızca değişikliğinizle ilgili kontrolleri çalıştırın; gerçek Telegram ve cihaz davranışı kendi kimlik bilgilerinizle ayrıca doğrulanmalıdır.
Hata bildirimlerinin başlığında [Bug], özellik önerilerinde [Feature] kullanın. Hata Takipçisi'ne ve Özellik Panosu'na bakın.
Arayüz metinleri core/ui/src/main/res/values/strings.xml ve feature/*/src/main/res/values/strings.xml dosyalarındadır. İlgili her modülde values-<locale>/strings.xml ekleyin veya güncelleyin (örneğin values-de/strings.xml). Kaynak adlarını, biçimlendirme yer tutucularını ve çoğul biçimlerini koruyun. Çevirileri pull request ile gönderin. README çevirilerini İngilizce sürümle uyumlu tutun.
Monogram, GNU General Public License v3.0 ile lisanslanmıştır. Üçüncü taraf bileşenler ve yerel crate'ler, kendi kaynak dizinlerinde belirtilen lisansları korur.




