22

如何防止 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%,或者比 my/PNGOUTWin 优化大小高 30%。

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

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

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

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

4

6 回答 6

38

最后有一种官方方法可以使用 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

于 2015-04-23T20:16:04.193 回答
21

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

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

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

于 2017-07-01T04:56:15.723 回答
2

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

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

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

于 2012-10-17T09:12:08.633 回答
2

Android Studio:从 G​​radle Android 插件 1.0.0 开始:

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

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

<target name="-crunch">
   <echo message="This will skip PNG optimization"/>
</target>
于 2015-03-08T17:03:20.797 回答
2
 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

于 2020-05-11T04:35:54.037 回答
0

Google 最近在 Android SDK 构建工具的 aapt 0.9.1 中引入了新的 PNG 处理器,解决了 aapt 优化后 PNG 大小增加的问题。

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

android {
    ..
    ..

    aaptOptions.useAaptPngCruncher = false
}

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

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

于 2014-03-27T16:53:32.137 回答