淘寶、微博、微信的 Android 圖片放置策略

本文會分析三個廠家的圖片放置策略,但願能夠給你們一些參考。android

1. 淘寶

mdpi:微信

mdpi中存留了一些android原始的icon,這個從命名和前綴就能看出來。經過圖片大小分析,這個目錄下面都是一些很小的icon,還有一些沒有用到的icon。(這個launcher圖片也很好的說明了淘寶的歷史)app

hdp:svg

hdp中分爲兩部分:表情和其餘圖片。f+數字的圖片都是表情圖片,淘寶僅僅有一套表情圖片,而且都放在這個目錄下。除了少許的圖片和mdip的圖片一致(好比用戶頭像的place_holder)外,其他的圖片和mdpi的圖片徹底不一樣。順便說一下,此目錄下除了表情以外,其他的都是一些小icon,絕對屬於尺寸很小的那類。優化

xhdpi:3d

xhdpi又和hdpi不一樣了,它裏面有大量的國家icon。除此以外就是一些對清晰度要求較高的icon。cdn

xxhdpi:xml

xxhdpi就沒什麼東西了,幾張圖而已。blog

其餘:圖片

有後綴的文件夾中除了5張左右的淘寶本身的icon外,其他都是系統的圖片,均以abc開頭。我不清楚淘寶到底有沒有使用到這些圖片,但我能夠確定地說其中有着冗餘圖片,或許有着進一步優化的方案。

總結:
淘寶的放置圖片策略是大量的圖片在hdpi,xhdpi中,好比表情圖在hdpi中,國家圖在xhdpi中,大多數圖片都僅有一套,少數全局的icon是會有多張的狀況(極少,估計只有十幾張)。xxhdpi和mhdpi僅僅做爲補充,沒有太大的做用。

淘寶最使人好奇的點在於它的資源文件很小,可是so文件至關大:

2. 微博

微博是一個典型的android風格的app,它的drawable全都是有後綴的,徹底符合安卓標準的默認打包策略,它還有根據像素密度的圖片,甚至有ldpi的目錄。

mdpi-v4

mdpi中有大量的小icon,裏面有個叫作share_wx的,從名字一會兒就知道是微信分享的icon,但實際是微博的logo,比較有趣。其他的都是一些邊邊角角的圖標,量不大,因此主力圖確定不在這裏。

hdpi-v4

這是微博圖片存放的主要目錄,有不少大背景和表情,微博的表情圖片和淘寶同樣都是在hdpi中的,它以lxh,emoji等前綴開頭,用來區分不一樣風格的表情。

xhdpi-v4和xxhdpi-v4*

這裏放了一些背景大圖,我也發現了大量和hdpi中同樣的圖片,因此能夠大膽的假設微博是作了不一樣像素的圖片的。這也證明了個人想法——微博是很標準的android應用。

ldpi-v4

這個目錄的確沒什麼用,微博自身也不會維護這個目錄,這全都是第三方庫和應用商店給的圖片,微博開發者只須要放進來就好。

sw400dp和sw32dp-400dp

這些目錄放了一些爲不一樣分辨率準備的長得相同的icon,固然還有微博本身的logo。

3. 微信

經過上面的分析,咱們是否是能夠得出一些經驗了呢?

  • 大量的圖片都在hdpi和xdpi中
  • 表情圖片在hdpi中
  • anim目錄中都是xml文件
  • drawable目錄中有大量的xml和少許的png和.9圖
  • layout文件中是所有的xml
  • raw中放置音頻
  • svg圖片在raw、drawable或assets中
  • 最大的文件夾是圖片文件
  • layout文件較小
  • 相同的圖片,高分屏的確定比低分屏的大

ok,如今我們就能夠來看微信的資源了,混淆怕啥,友盟混淆的abcd代碼都能看懂,微信的adcd資源也應該不難。

raw(a9)

這個目錄中放置了大量的svg圖片和mp3文件,從專業的角度來想,drawable目錄下確定不會放mp3,因此這個確定是raw文件了。這個目錄下有大量的svg,因此能夠看出微信已經實現了全svg化,而且已經在線上穩定運行了。這點在微信早期的公衆號上也能夠獲得佐證,詳細請看Android微信上的SVG

文中提到了:

第一步,拿到.svg後綴的資源文件(UI很容導出這種圖片),放在raw目錄下而不是drawable目錄。
第二步,把 R.drawable.xxx 換成 R.raw.xxx;把 @drawable/xxx 換成 @raw/xxx。

layout(f)

如今有了兩個線索,那麼初步估計上面的三個目錄確定是咱們常見的目錄,不然不會那麼大。

打開f後發現這個就是layout文件,因此其他的確定就是圖片文件了。

hdpi(y)


y是2.9m,裏面有大量的表情,因此我判斷它是hdpi,爲了更加證明這個猜想,我找到了兩張相同的圖片。

a2中:

y中:

y中圖片是11kb,a2中圖片是76kb,這明顯說明y是hdpi,a2是xhdpi。

xhdpi(a2):

xhdpi中的圖片和hdpi中的圖片相同的很少,微信在這裏放的是一些大圖。

drawable(k)

drawable自己沒啥能夠說的,可是微信的drawable中.9圖份額不多,因此我在想是否svg能夠在必定的程度上完成一些.9的工做呢?

總結:

  1. 微信的表情都在hdpi中,僅有一套圖片,這點幾乎已經成爲了標準
  2. 微信已經實現了svg化,svg圖片在raw中
  3. 微信傾向於把較大的圖片放在xhdpi中,僅出一套圖
  4. 微信和淘寶同樣都是儘可能選擇一套圖來完成需求
相關文章
相關標籤/搜索