现在我们通过 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 上的图标变模糊?