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編程實(shí)現(xiàn)只顯示圖片一部分的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)只顯示圖片一部分的方法,涉及Android針對(duì)圖片的局部顯示操作技巧,需要的朋友可以參考下2016-10-10
Android 判斷SIM卡屬于哪個(gè)移動(dòng)運(yùn)營(yíng)商詳解及實(shí)例
這篇文章主要介紹了Android 判斷SIM卡屬于哪個(gè)移動(dòng)運(yùn)營(yíng)商詳解相關(guān)資料,并附實(shí)例代碼,具有一定參考價(jià)值,需要的朋友可以參考下2016-11-11
Android高級(jí)xml布局之輸入框EditText設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了Android高級(jí)xml布局之輸入框EditText設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
更新Android Studio 3.0碰到的問(wèn)題小結(jié)
本文是小編給大家分享的更新Android Studio 3.0碰到的問(wèn)題小結(jié),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-11-11
php 異步調(diào)用方法實(shí)現(xiàn)示例
客戶端與服務(wù)器端是通過(guò)HTTP協(xié)議進(jìn)行連接通訊,客戶端發(fā)起請(qǐng)求,服務(wù)器端接收到請(qǐng)求后執(zhí)行處理,并返回處理結(jié)果2014-01-01
Kotlin基礎(chǔ)學(xué)習(xí)之循環(huán)和異常
最近在學(xué)習(xí)kotlin,Kotlin 是一個(gè)基于 JVM 的新的編程語(yǔ)言,下面這篇文章主要給大家介紹了關(guān)于Kotlin基礎(chǔ)學(xué)習(xí)之循環(huán)和異常的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-12-12

