被遺忘的 Android mipmaps 簡介
【導(dǎo)讀】已經(jīng)發(fā)布的 Android Studio1.1 版本是一個(gè) bug 修復(fù)版本挡逼。在這個(gè)版本中掌桩,當(dāng)你創(chuàng)建工程時(shí)一項(xiàng)改變將會吸引你的眼球碰镜。工程創(chuàng)建登陸的圖標(biāo)會在 mipmap-resource 文件夾中玛荞,而不是 drawable 文件夾中梦抢。
使用 mipmap 文件夾存放啟動圖標(biāo)的好處
Android 開發(fā)團(tuán)隊(duì)認(rèn)為使用 mipmap 文件夾保存啟動圖標(biāo)是最佳的開發(fā)方式呢岗。使用 mipmap 的最大優(yōu)勢是你可以在各種屏幕密度的設(shè)備下將資源存儲在 mipmap 文件夾下,然后對于特定屏幕密度的設(shè)備你可以從 drawable 文件夾下去除掉與這個(gè)特定設(shè)備無關(guān)的資源信息。
我們用一個(gè)例子來說明這一特性汉形。假設(shè)用戶有一個(gè)設(shè)備被標(biāo)識為xxhdpi的設(shè)備纸镊,那么開發(fā)者 apk 中的 drawable 文件夾下的其他分辨率大小的資源,例如 xxxhdpi 分辨率概疆,就是不被需要的逗威;換句話說,就是可以被去除掉的岔冀。然而應(yīng)用圖標(biāo)很可能是與其他資源圖片不同的凯旭,因?yàn)樗赡苷紦?jù)整個(gè)屏幕,因此你可能需要啟動圖標(biāo)的分辨率高于其他資源使套。而這時(shí)你為了設(shè)備適配的原因罐呼,高分辨率圖片所在的文件夾已經(jīng)被你去除了,這時(shí)當(dāng)程序運(yùn)行時(shí)侦高,系統(tǒng)會將原來低分辨率的圖片進(jìn)行拉伸嫉柴,然而這種做法可能會導(dǎo)致產(chǎn)生一個(gè)丑陋的模糊的圖片。
另一方面奉呛,你可能會說计螺,你并不會使用去除資源來減少 apk 大小的方式去制作不同版本的 apk 文件。這個(gè)時(shí)候你用 mipmap 文件夾去存儲登陸圖標(biāo)看上去不會產(chǎn)生任何意義侧馅。然而這并不意味著你不應(yīng)該使用它危尿,最好的使用它的理由莫過于 Android 開發(fā)團(tuán)隊(duì)認(rèn)為應(yīng)該使用它,并且把它描述為了開發(fā)的最佳實(shí)踐馁痴。他們知道在 Android 的開發(fā)線上將會產(chǎn)生什么樣的新特性谊娇,而且盡管沒有人能確定,但是 Android 開發(fā)團(tuán)隊(duì)很可能計(jì)劃引入這樣一個(gè)新特性罗晕,就是在用戶下載 App 的時(shí)候济欢,apk 會自動丟棄掉不合適的資源文件
Android 登陸 mipmap 的歷史
在 Android 中 mipmap 資源文件夾很早就出現(xiàn)了,這個(gè)時(shí)間點(diǎn)遠(yuǎn)遠(yuǎn)早于他被介紹為應(yīng)該作為 Android 開發(fā)社區(qū)應(yīng)該大規(guī)模使用它的時(shí)間小渊。Android 的官方團(tuán)隊(duì)并沒有發(fā)布過多的原因來說明為什么要使用 mipmap 資源文件夾法褥。在 Android 4.3 版本發(fā)布的時(shí)候,Android 框架的卡法人員 hackbod 宣布: 假如你正在為不同屏幕分辨率版本的設(shè)備制作不同版本的 app酬屉,那么你應(yīng)該去了解 mipmap 資源文件夾半等,它與 drawable 文件夾確實(shí)是驚人的相似,除了它并不參與屏幕適配在你生成不同版本的目標(biāo) apk 時(shí)呐萨。 自從這個(gè)宣布之后杀饵,如果你仔細(xì)觀察 Google 的產(chǎn)品,你會發(fā)現(xiàn)一些 app 確實(shí)這樣做了谬擦。效果是在展示時(shí)切距,僅僅只是向屏幕傳輸了所被需要的分辨率的圖標(biāo),但是各種分辨率的登陸圖標(biāo)都別保存到了 mipmap 資源文件夾下惨远。 隨著時(shí)間的推進(jìn)谜悟,并沒有過多關(guān)于使用 mipmap 資源文件夾保存登陸圖片的消息话肖,知道 Android 5.0 出現(xiàn)在 AOSP 以及 Nexus 設(shè)備出現(xiàn)在了市場上。Android 開發(fā)者的博客上標(biāo)出了準(zhǔn)備好讓你的 app 登陸 Nexus6 和 Nexus9. 這篇博文透露了一個(gè)應(yīng)該使用 mipmap 文件夾的理由: 提供分辨率至少為 xxxhpdi 的app 圖標(biāo)因?yàn)樯肀晨梢哉故靖蟮膱D標(biāo)在登陸的時(shí)刻葡幸。最好的方法就是見app圖標(biāo)放在 mipmap 文件夾下因?yàn)樗麑鶕?jù)屏幕分辨率以及使用場景選擇合適分辨率的圖片最筒。例如 xxxhdpi 的圖標(biāo)將會被展示在 xxhdpi 分辨率的設(shè)備上
使用 mipmap 創(chuàng)建 Android 工程
更新 Android Studio 到最新版本,任何一個(gè)新的工程都將會使用 mipmap 的方式創(chuàng)建礼患。
將現(xiàn)有的工程改變?yōu)槭褂?mipmap 文件夾
假如你有一個(gè)優(yōu)秀的工具 Android Asset Studio 去產(chǎn)生你的 Android 登陸圖標(biāo)是钥,你會注意到 mipmap 的改變已經(jīng)被 assets 文件夾產(chǎn)生的結(jié)構(gòu)所反映出來。 你的 assets 應(yīng)該變得像之前的登陸圖標(biāo)的結(jié)構(gòu)那樣缅叠。res/ mipmap-mdpi/iclauncher.png (48x48 pixels) mipmap-hdpi/iclauncher.png (72x72) mipmap-xhdpi/iclauncher.png (96x96) mipmap-xxhdpi/iclauncher.png (144x144) mipmap-xxxhdpi/iclauncher.png (192x192) 同時(shí)你要改變你的 AndroidManifest.xml 文件去使用 mipmap 作為啟動圖標(biāo): android:icon="@mipmap/iclauncher"
OneAPM 是應(yīng)用性能管理領(lǐng)域的新興領(lǐng)軍企業(yè)悄泥。Mobile Insight 能以用戶真實(shí)使用感受為度量標(biāo)準(zhǔn),檢測每次崩潰的發(fā)生肤粱,協(xié)助監(jiān)控移動應(yīng)用性能弹囚。想閱讀更多技術(shù)文章,請?jiān)L問 OneAPM 官方博客领曼。