Capacitor y los problemas con Android
¿Cómo resolver errores recurrentes en Android?
Hace un tiempo escribí sobre las virtudes del framework Capacitor comparado con Apache Cordova para el desarrollo de apps que puedan funcionar en Android, iOS, y como PWA utilizando el mismo código de programación. No hay dudas de que los problemas de la década pasada respecto a como programar App móviles han decantado en la universalización del lenguaje, consiguiendo que HTML, CSS y JavaScript fueran hoy una especie de normativa ISO. Desde lo personal Capacitor es mi framework favorito, ha superado por mucho a Apache Cordova. Aún así, como Android siempre será Android no está excento de errores, y eso vengo a compartir, algunos errores típicos que tiene esta plataforma (responsabilidad de Android) y un error que me ocurrió recientemente que roza lo ridículo.
Errores de Compilación de Android
No sé como categorizar este error, pero es el error general. A lo mejor arman hoy un proyecto nuevo con Capacitor, compilan su primer versión y todo va bien; pero al ingresar otro día nos encontramos con errores de este estilo:
Unsupported Modules Detected: Compilation is not supported for following modules: capacitor-cordova-android-plugins, android-capacitor-cordova-android-plugins. Unfortunately you can't have non-Gradle Java modules and Android-Gradle modules in one project.
El error en principio no afecta la compilación de WebView, así que no habría inconveniente, pero puede generar ciertos problemas con plugins, en especial con los plugins migrados de Cordova a Capacitor. ¿Solución? Dentro de Android Studio se suele aconsejar ir a File > Invalidate Caché / Restart. Funciona en pocos casos, lo mismo que sincronizar el Grandle nuevamente. Realmente si no afecta a la compilación yo no me preocuparía mucho, y en el caso de que afecte la mejor manera (lamentablemente) es eliminando la carpeta android de nuestro proyecto y volviendo a ejecutar un npx cap add android. Así es, no es el método más limpio pero si es el más efectivo. Recomiendo que en la carpeta raíz del proyecto tengan una copia del Manifiesto de Android y de la carpeta res donde se encuentran los íconos y las splash screen, porque sino lo van a perder.
Error en el Back Button
Este es el error más raro que me encontré, y hasta llegué a pensar que era problema de Angular. Viene a ser así: los links de la app funcionan (links que en realidad son rutas en Angular), pero al querer volver hacia atras con el botón Back del propio Android, la app se queda en la ruta actual sin modificar su contenido. Pero si a continuación ingresan a cualquier otra ruta, la App dispara la ruta que debió disparar al hacer Back. Espero que se entienda, si a alguien le pasó seguramente no necesitará más explicación que esa. El punto es que es muy grave, ya que una de las razones por las cuales utilizar Angular para una App es por su facilidad en las rutas, y perder eso nos quita una razón de peso para utilizar tanto Angular como Capacitor.
Luego de realizar muchos compilados modificando la estructura misma de la App, decidí probarla en un localhost pero ejecutando la App directamente en el Chrome del Android. Mi sorpresa fue que funciona perfectamente, y ahí mi alarma pasó de Angular al propio Capacitor. Decidí entonces probar una App un poco más vieja (tampoco mucho) con un sistema de rutas prácticamente calcado y, sorpresivamente, funcionaba. Así que busqué replicar la instalación entre ambas aplicaciones. Resultó que la App con problemas estaba utilizando la versión 2.4.0 de Capacitor y de Capacitor Android, mientras que la que si funcionaba utilizaba la 2.2.1. Al hacer un downgrade funcionó sin mayores inconvenientes.
¿Las nuevas versiones de Capacitor tienen bugs de ese calibre? No lo creo, pero las incompatibilidades de Android están a la orden del día, y mi pequeño aporte en este caso es siempre probar haciendo un downgrade cuando tengamos errores insólitos.
Acerca de:
Ignacio Buioli
Degree on Multimedia Arts. He has developed numerous Multimedia projects as well as written articles and translated texts of the mentioned subject. In Moldeo Interactive, He is a Partner and Programmer; also taking care of a large part of the online networks and courses.