Hoe NagramXF is gestructureerd en waarom Telegram-forks blijven floreren
Als je ooit naar de broncode van de officiële Telegram-client voor Android hebt gekeken, herinner je je waarschijnlijk dat gevoel van lichte verbijstering. Een enorme codebase TMessagesProj, een mix van Java en C++, talloze custom Views en zelfgemaakte interface-rendering. Ondanks alle architectonische complexiteit is er een heel ecosysteem van forks rond de Telegram-client gegroeid. Ontwikkelaars proberen voortdurend de app te herschrijven om aan hun behoeften te voldoen: sommigen voegen verborgen leesbevestigingen toe, anderen verwijderen advertenties of bouwen nieuwe thema's erop.
Onlangs stuitte ik op de NagramXF-repository op GitHub. Het is een fork van de populaire Nagram X-client, waarvan de auteur besloot zich niet te beperken tot één branch en functies van verschillende bekende projecten onder de motorkap bundelde: AyuGram, exteraGram, Cherrygram en OctoGram.
Laten we uiteenzetten wat dit project is, hoe het intern is gestructureerd en hoe je je eigen APK kunt bouwen van de broncode.
Een Frankenstein van de beste functies van third-party clients
De geschiedenis van alternatieve Telegram-clients voor Android lijkt op een bouwpakket. Eerst kwam de Nekogram-fork, toen Nagram, later Nagram X, en nu zijn we aangekomen bij NagramXF. De projectauteur Keeperorowner had een eenvoudig doel: neem de basestabiliteit van Nagram X en poort nuttige verbeteringen van andere gesloten en open forks naar binnen.
Hier is wat in de build is terechtgekomen:
- Functies van AyuGram: het opslaan van de geschiedenis van bewerkte en verwijderde berichten rechtstreeks op het apparaat, flexibele configuratie van de "aan het typen"-status en verborgen leesbevestigingen voor gesprekken.
- Aanpassingsfuncties van exteraGram en Cherrygram: fijn afgestemde lettertypen, pictogramstijlen, aangepaste chatverdelers en een uitgebreid doorstuurmenu zonder de auteur.
- Kleine UI-aanpassingen van OctoGram: snel linkjes kopiëren, vereenvoudigd profiel bekijken en animatieoptimalisatie in lijsten.
Een interessant detail: in de repositorybeschrijving waarschuwt de auteur eerlijk dat sommige functies zijn verkregen via reverse engineering van gesloten builds. De code behoudt verwijzingen naar de oorspronkelijke auteurs van verschillende patches, wat voor open-source forks van dit soort eerder een prettige zeldzaamheid is.
Onder de motorkap en structurele specificaties
De repository is behoorlijk zwaar, zo'n 800 megabyte zonder submodules. Binnenin zit een klassiek project TMessagesProj, maar met opmerkelijke wijzigingen in modules en helpers.
Als je in de package tw.nekomimi.nekogram.helpers kijkt, is de afstamming van Nekogram onmiddellijk duidelijk. Zo is extern beheer van metadata en clientconfiguratie gekoppeld aan de class BaseRemoteHelper, die parameters leest uit een speciaal servicekanaal.
De architectuur van de fork rust op drie pijlers:
- De basis Telegram Android-code, periodiek binnengehaald van upstream van de officiële repository
DrKLO/Telegram. - Een gebeurtenisinterceptielaag: inkomende berichten worden in een lokale SQLite-database in de cache geplaatst voordat de server een opdracht stuurt om ze te verwijderen of te bewerken (zo werkt de functionaliteit van AyuGram).
- UI-patches: een overlay bovenop standaard Telegram Activities en controllers, met toggles in het instellingenmenu.
Hoe je het project lokaal bouwt
Het bouwen van Telegram-forks is altijd een aparte zoektocht geweest, maar NagramXF heeft een vrij eenvoudige handleiding. Als je in de code wilt duiken of een schone build wilt maken met je eigen sleutels, heb je Android Studio nodig, een paar sleutels van de Telegram-ontwikkelaarsconsole en ongeveer 15 minuten vrije tijd.
Kloon eerst de repository samen met alle submodules:
git clone --recursive --shallow-submodules https://github.com/Keeperorowner/NagramXF.git NagramXF
Als je de --recursive-vlag bent vergeten tijdens de initiële kloon, kun je de submodules ook handmatig ophalen:
git submodule update --init --recursive --depth=1
Ga vervolgens naar my.telegram.org, log in en maak een nieuwe applicatie aan om je TELEGRAM_APP_ID en TELEGRAM_APP_HASH te krijgen. Zonder deze kan de client simpelweg niet authenticeren met Telegram-servers.
Maak in de projectroot een local.properties-bestand aan en voeg de ontvangen referenties toe:
TELEGRAM_APP_ID=1234567
TELEGRAM_APP_HASH=0123456789abcdef0123456789abcdef
Als je een release APK bouwt voor regulier gebruik, moet je daar ook je keystore-parameters toevoegen:
KEYSTORE_PASS=your_keystore_password
ALIAS_NAME=your_alias_name
ALIAS_PASS=your_alias_password
Nu moet je een paar systeemparameters in de code configureren:
- Geef in
TMessagesProj/src/main/AndroidManifest.xmlje Google Maps API-sleutel op (als je locatiedeling correct wilt laten werken). - Geef in het
BaseRemoteHelper.java-bestand het metadata-kanaal-ID op. - Plaats
google-services.jsoninTMessagesProj/als je pushmeldingen via Google FCM nodig hebt.
Daarna opent het project in Android Studio en bouwt het met de standaard assembleRelease of assembleDebug-task.
Voor wie kan dit project nuttig zijn
Clients zoals NagramXF zijn interessant in twee scenario's.
Ten eerste voor Android-ontwikkelaars. Als je wilt zien hoe berichteninterceptors, lokale opslag en patches bovenop Telegram's enorme legacy-monoliet in de praktijk worden geïmplementeerd, demonstreert NagramXF dit duidelijk. Hier kun je een kijkje nemen in de implementatie van aangepaste menu's, netwerkgebeurtenis-overrides en NDK-gebruik.
Ten tweede voor degenen die de basist versie van Telegram te beperkt vinden in de instellingen. NagramXF combineert functies die eerder vereisten dat je moest kiezen tussen AyuGram en exteraGram. Alles is hier op één plek verzameld.
Natuurlijk moet je de risico's overwegen: het gebruik van third-party clients met gesloten patches vereist vertrouwen in de fork-auteur. Maar als je een aanpasbare client met een open bouwproces nodig hebt, lijkt NagramXF een interessant experiment.
Gerelateerde projecten