Diego Laballós

Desarrollador de aplicaciones Android

Diferencias entre la carpeta drawable y mimap en Android

Diferencias entre la carpeta drawable y mipmap de android

A partir de la versión 1.1 de Android Studio empezamos a ver una carpeta llamada mipmap. Curiosamente, cuando creábamos un nuevo proyecto, ahí nos coloca por defecto el icono de la aplicación.

Hasta ahora, ya con Eclipse, todas las imágenes tenían que ir en la carpeta drawable. ¿Dónde las ponemos ahora que tenemos dos opciones?

La carpeta drawable

La carpeta drawable sigue teniendo el mismo uso de siempre. Sirve para colocar todas las imágenes que vaya a utilizar nuestra aplicación.

Podemos dividir esta carpeta en más carpetas a través de sufijos que indican la densidad de cada recurso. Dependiendo de las densidades que vayamos a soportar podemos tener algo así.

Carpeta drawable de Android Studio

Colocaremos en cada carpeta diferentes versiones de la imagen. En la carpeta drawable-mdpi colocaremos el recurso con un factor de escalado de x1, en drawable-hdpi un factor de x1.5, en xhdpi de x2 y así continuamente con las siguientes densidades.

Hasta ahora, aquí colocábamos también el icono de la aplicación. Pues bien, este icono ahora ya no se coloca en esta carpeta.

La carpeta mimap

La carpeta de mimap, que como comentaba se introdujo en la versión 1.1 de Android Studio, funciona exactamente igual que la carpeta drawable.

Carpeta mimap de Android Studio

Podemos dividir la carpeta con los mismos sufijos para diferenciar los recursos en base a la densidad que les corresponde.

Pero en esta carpeta no colocaremos las imágenes que se usan dentro de la aplicación. Únicamente colocaremos el icono de la app. Como podemos observar, cuando creamos un proyecto en Android Studio, por defecto, ya nos coloca ahí el icono con el nombre de ic_launcher.

Las diferencias entre ellas

Así que vistas ambas carpetas, la conclusión es que la carpeta mipmap la utilizaremos sólo para el icono de la aplicación, mientras que la carpeta drawable se utilizará para todos los demás recursos gráficos.

Carpeta mimap y drawable de Android Studio

¿Por qué tener una sola carpeta para el icono?

La explicación que nos da Google es la siguiente. Ahora mismo, tenemos la habilidad de poder generar diferentes archivos apk para diferentes densidades o tamaños de pantalla. De esta manera, al generar la aplicación para una densidad concreta, todos los gráficos que no pertenecen a esa densidad no se incluyen en el archivo y así podemos reducir el tamaño final del apk. Dicho de una manera más simple, si hacemos uso de diferentes apks en base a una densidad, sólo se incluirán los recursos de la carpeta drawable que pertenece a la densidad que se queremos generar.

Aquí reside actualmente la gran diferencia. Con la carpeta mipmap no sucede eso. Todos los recursos de la carpeta mipmap son incluidos aunque no pertenezcan a la densidad elegida.

¿Para que incluir las carpetas de otra densidad si no se van a utilizar?

Bueno, eso no es del todo así con el icono de la aplicación. Algunos dispositivos no utilizan el tamaño por defecto del icono y utilizan un tamaño más grande. Lo que pasaba hasta ahora es que igual un dispositivo de densidad xhdpi, en realidad estaba mostrando un icono de densidad xxhdpi que se adaptaba mejor al tamaño que requería ese dispositivo. Si habíamos generado el apk sólo para densidad xhdpi, estaba cogiendo el icono de densidad xhdpi y haciéndolo más grande para que tuviera el tamaño que necesitaba ya que el icono xxhdpi, que en realidad necesitaba, no estaba presente. El resultado era una perdida de resolución en algo tan importante como el icono.

Icono de aplicación android de mala resolución

Este captura de pantalla muestra un ejemplo de ello. El icono de la izquierda tiene una perdida de resolución porque tenía los iconos en la carpeta drawable y este dispositivo en concreto, ha tenido que agrandar un icono de menor tamaño. El icono de la derecha en cambio, pertenece a una versión con los iconos en la carpeta mipmap y aunque se haya generado un apk de densidad específica no ha afectado al icono.

Cabe recordar que para utilizar los recursos en xml debemos referirnos con el prefijo adecuado. Las imágenes que residan en la carpeta drawable tienen que ser referenciadas con @drawable mientras que el icono que estará en la carpeta mipmap debemos referirnos con el prefijo @mipmap.

Conclusión

Resumiendo, el icono lo colocamos en la carpeta mipmap y el resto de imágenes en la carpeta drawable.

Actualmente, puedes colocar cualquier imagen en la carpeta que te parezca, siempre y cuando la referencies con el prefijo adecuado. No va a dejar de funcionar, es más, va a funcionar igual. De todas maneras y aunque no utilices la funcionalidad de generar diversas apk para diversas densidades, Google recomienda separar únicamente el icono en la carpeta mipmap.

El hecho de que Google recomiende hacerlo así, puede suponer que en un futuro existan más funcionalidades para esta carpeta, además de la de incluirse los recursos de todas las densidades. Quién sabe lo que tienen pensado para esta carpeta, seguramente en una actualización futura pueda ir más allá. Así que mejor hacer caso a las buenas practicas de Google, para no tener que hacer multitud de cambios en un futuro.

Si tienes cualquier duda o sugerencia sobre el tema, no dudes en escribirme a través de mi formulario de contacto.

Compartir