2016-11-20 60 views
9

我遇到了這個問題,其中minifyEnabled和shrinkResources給我次優的結果,當我包括,從第三方庫中刪除未使用的資產

'com.google.android.gms:play-services-places:9.6.1' 

我沒有使用谷歌登錄API的,但我得到負載的登錄圖像。 sign_in_images

如何從我的APK中刪除它們?他們似乎添加了一些KB的。

我正在使用proguard縮小和縮小資源,如上所述。

+0

請參考此鏈接您將得到答案http://stackoverflow.com/a/40742213/4069985 –

+1

沒有什麼內置的。你可以試試[這個Gradle腳本](https://stackoverflow.com/a/34525498/115145),儘管我還沒有給它一個鏡頭。 – CommonsWare

+0

@SrinivasKeerthiprakasam謝謝 – Hades

回答

4

在android開發人員用戶指南中有一個詳細主題here

基本上,你有很多選擇,通過收縮你的資源來減少apk的大小。我已經在他們的簡短介紹中討論過了,我認爲啓用嚴格的參考檢查應該解決您的問題,但您可以查看所有可用選項以進一步縮小您的apk大小。


定製,以保持其資源

正如醫生說,使用在RES /生/ keep.xml,決定如何保持如下XML並沒有什麼保留:

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:tools="http://schemas.android.com/tools" 
    tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*" 
    tools:discard="@layout/unused2" /> 

其餘部分將由構建系統來處理(這在使用不同構建變體時很有用)。


啓用嚴格參照檢查

如果你有你的代碼或庫中引用的資源,如下面:

getResources().getIdentifier("image1", "drawable", getPackageName()) 

那麼,在這種情況下,資源收縮機默認和標誌防守表現所有具有匹配名稱格式的資源都可能被使用且不可移除。

因此,添加下列RES /生/ keep.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:tools="http://schemas.android.com/tools" 
    tools:shrinkMode="strict" /> 

添加這應該解決您的問題。


刪除未使用的替代資源

資源收縮機不會刪除替代資源,比如,替代繪圖資源針對不同屏幕密度,替代字符串資源爲不同的語言,等等

所以,你可以自己選擇要保留的東西,從你的構建文件中說,你想保留在'en'語言環境中的字符串:

android { 
    defaultConfig { 
     ... 
     resConfigs "en", "fr" 
    } 
} 

這可以顯着減小尺寸。


如果仍然資源由資源收縮機不停,然後使用手動首先討論的方法排除,然後看看是否被編譯並建立適當的,如果沒有,那麼原因爲資源收縮機保持資源,將變得清晰從構建時拋出的異常。

希望它有幫助!

+0

我試過所有這些方法兄弟。沒有工作。 – Hades

3

如果沒有別的工作自動進行構建系統檢測未使用的資源,你可能想嘗試明確通過排除這些的packagingOptions DSL類似:

android { 
    packagingOptions { 
     exclude '/**/common_google_signin*.png' 
    } 
} 
3

可能有一定的可能性,以減少應用程序的大小,並刪除未使用的資產。

您可以從(':lib')項目庫中刪除未使用的資產。

如果導入@aar文件比你可以做這樣的事情

compile ('com.facebook.android:facebook-android-sdk:[email protected]'){ 
    exclude module: 'support-v4' 
} 

我們仍然有@aar文件比找到替換@aar(':lib'),從那裏取出資產替代方式未使用的文件。