11

我在我的Android項目中使用AppCompat支持庫。 AppCompat有很多drawable和資源,我沒有在我的應用程序中使用。那些不必要的文件將我的900K應用程序增加到2M,我不喜歡。
有沒有什麼辦法可以在創建APK文件時排除這些文件?或者我應該在我的代碼中混淆庫而不是依賴? 我在Android Studio中使用Gradle。Android支持庫增加APK的大小很多

感謝

編輯1我使用ProGuard了。但proguard不知道我不想要drawable-xxxhdpivalues-it例如。

編輯2我也使用Android Lint,它不能幫助我,因爲我不直接訪問lib的代碼,並且android在構建APK文件時添加它們。

+0

您是否嘗試過Proguard? http://proguard.sourceforge.net/index.html –

+0

是的,我已經在使用。但proguard不知道我不想''drawable-xxxhdpi'或'values-it'例如。 –

+0

您是否曾嘗試添加支持庫jar作爲libs文件夾的依賴項,並將「-libraryjars libs」添加到proguard配置中? –

回答

5

從Android的搖籃構建系統,因爲0.7.0版本:

產品的風味(和defaultConfig)允許資源的過濾通過的aapt -c選項,您可以通過單一值(resConfig)或新選項通過DSL的多個值(resConfigs)。 將默認配置和風味的所有值合併並傳遞到aapt。 請參閱「基本」樣本。 在 「基本」 樣本:

defaultConfig { 
    ... 
    resConfig "en" 
    resConfigs "nodpi", "hdpi" 
} 

所以,請嘗試以下操作來實現你的要求爲:

productFlavors { 
    ... 
    frOnly { 
     resConfig "fr" 
    } 
    ... 
} 

請注意,您可能還需要包括*dpiportland等。還有。

答案是:Android Studio exports strings from support library to APK,感謝Primoz990

+0

這看起來很有用,但是您的發佈版本APK文件的大小有多少改進? – Sam

+0

@Sam我不記得,但它是很多。在添加此配置之前,我的APK充滿了大量本地化文件夾(值,*,...),我不想這樣做。 –

0

雖然OP已經清除他正在使用proguard,應用程序從3.8 MB到3.1 MB使用接受的答案,並通過proguard僅僅1.8 MB。我在我的應用程序級的build.gradle文件中使用這種配置:

buildTypes { 
     release { 
      minifyEnabled true 
      shrinkResources true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
} 
5

從24.2.0版本開始,V4支持庫has been split into several smaller modules

因此,除了使用shrinkResourcesproguardFiles之外,還要確保您僅使用應用程序所需的特定模塊。例如

如果您的應用程序只使用NotificationCompat,ContextCompat或ResourcesCompat等Compat實用程序。,請只使用compat模塊:

compile 'com.android.support:support-compat:24.2.0'