Entendiendo sobre Open Source, desarrollo progresivo e integración continua en Android con Flyve MDM

Hace algunas semanas en un grupo de telegram me encontré con una propuesta de un buen amigo que estaba buscando programadores de Android e iOS conversamos un rato y la propuesta me pareció interesante era algo diferente y fresco lejos de las apps de noticias e información que hacemos generalmente desde hace al menos unos 8 años, para empezar a trabajar acordamos hacer un primer dummie con un protocolo MQTT que fuese capaz de crear un servicio en background y recibir mensajes sobre este protocolo, no sonó complicado y empezamos a hacerlo en tiempo parcial mientras cerrabamos otros proyectos pendientes, una vez finalizado el dummie conocimos al Sr. Pascal y allí empezó el proceso.

Como programador de Android con más de 100 apps tenia confianza en mi trabajo, para empezar lo primero que hicimos fue tomar un proyecto open source llamado fusión inventory y de allí tenia que armar una librería subirla a github nada complicado, lo divertido era que esa librería se iba realizar con integración continua con la ayuda de travis-ci que había escuchado antes quizás un par de veces pero que no tenía claro en que me podía ayudar, íbamos a hacer test unitarios y test instrumentales, también íbamos a hacer la documentación, certificación y distribución todo de forma automática, la foto es la siguiente haces un push al repositorio de github y automáticamente se compila, se hacen las pruebas del app, se genera la documentación, se certifica y se publica en bintray y de allí a jcenter todo esto luego de un simple push o un pull request a la rama Master o a la rama Develop según sea el caso, todo este proceso se monitorea en tiempo real desde telegram ó slack una maravilla.

Todo esto suena bien, hacerlo funcionar con Android es otra cosa, la aventura comienza con gradle la verdad es que para las apps normales quizás lo toque un poco para importar librerías y sabia que existían 2 archivos uno para el app y otro para el proyecto pero generalmente no hace falta más del tema, gradle es todo un sistema de programación de tareas que puede automatizar muchas cosas, la compilacion, la certificacion, la generación de la documentación y la publicación todo se puede hacer con gradle, por otro lado tienes a travis-ci básicamente en el montas una copia de tu ambiente de desarrollo y le pides que ejecute las tareas, quieres abrir un simulador, instalar tu app y ejecutarla travis te ayuda, lo hace y luego te notifica, quieres ejecutar una tarea de gradle, travis te ayuda así que el panorama esta montado y claro.

Una vez hecho el gradle para que certificará y subiera el app toco la hora de programar a travis, empieza con algo super simple colocas un archivo .travis.yml en tu proyecto, activas tu repo de github travis-ci.org y listo, no es posible que sea mas fácil que eso, el problema viene con que no lo puedes probar local, el proceso en general es sencillo para hacer pruebas debes hacer cambios y lanzar un push esta parte es lenta y puede ser un poco frustrante ya que si estás en un equipo colaborativo todos tu push al repo llegan al centro de notificaciones y no se ve el avance.

Luego de un par de semanas el proceso avanzó mucho, aún no hemos logramos en alcance de total integración continua por falta de tiempo, pero las bases quedaron muy claras a partir de este momento todas las apps que desarrolle sin dudas van a tener parte de este proceso.

La librería FusionInventory regreso del pasado para entrar a una nueva generación de software Open Source, luego de 6 años aun tiene mucho por mejorar pero esta limpia y lista para recibir ayuda

Si quieres revisar el progreso del app en el que estoy trabajando puedes revisar el repositorio https://github.com/flyve-mdm es un software para Mobile device management para más info puedes revisar el sitio web https://flyve-mdm.com/