Android應(yīng)用圖標(biāo)修改后真機顯示不更新的問題
這個問題當(dāng)時我是在網(wǎng)上看了很多博客,大多是說卸載應(yīng)用、重啟手機等,但是這些方法只是適用于部分手機,而且現(xiàn)在的技術(shù)博客太千篇一律,互相抄襲,后來還是自己試驗出了解決方法:
百度下發(fā)現(xiàn)MIUI等也有類似的問題,基本確定是Launcher對應(yīng)用圖標(biāo)建立了緩存,最直接的破除緩存的方法就是修改應(yīng)用的Package Name,換包名后重裝圖標(biāo)就會顯示正確,明顯就是沒有緩存的特征!然而,應(yīng)用發(fā)布過后一般是不會更換包名的,所以這個方法實際應(yīng)用意義不大,僅僅是確認(rèn)了這個圖標(biāo)緩存的機制。
這之后又查到了一些解決方法,如刪除 /data/system/customized_icons 路徑下的響應(yīng)圖標(biāo)(這個需要root,且在5.0上沒有這個路徑,估計是Pre Lollipop用的),再如殺掉Launcher的進(jìn)程,強制其重啟刷新緩存(這個貌似不科學(xué),因為重啟Launcher的話應(yīng)該和重啟系統(tǒng)性質(zhì)是一樣的,但是我試過重啟機器后圖標(biāo)依然沒有刷新,再有就是CM上也沒找到明顯的Launcher進(jìn)程,只有個systemui看起來比較像,不過也不敢強制結(jié)束,怕玩壞啊,哈哈?。?,這之后又自己嘗試了下別的可能作為緩存key的要素,如改VersionCode,改VersionName,同時改VersionCode和VersionName,改res下的圖標(biāo)文件名等,均無效!
這中間還穿插個小注意:以前一直認(rèn)為Android應(yīng)用的圖標(biāo)就放在各種Drawable下就好了,但是后來發(fā)現(xiàn)Android Studio生成的項目中圖標(biāo)ic_launcher.png是放在各種叫mipmap的res子資源文件夾下,于是查了下官方文檔,發(fā)現(xiàn)了這里:http://developer.android.com/intl/zh-cn/tools/projects/index.html#mipmap,簡單說就是官方建議將作為圖標(biāo)的res資源放入mipmap文件夾,理由是drawable中各種dpi的版本有可能會被系統(tǒng)優(yōu)化掉,比如設(shè)備是xxhdpi的,那么ldpi、mdpi、hdpi等無關(guān)的會被去掉,這就導(dǎo)致Launcher或其它位置在顯示應(yīng)用的圖標(biāo)時可能用到不合適的分辨率版本,導(dǎo)致顯示失真變渣。解決方法就是將圖標(biāo)文件歸入mipmap文件夾中,這樣可以保證各個分辨率版本不會被dpi無關(guān)優(yōu)化掉。
發(fā)現(xiàn)上面提到的這個小問題時,還以為可以用mipmap的方式來保證圖標(biāo)修改后的更新,不過結(jié)果依然是:不管用!
以上如果沒有解決問題,那么就說明你的應(yīng)用圖標(biāo)被緩存了,但是改包名涉及到的地方比較多,SO :
可以通過更換主題的方式強制讓手機刷新所有App的Icon,于是恍然大悟,真是Good Idea啊,打開手機的主題管理,換了一個,然后馬上又換了回來,切回應(yīng)用圖標(biāo)列表,小等了一下,圖標(biāo)果然刷新了,而且還有一些別的應(yīng)用圖標(biāo)也變了(百度貼吧等),感覺這就是個主題圖標(biāo)緩存機制設(shè)計的坑!