想聊一下Drawable / Mipmap的使用

由於task的需要,我有點好奇為何要分成Drawable跟Mipmap。

跟同事Bug聊了一下找到一些網路上的說明

先說結論:Android官方網站,他們是這樣子建議的

  1. Mipmap只用來放ic_launcher,app圖標
  2. 其他App層級的圖片Resource,一切照舊,按Density放在Drawable底下

從這裡的文章節錄(有中文耶XD): https://blog.csdn.net/jasonwang18/article/details/61915956

Android开发团队认为使用mipmap文件夹保存启动图标是最佳的开发方式。使用mipmap的最大优势是你可以在各种屏幕密度的设备下将资源存储在mipmap文件夹下,然后对于特定屏幕密度的设备你可以从drawable文件夹下去除掉与这个特定设备无关的资源信息。
你可能会说,你并不会使用去除资源来减少apk大小的方式去制作不同版本的apk文件。这个时候你用mipmap文件夹去存储登陆图标看上去不会产生任何意义。然而这并不意味着你不应该使用它,最好的使用它的理由莫过于Android开发团队认为应该使用它,并且把它描述为了开发的最佳实践。他们知道在Android的开发线上将会产生什么样的新特性,而且尽管没有人能确定,但是Android开发团队很可能计划引入这样一个新特性,就是在用户下载App的时候,apk会自动丢弃掉不合适的资源文件。

長話短說就是對於一個Apk

  1. Mipmap底下會把所有大小的Resource都留下來,而ic_launcher(app圖示) 繪製的職責是在系統,所以依照系統不同可以有不同的顯示
  2. Apk上架後,很可能會把apk拆成好幾種不同的Density的Drawable 給不同的手機下載

如果一台裝置的Density是介於xxhdpi 跟xxxhdpi,ic_launcher放在Drawable可能xxxhdpi會被捨棄,然後icon會變糊一點,但是mipmap會主動去Downscale xxxhdip的圖來做,更為細緻

那第二個問題就是,難道我把所有Resource都放在mipmap的缺點是?

這個答案是我自己想的

  1. apk會比較大
  2. 由於涉及到density,或許會有多的計算為了讓圖片變得更精細已符合特殊的Density

此外,Stackoverflow裡面的討論:

當中留言的補充:

  • so my typical process of deleting mipmap, placing my icons in drawables and building a single APK is perfect. It sounds like mipmap is atypical for most of us dev’s, yet it is forced on all of us.

感覺mipmap主要就是針對有奇怪Density的Device做特別優化的
而一般來說似乎就照舊吧?