Android應(yīng)用圖標(biāo)修改后真機(jī)顯示不更新的問題
這個(gè)問題當(dāng)時(shí)我是在網(wǎng)上看了很多博客试疙,大多是說(shuō)卸載應(yīng)用诵棵、重啟手機(jī)等,但是這些方法只是適用于部分手機(jī)祝旷,而且現(xiàn)在的技術(shù)博客太千篇一律履澳,互相抄襲,后來(lái)還是自己試驗(yàn)出了解決方法:
百度下發(fā)現(xiàn)MIUI等也有類似的問題怀跛,基本確定是Launcher對(duì)應(yīng)用圖標(biāo)建立了緩存距贷,最直接的破除緩存的方法就是修改應(yīng)用的Package Name,換包名后重裝圖標(biāo)就會(huì)顯示正確吻谋,明顯就是沒有緩存的特征忠蝗!然而,應(yīng)用發(fā)布過(guò)后一般是不會(huì)更換包名的漓拾,所以這個(gè)方法實(shí)際應(yīng)用意義不大什湘,僅僅是確認(rèn)了這個(gè)圖標(biāo)緩存的機(jī)制长赞。
這之后又查到了一些解決方法,如刪除 /data/system/customized_icons 路徑下的響應(yīng)圖標(biāo)(這個(gè)需要root,且在5.0上沒有這個(gè)路徑,估計(jì)是Pre Lollipop用的)怯晕,再如殺掉Launcher的進(jìn)程,強(qiáng)制其重啟刷新緩存(這個(gè)貌似不科學(xué)贩据,因?yàn)橹貑auncher的話應(yīng)該和重啟系統(tǒng)性質(zhì)是一樣的,但是我試過(guò)重啟機(jī)器后圖標(biāo)依然沒有刷新闸餐,再有就是CM上也沒找到明顯的Launcher進(jìn)程饱亮,只有個(gè)systemui看起來(lái)比較像,不過(guò)也不敢強(qiáng)制結(jié)束舍沙,怕玩壞啊近上,哈哈!)拂铡,這之后又自己嘗試了下別的可能作為緩存key的要素壹无,如改VersionCode,改VersionName感帅,同時(shí)改VersionCode和VersionName斗锭,改res下的圖標(biāo)文件名等,均無(wú)效失球!
這中間還穿插個(gè)小注意:以前一直認(rèn)為Android應(yīng)用的圖標(biāo)就放在各種Drawable下就好了岖是,但是后來(lái)發(fā)現(xiàn)Android Studio生成的項(xiàng)目中圖標(biāo)ic_launcher.png是放在各種叫mipmap的res子資源文件夾下,于是查了下官方文檔实苞,發(fā)現(xiàn)了這里:http://developer.android.com/intl/zh-cn/tools/projects/index.html#mipmap豺撑,簡(jiǎn)單說(shuō)就是官方建議將作為圖標(biāo)的res資源放入mipmap文件夾,理由是drawable中各種dpi的版本有可能會(huì)被系統(tǒng)優(yōu)化掉黔牵,比如設(shè)備是xxhdpi的前硫,那么ldpi、mdpi荧止、hdpi等無(wú)關(guān)的會(huì)被去掉,這就導(dǎo)致Launcher或其它位置在顯示應(yīng)用的圖標(biāo)時(shí)可能用到不合適的分辨率版本阶剑,導(dǎo)致顯示失真變?cè)狙病=鉀Q方法就是將圖標(biāo)文件歸入mipmap文件夾中,這樣可以保證各個(gè)分辨率版本不會(huì)被dpi無(wú)關(guān)優(yōu)化掉牧愁。
發(fā)現(xiàn)上面提到的這個(gè)小問題時(shí)素邪,還以為可以用mipmap的方式來(lái)保證圖標(biāo)修改后的更新,不過(guò)結(jié)果依然是:不管用猪半!
以上如果沒有解決問題兔朦,那么就說(shuō)明你的應(yīng)用圖標(biāo)被緩存了偷线,但是改包名涉及到的地方比較多,SO :
可以通過(guò)更換主題的方式強(qiáng)制讓手機(jī)刷新所有App的Icon沽甥,于是恍然大悟声邦,真是Good Idea啊,打開手機(jī)的主題管理摆舟,換了一個(gè)亥曹,然后馬上又換了回來(lái),切回應(yīng)用圖標(biāo)列表恨诱,小等了一下媳瞪,圖標(biāo)果然刷新了,而且還有一些別的應(yīng)用圖標(biāo)也變了(百度貼吧等)照宝,感覺這就是個(gè)主題圖標(biāo)緩存機(jī)制設(shè)計(jì)的坑蛇受!