Col*_*lis 61 performance android gradle android-resources
我链接到我的应用程序的第三方库通常包含我的应用程序未使用的资源文件,因此最终导致我的APK膨胀.
例如,包括Google Play服务库,但不使用登录按钮功能; 所有这些图像和布局资源最终都在我的最终版本中.
由于这些资源包含在已编译的库中,如何从构建中删除它们?
Col*_*lis 71
这个答案总结自Remove Unused Resources,它解释了如何使用minifyEnabled和shrinkResources,这些内容在官方文档页面中有更深入的介绍.
第三方库包含应用程序代码路径不使用的资产是一个常见问题,删除这些资产以便为用户生成较小的APK文件至关重要.值得庆幸的是,最新版本的Gradle和Android Studio提供了一个解决方案来提供帮助.
通过在Gradle配置中将minifyEnabled和shrinkResources设置为true,系统将从应用程序中删除未使用的资源.
android {
...
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
Run Code Online (Sandbox Code Playgroud)
请务必注意,删除未使用的资源需要设置minifyEnabled标志.此标志(如删除未使用的代码中所述)将触发ProGuard删除应用程序未使用的代码路径.这是从包含的库中删除资源的重要步骤.如果未删除代码路径,则编译器仍会认为资源是由现有代码路径引用的,并且不会正确删除它们.
值得注意的是,这是一个非常广泛的系统.例如,它将查看代码中的特定字符串常量,以及查找file:///….要保留的任何URL的各种res/raw资源.它甚至可以分析CSS,HTML和JavaScript文件.
现在,这里可能存在误报或漏报的情况.当您想要相反的行为时,资产可能会被削减或保留.(公平地说,资源缩减往往过于紧张......)为了调整这一点,您可以添加工具:keep和tools:根据res/raw/keep.xml文件中的约定,丢弃属性以定义所需的行为.
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep= "@layout/l_used*_c, @layout/l_used_b*"
tools:discard="@layout/unused2"
/>
Run Code Online (Sandbox Code Playgroud)
如果shrinkResources由于某些原因无法使用,至少我们可以使用resConfig删除我们不支持的语言.
defaultConfig {
resConfig "en"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4784 次 |
| 最近记录: |