Android?APP瘦身shrinkResources使用問(wèn)題詳解
一、背景
對(duì)于縮小APk大小,除了開(kāi)啟混淆
minifyEnabled true
還有使用
shrinkResources true
說(shuō)下這兩者的區(qū)別
- minifyEnabled 這個(gè)是用來(lái)開(kāi)啟刪除無(wú)用代碼,比如沒(méi)有引用到的代碼
- shrinkResources 用來(lái)開(kāi)啟刪除無(wú)用資源,也就是沒(méi)有被引用的文件(經(jīng)過(guò)實(shí)測(cè)是drawable,layout,實(shí)際并不是徹底刪除,而是保留文件名,但是沒(méi)有內(nèi)容,等等),但是因?yàn)樾枰朗欠癖灰盟孕枰浜蟤ififyEnable使用,只有當(dāng)兩者都為true的時(shí)候才會(huì)起到真正的刪除無(wú)效代碼和無(wú)引用資源的目的
二、shrinkResources 作用
android { buildTypes { debug { minifyEnabled false shrinkResources false } release { minifyEnabled true shrinkResources true } } }
shrinkResources = true作用是刪除無(wú)用的Resource,是與minifyEnabled 一起使用,minifyEnabled =true是開(kāi)啟混淆。
三、實(shí)站演練
同樣的資源代碼
1.只有minififyEnable false 或者 minififyEnable false && shrinkResources true
APK大小為1.39M
資源文件和layout都存在且是有內(nèi)容的
2.只有minifyEnable true
866K
資源文件和layout都存在且是有內(nèi)容的
3.minifyEnable true && shrinkResources true
資源文件在但是沒(méi)有內(nèi)容大小都變成67字節(jié),layout文件內(nèi)容被清空
4.minifyEnable true && shrinkResources true 在res/raw/keep.xml(避免被誤刪除)寫(xiě)了配置的
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@layout/activity_four,@drawable/no_reference_but_keep"/>
沒(méi)有在配置文件中聲明保存的文件沒(méi)有內(nèi)容,聲明保存的文件有內(nèi)容(資源文件和layout文件)
注意:string.xml中沒(méi)有被引用的怎么設(shè)置都不會(huì)被刪除
可以通過(guò)gradlew clean assembleRelease - info來(lái)獲得APK縮減資源的概覽
當(dāng)您壓縮資源時(shí),Gradle Console 會(huì)顯示它從應(yīng)用軟件包中移除的資源的摘要。例如:
:android:shrinkDebugResources Removed unused resources: Binary resource data reduced from 2570KB to 1711KB: Removed 33% :android:validateDebugSigning
四、使用shrinkResources 出現(xiàn)的問(wèn)題
android 使用了shrinkResources = true后,有時(shí)候會(huì)出現(xiàn)問(wèn)題。 最近項(xiàng)目集成阿里百川的意見(jiàn)反饋,添加的安全圖片只是做驗(yàn)證,項(xiàng)目里面未引用。debug模式自然是沒(méi)問(wèn)題,因?yàn)閟hrinkResources 設(shè)置的是false,但在release 模式下,當(dāng)shrinkResources = true的時(shí)候,集成的意見(jiàn)反饋出問(wèn)題。
解決辦法
新增res/raw/keep.xml文件,在里面把需要保留的資源文件列舉出
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@drawable/yw_1222"/>
如此問(wèn)題就解決了。如果項(xiàng)目中需要keep多個(gè)資源可以tools:keep="@drawable/a,@layout/b,@layout/c"。意思就是在混淆的時(shí)候這些。
文末
移動(dòng)端產(chǎn)品功能的逐漸增加,apk包會(huì)越來(lái)越臃腫,這里面會(huì)存在大量的情況。,APP 的體積也不可避免地呈現(xiàn)上升趨勢(shì),如果不加以重視,幾個(gè)版本迭代下來(lái),可能你的 APP 體積會(huì)達(dá)到用戶不能忍受的程度。比如冗余的代碼、無(wú)用的資源、未合理化處理的圖片等等。 所以Android APP瘦身是開(kāi)發(fā)者必學(xué)的技術(shù)之一
以上就是Android APP瘦身shrinkResources使用問(wèn)題詳解的詳細(xì)內(nèi)容,更多關(guān)于Android APP瘦身shrinkResources的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android中正確使用字體圖標(biāo)(iconfont)的方法
IconFont字體不僅僅流行于Web開(kāi)發(fā),在移動(dòng)開(kāi)發(fā)中也漸漸的使用的范圍更廣泛。這篇文章主要介紹了在Android開(kāi)發(fā)中使用icon font的代碼和方法。對(duì)大家學(xué)習(xí)使用iconfont有一定的參考借鑒價(jià)值,有需要的朋友們下面來(lái)一起看看吧。2016-10-10Android ListView UI組件使用說(shuō)明
這篇文章主要介紹了Android ListView UI組件使用說(shuō)明,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04Android實(shí)現(xiàn)的狀態(tài)欄定制和修改方法
這篇文章主要介紹了Android實(shí)現(xiàn)的狀態(tài)欄定制和修改方法,涉及Android針對(duì)狀態(tài)欄屬性設(shè)置的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10Android滑動(dòng)拼圖驗(yàn)證碼控件使用方法詳解
這篇文章主要為大家詳細(xì)介紹了Android滑動(dòng)拼圖驗(yàn)證碼控件的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08Android如何實(shí)現(xiàn)設(shè)備的異顯功能詳解
這篇文章主要給大家介紹了關(guān)于Android如何實(shí)現(xiàn)設(shè)備的異顯功能的相關(guān)資料,這篇文章通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位Android開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-02-02PopupWindow?RecyclerView實(shí)現(xiàn)下拉選擇Spinner示例解析
這篇文章主要介紹了PopupWindow?RecyclerView實(shí)現(xiàn)下拉選擇Spinner示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07