转载请注明出处:http://www.jianshu.com/p/cc17d18c3447

本篇文章翻译自谷歌出的优化视频里面的光头佬(Colt McAnlis),原文地址需翻墙, 以下正文:

答案是:会的,安卓的工具链确实会在构建期间对PNG做一些优化。你可以看看官方文档。

AAPT工具可能会在构建期间自动对res/drawable/文件夹下的图片资源做无损压缩。例如,一张真彩色(RGB)的PNG图片,如果它实际需要的颜色不大于256种,那么就有可能会被转换成一张8位的调色板图片(PNG8)。转换之后的图片质量未减却只占用更小的内存。所以需要注意一点,在这个目录下的二进制图像在构建期间可能会被改变。

Hmm..这倒不错,<256颜色的的图片会被转换成索引模式,但这就完了吗?欲知详情,阅读源码才知道。

APPT工具对PNG图片做了什么

Android系统其中的一个好处是它的大部分工具都是开源的,我们可以直接看AAPT的源码,看看它到底做了什么。在png.cpp文件里定位到analyze_image方法,我们可以看到它会做三个优化检查:

  1. 每个像素都是 R == G == B (grayscale 灰度)
  2. 每个像素都是 A == 255 (opaque 全透明)
  3. 是否有超过256种不同的RGBA颜色

所以APPT会加载PNG图片,判断它是否可以被转成灰度格式的图片,判断它是否是全透明的,或判断它是否可以被转成一张索引图。这就是AAPT干的事。

这些检测是很有意义的,因为实际上APK里的大部分PNG文件通常都是灰度图,全透明,或有限颜色的图片。在有能力知道这些图片的格式,并把它们转成更小的PNG文件,何乐而不为呢。

能否让APPT做得更多?

可能更有趣的是,APPT有哪些事它没有做:

A: 那些会改变图片视觉效果的处理(可能会降低图片的质量)
B: 那些比改变色彩模式更先进的处理

这就是为什么我上一篇文章讨论使用更先进的工具的原因。使用这些先进的工具帮你减少PNG文件的大小,这是AAPT没办法帮你做的。

警告

重要的事情说三遍:当今的数据压缩算法,递归数据压缩是不可能的!!!递归数据压缩是不可能的!!!递归数据压缩是不可能的!!!。如果你对数据压缩过一次,然后想再压缩一次,最好的情况是数据大小不变,但通常情况会得到一个更大的数据。

所以,如果你在把PNG图片扔给AAPT前已经做了一次优化,那么最终可能会变得更大,大概大10%。这似乎不太正常:你都已经花了那么多时间压缩了你的PNG图片了,它们后来怎么还能变大呢:\

解决这个问题的办法是在Gradle文件里用cruncherEnabeled选项去掉对PNG文件的处理:

aaptOptions {cruncherEnabled = false
}

这个选项会关掉APPT对你APK里非.9图片的优化。(我还没发现APPT会对.9图片做什么处理…)

最后总结,你可以用自己的优化工具尽可能的把PNG优化得更小,然后记得关掉APPT工具的处理就好。

PS:由于文人水平有限,如有翻译得不好的地方,请留言讨论。
PPS:CSDN的图片注释没显示出来,可以到我简书的博客看。

Android的APPT工具会优化PNG吗?相关推荐

  1. Android 性能监测工具,优化内存、卡顿、耗电、APK的方法

    导语     安卓大军浩浩荡荡,发展已近十个年头,技术优化月新日异,如今 Android 9.0 代号P  都发布了,Android系统性能已经非常流畅了.但是,到了各大厂商手里,改源码自定系统,使得 ...

  2. android使用工具性能优化

    简介 本文记录使用工具来对app进行优化过程,主要包括UI界面优化.内存优化.代码优化以及电量优化:各个优化模块是相互关联的,各个模块优化后才能达到app整体的性能提升. UI界面优化 界面优化方面主 ...

  3. Android开发常用工具,编译调试工具,性能优化工具,工具集

    分析具体耗时的Trace view;布局复杂度工具Hierarchy View;应用启动时间;Memory.CPU.Network分析;静态代码检查工具Lint;程序稳定性monkey.adb调试桥. ...

  4. 【Android 命令行工具】Android 命令行工具简介 ( 官方文档 | SDK 命令行工具 | SDK 构建工具 | SDK 平台工具 | 模拟器工具 | Jetifier 工具 )

    文章目录 一.官方文档 二.Android 命令行工具简介 1.SDK 命令行工具 2.SDK 构建工具 3.SDK 平台工具 4.模拟器工具 5.Jetifier 工具 一.官方文档 Android ...

  5. Android O 7.0 启动优化的一些思路

    启动优化其实是一个比较大的命题,在一些特地的场景下,快速启动有比较强烈的需求,这篇博客主要简单的介绍一些在android O平台上的进行启动优化的思路与想法. 而优化启动的一个很重要的东西就是如何来准 ...

  6. Android安全系列工具

    取证工具 bandicoot - 一个Python工具箱,用于分析手机元数据.它提供了一个完整,易于使用的环境,数据科学家分析手机元数据.只需几行代码,加载数据集,可视化数据,执行分析和导出结果. A ...

  7. Android常用的工具类

    2019独角兽企业重金招聘Python工程师标准>>> 最新最准确内容建议直接访问原文:Android常用的工具类 主要介绍总结的Android开发中常用的工具类,大部分同样适用于J ...

  8. Android App包瘦身优化实践

    随着业务的快速迭代增长,美团App里不断引入新的业务逻辑代码.图片资源和第三方SDK,直接导致APK体积不断增长.包体积增长带来的问题越来越多,如CDN流量费用增加.用户安装成功率降低,甚至可能会影响 ...

  9. Android 基本测试工具的使用

    Android 基本测试工具的使用和无线学习介绍 1,日志查看工具 1)DDMS Android测试中,使用最多的日志查看工具就是DDMS了. ddms可以从两个地方打开,1,Eclipse的的ddm ...

最新文章

  1. 神经网络之nlp的深度思考
  2. nyoj1307Linux的文件权限对不对
  3. 天锋w2019_什么样的商务手机才显得高端?这款天锋W2019可能适合你
  4. 50行代码,带你理解梯度下降法(Gradient Descent Method)
  5. sentinel卫星_IKONOS卫星 遥感影像解译数据 波段
  6. android怎样判断插入数据是否成功_Android 端 V1/V2/V3 签名的原理
  7. Python菜鸟入门:day08函数概念
  8. python distance matrix_Python 矩阵转置的几种方法小结
  9. Toontrack EZbass for mac - 虚拟低音音频插件
  10. 双击IE出现打开方式解决办法
  11. opencv java教程_详解OpenCV For Java环境搭建与功能演示
  12. windows | RDPWrap 远程桌面登录增强工具,长期提供多版本 rdpwrap.ini配置文件 [可灵活设置多人同时登录、一键改变配置]
  13. no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature
  14. android 强制锁屏app,自制力app强制锁屏
  15. 基本的信号——矩阵脉冲信号(门函数)
  16. 当前最火直播APP开发优化问题
  17. 致刚就业迷茫的你和寄语大学毕业生--技术读者
  18. javase printwriter 打印流
  19. matlab图像分类器,一个用BoW|Pyramid BoW+SVM进行图像分类的Matlab Demo
  20. 02-Vue基础之条件渲染和列表渲染

热门文章

  1. 对话印奇:我们所坚持的不会改变,旷视跳出企业科研“周期律”
  2. 第三集 情陷美丽青海湖,缘定小镇黑马河
  3. 中英文标点符号切换的组合键_最全的键盘各键及组合键功能说明,好好学习
  4. 设备树下的 platform 驱动开发框架
  5. springMVC中 Controller层为什么可以用map来传输数据
  6. Could not acquire image ID or digest following build
  7. 【英语释疑】et al. 的发音以及全称
  8. 【ssh出错】Unable to negotiate with XXX: Their offer: ssh-rsa
  9. 孢子框架-互联网金融平台微服务架构设计(转)
  10. 乐鑫 AT 固件初体验 - ESP32