Android &引用;minifyEnabled“已启用”;vs";收缩资源“什么';有什么区别?如何获得节省的空间? 背景
根据Andriod documentations()的“资源缩减”网页,您可以通过build.gradle文件使用以下行最小化应用程序的大小:Android &引用;minifyEnabled“已启用”;vs";收缩资源“什么';有什么区别?如何获得节省的空间? 背景,android,build.gradle,Android,Build.gradle,根据Andriod documentations()的“资源缩减”网页,您可以通过build.gradle文件使用以下行最小化应用程序的大小: android { ... buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-a
android {
...
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
而且,他们说,当使用它时,它还会告诉你在这个过程中节省了多少:
启用shrinkResources时,构建应用程序时应显示
生成过程中的输出如下所示:
。。。
删除未使用的资源:二进制资源数据从2570KB减少到
1711KB:删除33%
问题
我无法找到这些问题的答案:
消息窗口中(Android、Run、TODO窗口旁边)
“shrinkResources”到底做了什么而“minifyEnabled”没有?为什么“收缩资源”依赖于“minifyEnabled”
minify
运行ProGuard<代码>收缩
删除ProGuard标记为未使用的资源
这些选项是否会影响图像文件的大小和/或质量
不
Proguard不负责缩减源代码吗?我这样问是因为它说“你必须启用minifyEnabled才能打开代码收缩功能,”
ProGuard仅收缩代码<代码>收缩资源
这只是/res/
文件夹中的内容<代码>收缩资源取决于要运行的ProGuard日志输出。ProGuard是真正分析代码以了解哪些代码未使用的人
编辑:
我刚找到一篇很好的博客文章。Commonware将其发布在下面的其他问题上:
它完美地解释了您的后续问题:
为什么一个要依赖另一个
从职位:
Proguard在Java端工作。不幸的是,它在资源方面不起作用。因此,如果未使用res/drawable中的图像my_图像,则Proguard仅在R类中剥离其引用,但保留关联的图像
这意味着,
shrinkResources
仅在文件夹中有可绘制文件,而不在R
类中时进行比较。可以找到问题2和4的答案以及有关此主题的一些其他有用信息
所讨论的要点概述如下:
- 只有当
为true时,才会考虑minifyEnabled
shrinkResources
收缩代码,而minifyEnabled
收缩未从代码引用的资源收缩资源
- 默认情况下,
以shrinkResources
模式运行。 如果将其切换到safe
,则可以手动提供strict
和tools:keep
标志以影响资源收缩tools:discard
- shrinkResources有助于减少生成的APK的维度,剥离所有未使用的资源
- minifiedEnabled只是运行Proguard,它帮助android插件在不使用代码的情况下打包APK,以缩小APK
minify
,因为这是对未使用资源进行分析的地方,shrink
只是在删除。关于日志,我不知道。根据您指出的文档,如果您通过命令行构建,您可以明白了。关于这个要求,但是既然一个不同于另一个(源代码与资源),为什么一个会依赖另一个呢?另外,你能在Android Studio上试用一下,看看你是否找到了日志吗?我在那里尝试了这么多东西…@Shubh ProGuard仍然做ProGuard做的所有事情(删除未使用的java代码、模糊代码、opmise类等)。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。只有链接才能回答问题