>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
Java

Come è strutturato NagramXF e perché i fork di Telegram continuano a prosperare

Se avete mai guardato il codice sorgente del client Telegram ufficiale per Android, probabilmente ricorderete quella sensazione di lieve smarrimento. Un codebase massiccio TMessagesProj, un mix di Java e C++, tonnellate di View personalizzate e rendering dell'interfaccia fatto in casa. Nonostante tutta questa complessità architetturale, un intero ecosistema di fork è cresciuto attorno al client Telegram. Gli sviluppatori cercano costantemente di rielaborare l'app per adattarla alle loro esigenze: alcuni aggiungono ricevute di lettura nascoste, altri rimuovono gli annunci o agganciano nuovi temi.

Recentemente mi sono imbattuto nel repository NagramXF su GitHub. È un fork del popolare client Nagram X, il cui autore ha deciso di non limitarsi a un singolo branch e ha raggruppato funzionalità di diversi progetti noti sotto il cofano: AyuGram, exteraGram, Cherrygram e OctoGram.

Analizziamo cosa è questo progetto, come è strutturato internamente e come costruire il vostro APK dal codice sorgente.

Un Frankenstein delle migliori funzionalità dei client di terze parti

La storia dei client Telegram alternativi per Android assomiglia a un kit di costruzione. Prima è arrivato il fork Nekogram, poi Nagram, successivamente Nagram X, e ora siamo arrivati a NagramXF. L'autore del progetto Keeperorowner aveva un obiettivo semplice: prendere la stabilità di base di Nagram X e portare i miglioramenti utili da altri fork chiusi e aperti al suo interno.

Ecco cosa è incluso nella build:

  • Funzionalità da AyuGram: salvataggio della cronologia dei messaggi modificati ed eliminati direttamente sul dispositivo, configurazione flessibile dello stato di "digitazione" e ricevute di lettura nascoste per le conversazioni.
  • Funzionalità di personalizzazione da exteraGram e Cherrygram: caratteri finemente regolati, stili di icone, divisori di chat personalizzati e un menu di inoltro messaggi esteso senza l'autore.
  • Leggere modifiche UI da OctoGram: copia rapida dei link, visualizzazione semplificata del profilo e ottimizzazione delle animazioni negli elenchi.

Un dettaglio interessante: nella descrizione del repository, l'autore avvisa onestamente che alcune funzionalità sono state ottenute attraverso reverse engineering di build chiuse. Il codice mantiene i riferimenti agli autori originali di varie patch, il che per fork open-source di questo tipo è piuttosto una rarità gradita.

Sotto il cofano e specifiche strutturali

Il repository è piuttosto pesante, circa 800 megabyte senza i sottomoduli. All'interno c'è un progetto classico TMessagesProj, ma con modifiche notevoli ai moduli e agli helper.

Se guardate nel package tw.nekomimi.nekogram.helpers, la linea da Nekogram è immediatamente evidente. Ad esempio, la gestione remota dei metadati e della configurazione del client è legata alla classe BaseRemoteHelper, che legge i parametri da un canale di servizio speciale.

L'architettura del fork si basa su tre pilastri:

  1. Il codice base di Telegram Android, periodicamente estratto dall'upstream del repository ufficiale DrKLO/Telegram.
  2. Un livello di intercettazione degli eventi: i messaggi in entrata vengono memorizzati nella cache in un database SQLite locale prima che il server invii un comando per eliminarli o modificarli (è così che funziona la funzionalità di AyuGram).
  3. Patch UI: un overlay sopra le Activity e i controller standard di Telegram, che aggiunge toggle al menu delle impostazioni.

Come compilare il progetto localmente

Compilare i fork di Telegram è sempre stata una ricerca separata, ma NagramXF ha una guida piuttosto diretta. Se volete approfondire il codice o compilare una build pulita con le vostre chiavi, avrete bisogno di Android Studio, un paio di chiavi dalla console sviluppatori di Telegram e circa 15 minuti di tempo libero.

Prima di tutto, clonate il repository insieme a tutti i sottomoduli:

git clone --recursive --shallow-submodules https://github.com/Keeperorowner/NagramXF.git NagramXF

Se avete dimenticato il flag --recursive durante il clone iniziale, potete recuperare i sottomoduli manualmente:

git submodule update --init --recursive --depth=1

Successivamente, andate su my.telegram.org, effettuate il login e create una nuova applicazione per ottenere la vostra TELEGRAM_APP_ID e TELEGRAM_APP_HASH. Senza di esse, il client semplicemente non potrà autenticarsi con i server Telegram.

Nella root del progetto, create un file local.properties e aggiungete le credenziali ricevute:

TELEGRAM_APP_ID=1234567
TELEGRAM_APP_HASH=0123456789abcdef0123456789abcdef

Se state compilando un APK di release per l'uso normale, dovreste anche aggiungere i parametri del vostro keystore lì:

KEYSTORE_PASS=your_keystore_password
ALIAS_NAME=your_alias_name
ALIAS_PASS=your_alias_password

Ora dovete configurare un paio di parametri di sistema nel codice:

  • In TMessagesProj/src/main/AndroidManifest.xml, specificate la vostra chiave API di Google Maps (se volete che la condivisione della posizione funzioni correttamente).
  • Nel file BaseRemoteHelper.java, specificate l'ID del canale dei metadati.
  • Inserite google-services.json in TMessagesProj/ se avete bisogno di notifiche push tramite Google FCM.

Dopo di ciò, il progetto si apre in Android Studio e si compila con il task standard assembleRelease o assembleDebug.

A chi potrebbe essere utile questo progetto

Client come NagramXF sono interessanti in due scenari.

Prima di tutto, per gli sviluppatori Android. Se volete vedere come vengono implementati in pratica gli intercettatori di messaggi, l'archiviazione locale e le patch sopra il massiccio monolite legacy di Telegram, NagramXF lo dimostra chiaramente. Qui potete sbirciare l'implementazione di menu personalizzati, override degli eventi di rete e uso dell'NDK.

In secondo luogo, per chi trova la versione base di Telegram troppo limitata nelle impostazioni. NagramXF combina funzionalità che prima richiedevano di scegliere tra AyuGram ed exteraGram. Tutto è raccolto in un unico posto qui.

Naturalmente, dovete considerare i rischi: usare client di terze parti con patch chiuse richiede fiducia nell'autore del fork. Ma se avete bisogno di un client personalizzabile con un processo di build aperto, NagramXF sembra un esperimento interessante.

Progetti correlati