关于mipmap和drawable文件夹的区别

现在我们通过AS创建Android工程,会发现ic_launcher默认放在了mipmap文件夹下,而不是原来的drawable文件夹。那这个mipmap文件夹和drawable有啥区别呢?

关于mipmap

查了一下就是一种图形渲染技术

维基百科百科链接:Mipmap

两者的定义

首先查询google官方资料http://developer.android.com/intl/zh-cn/tools/projects/index.html#ApplicationModules,有如下这一段:

image

我们可以看到,mipmap文件夹下只用来放启动图标,就是应用装好后显示在桌面或应用抽屉里的图标。不论你的设备分辨率是多少,放在mipmap文件夹下的资源文件都会被系统保留,以便让launcher挑选最合适的icon显示。

而drawable文件夹,我们还是按照以前的方式放图片资源就行了。

我们再进一步看看这个Managing Launcher Icons as mipmap Resources

里面有说到为什么要使用mipmap文件夹:

When app resource optimization techniques remove resources for unused screen densities, launcher icons can wind up looking fuzzy because the launcher app has to upscale a lower-resolution icon for display. To avoid these display issues, apps should use the mipmap/ resource folders for launcher icons. The Android system preserves these resources regardless of density stripping, and ensures that launcher apps can pick icons with the best resolution for display.

上面的大致意思就是,有个resource optimization techniques会移除不是当前设备屏幕密度的资源文件,那launcher应用只能通过放大一个较低分辨率的icon来展示,导致应用图标看上去模糊了。如果resource放在mipmap文件夹下,android系统就会保留这些resource而无视resource optimization techniques,这样launcher就可以使用最佳分辨率的来显示。

看完官方解释我表示没懂啊T T

最后google还提了一句:

Note: Even if you build a single APK for all devices, it is still best practice to move your launcher icons to the mipmap/ folders.

这话的意思是如果我们是开发一个全设备通用的app(现在不都这样么),图片资源包括ic_launcher还是可以像以前一样放在drawable文件夹内,也没有上面所说的影响咯?

stackoverflow上有相关的问题:http://stackoverflow.com/questions/23935810/mipmap-drawables-for-icons。看了其中的答案还是有些疑问。

不算总结的总结

  1. mipmap文件夹仅仅建议放启动图标,其文件夹下的图标会通过mipmap技术进行优化。
  2. 如果我们只开发所有设备通用的apk,应用图标放不放到mipmap文件夹下都无所谓,不过官方建议应用图标以后都放倒mipmap文件夹里。

留有的疑问

  1. 是否需要把所有的图片资源都放到mipmap文件夹内?都放进去会有做什么mipmap优化吗?
  2. 如果是像素密度特定的apk,为啥会导致launcher上的图标变模糊?