【问题标题】:Disable Android resource / image / PNG optimization禁用 Android 资源/图像/PNG 优化
【发布时间】:2012-10-07 10:46:56
【问题描述】:

如何防止 Android“构建过程”优化 .png 图像?

我有一个带有以下 res 目录的 Android 项目:

- /res/
- /res/drawable
- /res/drawable-hdpi
- /res/drawable-hdpi-v5
- /res/drawable-ldpi
- /res/drawable-ldpi-v5
- /res/drawable-mdpi
- /res/drawable-mdpi-v5

这些目录包含许多 .png 文件。我用PNGOUTWin优化了PNG尺寸,整体尺寸减少了20%以上。当我构建 .apk 文件时,图像被构建过程“优化”,现在整体大小比初始大小高 10%,或者比我的/PNGOUTWin 优化大小高 30%。

我的目标是减小 .apk 的大小,即使它会影响最终的性能、内存需求等。如何防止“构建过程”优化 .png 图像?

我的目标是 Android 2.2 及更高版本。

P.S.:我目前正在从 Eclipse 构建我的 Android 项目,但稍后我将切换到自动构建(Ant?)。

关于 JPG 图片的注意事项: JPG 不起作用,因为它们没有透明度。

【问题讨论】:

    标签: android android-image android-resources android-build


    【解决方案1】:

    终于有一种官方方法可以使用 Gradle 禁用 PNG 压缩器,这里还没有提到:

    1. 编辑 main build.gradle 以要求 gradle 版本 1.1.3(或更高版本):

      buildscript {  
          repositories {  
              mavenCentral()  
          }  
          dependencies {  
              classpath 'com.android.tools.build:gradle:1.1.3'  
          }  
      }  
      
    2. 在各个应用的 build.gradle 部分 android {} 中,插入:

      aaptOptions {  
          cruncherEnabled = false  
      }  
      

    参考: https://code.google.com/p/android/issues/detail?id=65335

    【讨论】:

    • 哇,这只是为我的调试构建缩短了大约 1 分钟的构建时间
    • 是否可以仅用于调试构建?也许它可以减少构建时间
    【解决方案2】:

    指定 PNG 处理现在是 BuildType 属性,在调试版本中默认禁用:

    android {
        …
        buildTypes {
            release {
                crunchPngs false // or true
            }
        }
    }
    

    注意:可从Android Studio 3.0 Canary 5 获得。

    【讨论】:

    • 谢谢。在浪费了很多时间之后,您唯一的答案对我有所帮助。
    • 乐于帮助您。谢谢:)
    【解决方案3】:

    如 Android 文档中所述:http://developer.android.com/guide/topics/graphics/2d-graphics.html#drawables

    注意:放置在 res/drawable/ 中的图片资源可能会在加载过程中通过 aapt 工具自动进行无损图片压缩优化 构建过程。例如,不需要的真彩色 PNG 超过 256 种颜色可以转换为带有颜色的 8 位 PNG 调色板。这将产生相同质量的图像,但 需要更少的内存。 因此请注意,图像二进制文件放置在 此目录可以在构建期间更改

    因此,如果您想减小应用程序的大小,您应该减少 PNG 文件的颜色深度(这很有帮助)或尽可能切换到 .JPG 文件。 p>

    【讨论】:

    • 带有 alpha 通道的 8 位 PNG 文件 -- 漂亮的阴影,多种颜色,大小 200x200 看起来很难看。不完美。目前使用 Photoshop + Web Image Guru + PNGOUTWin 后期处理。
    • 是的,你不能有渐变效果、阴影效果等。就像 JPG 中的 PNG 一样,所以只有我提到尽可能使用 jpg。
    • 接受您的回答,因为确实,看起来不错的 8 位 PNG 格式的图像并未通过“构建”过程进行优化。但是我最终使用了 Ant + 7-zip + 原始 PNG。
    • 这个答案根本没有回答问题,我不明白它是如何被接受的
    【解决方案4】:

    Android Studio:自 Gradle Android 插件 1.0.0 起:

    android {
    ...
      aaptOptions {
        useNewCruncher false
      }
    ....
    }
    

    Eclipse:覆盖在您的 build.xml 中编写此内容的关键任务:

    <target name="-crunch">
       <echo message="This will skip PNG optimization"/>
    </target>
    

    【讨论】:

    • 我确认您的 Eclipse 示例也适用于基于 Ant 的命令行工作流;通过将代码包含在&lt;project&gt; 标记中,并将它们放在custom_rules.xml 中,放置在项目的根目录中——我最初认为覆盖不起作用(因为PNG 不会被复制到bin/res 文件夹),但是事实证明,在这种情况下,工具链只会使用原始 res 文件夹中的 PNG。
    【解决方案5】:
     buildTypes {
            release {
                crunchPngs false // or true
            }
        }
    

    在 android 块的行上方添加

    在 ionic/Cordova 项目中:root_folder_Of_App/platforms/android/app/build.gradle

    在 Android 项目中:app/build.gradle

    欲了解更多信息,请访问:https://androidstudio.googleblog.com/2017/06/android-studio-30-canary-5-is-now.html

    【讨论】:

      【解决方案6】:

      Google 最近在 Android SDK 构建工具中引入了 new PNG processor in aapt 0.9.1,它解决了经过 aapt 优化后 PNG 大小增加的问题。

      通过此次更新,Android Studio 和 Gradle 现在可以在您的 build.gradle 配置文件中进行以下更改,从而在 PNG 处理器之间切换:

      android {
          ..
          ..
      
          aaptOptions.useAaptPngCruncher = false
      }
      

      通过添加这一行,aapt 使用新的 PNG 处理器检查“优化的”PNG 文件是否小于原始 PNG 文件。我能够在编译的 APK 中减少 4.8 MB,并且在新的构建配置中没有遇到任何错误/问题。

      更新:这在 Android Studio 的更高版本中已被弃用。请参考ChrisG提供的答案。

      【讨论】:

      • 我认为这已经过时了,使用@ChrisG的答案
      猜你喜欢
      • 2015-08-18
      • 1970-01-01
      • 2013-11-11
      • 2013-04-15
      • 2011-09-14
      • 2010-09-13
      • 1970-01-01
      • 2015-09-09
      • 2017-05-07
      相关资源
      最近更新 更多