Conforme se introducen nuevos dispositivos Android con resoluciones cada vez mayores en el mercado, necesitamos distribuir archivos de imágenes cada vez más pesados para soportarlas, con lo que la administración y distribución de recursos se convierte en un problema real.
Los usuarios tienden a quejarse sobre las aplicaciones que ocupan demasiado en sus dispositivos. ¿Qué sentido tiene almacenar gráficos en Alta Definición en un pequeño teléfono, que ni siquiera se puede conectar a una pantalla externa, con una modesta resolución QVGA?
Una de las formas de solucionar este problema, quizás la más "oficial", es crear múltiples archivos apk, cada uno con un subconjunto diferentes de imágenes para cada densidad de pantalla soportada.
Pero el propio Google recomienda el uso de un único archivo apk por varias razones:
- La publicación y administración de la aplicación es más sencilla.
- Sólo tienes una rama de código para todas las resoluciones
- Tu aplicación puede adaptarse a cambios de configuración en el dispositivo
- Permite la instalación de la aplicación entre dispositivos diferentes
Puedes encontrar información adicional sobre estos problemas en la página enlazada anteriormente (sólo en inglés, me temo).
Otra manera de afrontar este problema consiste en crear diferentes aplicaciones separadas, habitualmente dos, repartiendo los recursos entre ellas de tal manera que cada una tendrá sólo un subconjunto de las imágenes. En Google Play puedes encontrar aplicaciones "duplicadas" con nombres como "Juego Fantástico" y "Juego Fantástico HD", en donde la segunda es más grande porque contiene gráficos para dispositivos en Alta Definición.
Pero esto conlleva además de las desventajas de los múltiples archivos apk, la dispersión de toda la promoción social de tu app.
La mejor opción parece ser almacenar los recursos en un servido remoto, y cargarlos en la aplicación bajo demanda en tiempo de ejecución. No obstante este método tiene dos desventajas fundamentales:
- Como los recursos son cargados dinámicamente en tiempo de ejecución, la clase R no estará disponible al compilar, con lo que ello conlleva. Además no hay ningún soporte oficial en el API para hacer cosas como esta, así que debes implementar un subsistema de gestión de recursos por tu cuenta.
- Necesitarás un servidor remoto para almacenar y recuperar los recursos cuando los usuarios los requieran.
Como contrapartida tiene la gran ventaja de instalar en el dispositivo del usuario sólo los recursos que este necesite, así que es el método que he decidido seguir en el futuro al desarrollar juegos para Android y otras aplicaciones que requieran el uso de muchas imágenes prediseñadas.