Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android &引用;minifyEnabled“已启用”;vs";收缩资源“什么';有什么区别?如何获得节省的空间? 背景_Android_Build.gradle - Fatal编程技术网

Android &引用;minifyEnabled“已启用”;vs";收缩资源“什么';有什么区别?如何获得节省的空间? 背景

Android &引用;minifyEnabled“已启用”;vs";收缩资源“什么';有什么区别?如何获得节省的空间? 背景,android,build.gradle,Android,Build.gradle,根据Andriod documentations()的“资源缩减”网页,您可以通过build.gradle文件使用以下行最小化应用程序的大小: android { ... buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-a

根据Andriod documentations()的“资源缩减”网页,您可以通过build.gradle文件使用以下行最小化应用程序的大小:

android {
    ...

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
而且,他们说,当使用它时,它还会告诉你在这个过程中节省了多少:

启用shrinkResources时,构建应用程序时应显示 生成过程中的输出如下所示:

。。。 删除未使用的资源:二进制资源数据从2570KB减少到 1711KB:删除33%

问题 我无法找到这些问题的答案:

  • 当使用Android Studio自己创建签名应用程序时,我在哪里可以找到保存了多少以及删除/修改了哪些文件的信息
  • “shrinkResources”到底做了什么而“minifyEnabled”没有?为什么“收缩资源”依赖于“minifyEnabled”
  • 这些选项是否会影响图像文件的大小和/或质量
  • Proguard不负责缩减源代码吗?我这样问是因为它说“你必须启用minifyEnabled才能打开代码收缩功能,”
  • 让我看看

    当使用Android Studio自己创建签名应用程序时,我在哪里可以找到保存了多少以及删除/修改了哪些文件的信息

    这些都会在gradle日志中。在Android studio中,我相信这些信息会显示在
    消息
    窗口中(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的答案以及有关此主题的一些其他有用信息

    所讨论的要点概述如下:

    • 只有当
      minifyEnabled
      为true时,才会考虑
      shrinkResources

    • minifyEnabled
      收缩代码,而
      收缩资源
      收缩未从代码引用的资源

    • 默认情况下,
      shrinkResources
      safe
      模式运行。 如果将其切换到
      strict
      ,则可以手动提供
      tools:keep
      tools:discard
      标志以影响资源收缩

    • shrinkResources有助于减少生成的APK的维度,剥离所有未使用的资源
    • minifiedEnabled只是运行Proguard,它帮助android插件在不使用代码的情况下打包APK,以缩小APK

    shrinkResources会删除所有未使用的资源,因此不会出现质量问题或其他问题。mimifyEnabled不会将其删除。我认为强制使用mimifyEnabled来列出未使用的资源。所以单独使用“minifyEnabled”并没有任何作用?“收缩资源”不会收缩任何东西吗?如何查看已保存的空间?哪些文件被删除了?我想是的,正如你在这里读到的使用收缩功能,你一定启用了mimifytrue。这是因为mimifyEnabled会删除未使用的代码,而shrinkResources会删除未使用的资源(大部分或全部在未使用的代码中调用)。proguard不负责删除未使用的代码吗?minifyEnabled会启用proguard,它会删除未使用的类/代码,shrinkResources会删除未使用的资源(PNG,xmls,主要是由您没有充分利用的库引入的)。因此,“shrinkResources”一点也不收缩。应该被称为“excludeUnusedResources”,不是吗?如果一个与资源相关,一个与源代码相关,为什么“shrinkResources”依赖于“minifyEnabled”呢?另外,对于节省的MB数量,我在那里看不到(已测试)。我还检查了“Gradle控制台”(右下角).是的,也许这不是最好的命名,但我们能做什么呢?也许在某些版本中他们会改变它。这取决于
    minify
    ,因为这是对未使用资源进行分析的地方,
    shrink
    只是在删除。关于日志,我不知道。根据您指出的文档,如果您通过命令行构建,您可以明白了。关于这个要求,但是既然一个不同于另一个(源代码与资源),为什么一个会依赖另一个呢?另外,你能在Android Studio上试用一下,看看你是否找到了日志吗?我在那里尝试了这么多东西…@Shubh ProGuard仍然做ProGuard做的所有事情(删除未使用的java代码、模糊代码、opmise类等)。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。只有链接才能回答问题