根据Andriod文档的“资源缩小”网页(here),您可以通过build.gradle文件使用以下行来最小化应用程序的大小:
android {
...
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
而且,他们说在使用它时,它还会告诉你在这个过程中保存了多少:
启用shrinkResources后,应显示构建应用程序 在构建过程中输出如下:
... 删除未使用的资源:二进制资源数据从2570KB减少到 1711KB:删除了33%
我无法找到这些问题的答案:
答案 0 :(得分:56)
让我们看看
使用Android-Studio本身创建已签名的应用时,在哪里可以找到已保存的内容以及删除/修改的文件的信息?
那些将在gradle日志中。在Android工作室内部,我相信这些显示在Messages
窗口(Android,Run,TODO窗口旁边)。
究竟是什么" shrinkResources"做那个" minifyEnabled"别' T'为什么" shrinkResources"取决于" minifyEnabled" ?
minify
运行ProGuard。 shrink
删除ProGuard标记为未使用的资源。
这些选项是否会影响图像文件的大小和/或质量?
没有!
不是Proguard负责缩小源代码吗?我问这个是因为它说'#34;你必须启用minifyEnabled才能打开代码收缩,"
ProGuard仅收缩代码; shrinkResources
它只是来自/res/
文件夹的内容。 shrinkResources
取决于ProGuard运行的日志输出。 ProGuard实际上是分析代码以了解未使用的内容的人。
修改强>
我刚刚发现了一篇非常好的博文。 CommonsWare在其他一些stackOverlow问题上发布了它:http://cyrilmottier.com/2014/08/26/putting-your-apks-on-diet/
它完全解释了你的后续问题:
为什么一个人会依赖另一个?
来自帖子:
Proguard在Java方面工作。不幸的是,它在资源方面不起作用。因此,如果不使用res / drawable中的图像my_image,Proguard只会在R类中删除它的引用,但会保留相关图像。
这意味着,shrinkResources
仅比较一个drawable是否在文件夹中而不在R
类。
答案 1 :(得分:24)
可以找到问题2和4的答案in this video from Android Dev Summit 2015以及有关此主题的其他一些有用信息。
所讨论要点的概述是:
仅当
market
为真时才会考虑
shrinkResources
minifyEnabled
缩小代码,而minifyEnabled
缩小未从代码中引用的资源默认情况下
shrinkResources
以shrinkResources
模式运行。 如果您将其切换为safe
,则可以手动提供strict
和tools:keep
标记,以影响资源缩减。
答案 2 :(得分:1)