>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
Java

Cómo está estructurado NagramXF y por qué los forks de Telegram siguen prosperando

Si alguna vez has revisado el código fuente del cliente oficial de Telegram para Android, probablemente recuerdas esa sensación de ligero desconcierto. Una base de código enorme TMessagesProj, una mezcla de Java y C++, toneladas de Views personalizados y renderizado de interfaz casero. A pesar de toda la complejidad arquitectónica, todo un ecosistema de forks ha crecido alrededor del cliente de Telegram. Los desarrolladores constantemente intentan modificar la aplicación para adaptarla a sus necesidades: algunos añaden recibos de lectura ocultos, otros eliminan anuncios o incorporan nuevos temas.

Hace poco me encontré con el repositorio NagramXF en GitHub. Es un fork del popular cliente Nagram X, cuyo autor decidió no limitarse a una única rama y agrupó funciones de varios proyectos conocidos bajo el capó: AyuGram, exteraGram, Cherrygram y OctoGram.

Analicemos qué es este proyecto, cómo está estructurado internamente y cómo construir tu propio APK a partir del código fuente.

Un Frankenstein de las mejores funciones de clientes de terceros

La historia de los clientes alternativos de Telegram para Android se asemeja a un juego de construcción. Primero vino el fork de Nekogram, luego Nagram, más tarde Nagram X, y ahora hemos llegado a NagramXF. El autor del proyecto, Keeperorowner, tenía un objetivo simple: tomar la estabilidad base de Nagram X y portar las mejoras útiles de otros forks cerrados y abiertos a este.

Esto es lo que se incluyó en la compilación:

  • Funciones de AyuGram: guardar el historial de mensajes editados y eliminados directamente en el dispositivo, configuración flexible del estado de "escribiendo", y recibos de lectura ocultos para conversaciones.
  • Funciones de personalización de exteraGram y Cherrygram: fuentes ajustadas con precisión, estilos de iconos, divisores de chat personalizados, y un menú extendido de reenvío de mensajes sin el autor.
  • Ajustes menores de UI de OctoGram: copia rápida de enlaces, visualización simplificada de perfiles, y optimización de animaciones en listas.

Un detalle interesante: en la descripción del repositorio, el autor advierte honestamente que algunas funciones se obtuvieron mediante ingeniería inversa de compilaciones cerradas. El código conserva referencias a los autores originales de varios parches, lo cual para forks de código abierto de este tipo es más bien una agradable rareza.

Bajo el capó y especificidades estructurales

El repositorio es bastante pesado, alrededor de 800 megabytes sin submódulos. Dentro hay un proyecto clásico TMessagesProj, pero con cambios notables en módulos y ayudantes.

Si miras dentro del paquete tw.nekomimi.nekogram.helpers, la ascendencia de Nekogram es inmediatamente aparente. Por ejemplo, la gestión remota de metadatos y configuración del cliente está vinculada a la clase BaseRemoteHelper, que lee parámetros de un canal de servicio especial.

La arquitectura del fork se sustenta en tres pilares:

  1. El código base de Telegram Android, extraído periódicamente del upstream del repositorio oficial DrKLO/Telegram.
  2. Una capa de interceptación de eventos: los mensajes entrantes se almacenan en caché en una base de datos SQLite local antes de que el servidor envíe un comando para eliminarlos o editarlos (así es como funciona la funcionalidad de AyuGram).
  3. Parches de UI: una capa sobre las Activities y controladores estándar de Telegram, añadiendo interruptores al menú de configuración.

Cómo compilar el proyecto localmente

Compilar forks de Telegram siempre ha sido una empresa aparte, pero NagramXF tiene una guía bastante directa. Si quieres profundizar en el código o crear una compilación limpia con tus propias claves, necesitarás Android Studio, un par de claves de la consola de desarrolladores de Telegram, y unos 15 minutos de tiempo libre.

Primero, clona el repositorio junto con todos los submódulos:

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

Si olvidaste el indicador --recursive durante la clonación inicial, puedes extraer los submódulos manualmente:

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

A continuación, ve a my.telegram.org, inicia sesión y crea una nueva aplicación para obtener tu TELEGRAM_APP_ID y TELEGRAM_APP_HASH. Sin ellos, el cliente simplemente no podrá autenticarse con los servidores de Telegram.

En la raíz del proyecto, crea un archivo local.properties y añade las credenciales que recibiste:

TELEGRAM_APP_ID=1234567
TELEGRAM_APP_HASH=0123456789abcdef0123456789abcdef

Si estás compilando un APK de lanzamiento para uso regular, también deberías añadir ahí los parámetros de tu keystore:

KEYSTORE_PASS=your_keystore_password
ALIAS_NAME=your_alias_name
ALIAS_PASS=your_alias_password

Ahora necesitas configurar algunos parámetros del sistema en el código:

  • En TMessagesProj/src/main/AndroidManifest.xml, especifica tu clave de API de Google Maps (si quieres que el uso compartido de ubicación funcione correctamente).
  • En el archivo BaseRemoteHelper.java, especifica el ID del canal de metadatos.
  • Coloca google-services.json en TMessagesProj/ si necesitas notificaciones push a través de Google FCM.

Después de eso, el proyecto se abre en Android Studio y se compila con la tarea estándar assembleRelease o assembleDebug.

A quién podría resultarle útil este proyecto

Clientes como NagramXF son interesantes en dos escenarios.

Primero, para desarrolladores de Android. Si quieres ver cómo se implementan en la práctica los interceptores de mensajes, el almacenamiento local y los parches sobre el monolito heredado de Telegram, NagramXF lo demuestra claramente. Aquí puedes echar un vistazo a la implementación de menús personalizados, anulaciones de eventos de red y uso del NDK.

Segundo, para quienes encuentran la versión base de Telegram demasiado limitada en configuración. NagramXF combina funciones que antes requerían elegir entre AyuGram y exteraGram. Todo está reunido en un solo lugar aquí.

Por supuesto, hay que tener en cuenta los riesgos: usar clientes de terceros con parches cerrados requiere confiar en el autor del fork. Pero si necesitas un cliente personalizable con un proceso de compilación abierto, NagramXF parece un experimento interesante.

Proyectos relacionados