Android Studio最先接触的版本印象里是1.X版本,印象最深的用的最多的应该是1.3和1.5两个版本了,之前关于Android Studio的了解仅仅局限于在使用上,自从上年九月份离职到现在这家公司之后,很不幸再次开始了Eclipse的使用之旅,当然不幸中也是加深了我对Android Studio编译APK过大的理解,这里来源于我确实对Android Studio放不下的情怀,从入职我就开始高调的提倡IDE的切换,乃至到写这篇博客前夕,也算是落下帷幕了,这里我说下Eclipse项目迁移之后APK过大的一些心得。
Eclipse项目的迁移这里不再啰嗦了,可以自行网上搜索,我下边附上截图一张,以供参考。
这里补充一句,Import project(Eclipse ADT,Gradle,etc.),直接导入Eclipse项目就OK。
接下来咱们说重点问题,为什么同样的代码在Eclipse上打包的APK会远远小于Android Studio上的APK?
遇到问题我提倡一种精神,思路,遇到问题首先就是思路,解这个也是我运气不佳,正好赶上感冒,所以脑子有点局限性了,我一直把关注点看在了Android Studio的编译上,不管怎么说吧,最终却是确定了问题却是是Android Studio的编译问题,为此我查询了众多资料,不过局限于公司网络不让FQ问题。最终我只能凭借着大胆的猜测,Android Studio编译采用的Gradle,对比Eclipse的区别最简单,而且最有效的方法,解压对比APK。
一下是Eclipse编译的APK解压截图:
Android Studio截图:
通过对比也许大家会发现其实总的来说,除了res文件之外别的文件大小几乎是等同的,那么问题来了,res文件存放的全部是资源文件,那么咱们据需一探究竟,看是那块资源引起的如此大的区别。
追根溯源,看如下apk资源图片对比图,相同的资源在不同的apk中的大小:
很明显Android Sttudio进行打包之后,图片压缩比对比Eclipse要小的多。这也就是最终引起APK过大的最终原因了,也就应了我上述的猜想,Android Studio采用gradle编译的apk的编译问题,这个问题就是Gradle进行图片压缩的时候,压缩方式不同。
那么问题来了,如何解决这个问题那?
既然Gradle不能有效的压缩图片那么,那么是不是咱们可以自己手动压缩,当然答案是肯定的。
使用tinypng优化大部分图片资源:
tinypng是一个支持压缩png和jpg图片格式的网站,通过其独特的算法(通过一种叫“量化”的技术,把原本png文件的24位真彩色压缩为8位的索引演示,是一种矢量压缩方法,把颜色值用数值123等代替。)可以实现在无损压缩的情况下图片文件大小缩小到原来的30%-50%。
这里补充下tinypng支持png,jpg,.9图等压缩。
tingyng的去顶就是在压缩某些过度效果(带alpha)的图片时,图片会失真,这种图片可以将png图片转换成为下面的webp格式,可以在保证图片质量的前提下大幅度的缩小图片的大小
tinypng提供了开发接口供开发者开发属于自己压缩工具,不过这个东西收费,好在这东西对于普通用户来说tinypng为每个用户提供每个月图片免费压缩数量,这个对于我们而言已经足够了
使用WebP图片格式:
WebP是谷歌研发出来的一种图片的数据格式,他是支持有所压缩和无损压缩的图片文件格式,派生子图片编码格式VP8.根据google的测试,无所压缩后的WebP比PNG文件少了45%的文件大小,及时这个PNG文件经过其他压缩之后,webP依然还是可以减少28%的文件大小。木钱很多公司已经开始讲WebP应用到Android APP当做去,比如FaceBook,tencent,淘宝。WEbP相比PNG面向问题就是加载稍慢,不过现在只能硬件配置越来越高,这些差距也就微乎其微了。
假如你在APP中使用了WebP,出了在Android 4.0以上提供的原生支持职位,其他版本的可以使用官方提供的解析库webp-android-backport编译.SO使用。
同城UI提供的图片都是png或者是jpg格式,我们可以通过智图或者isparta将其他格式的图片转换成webP格式的isparta可实现批量转换,墙裂推荐!
使用tintcolor实现按钮的翻转效果:
通常按钮的正反旋转图片我们都是通过一张按钮正常的图片和一张按钮翻转图片,然后通过selector实现,两张图片除了透明度之前其他的都是重复的,在Android 5.0之后的版本可以通过tintcolor实现只提供一张图片按钮,在程序中实现反转效果,前提图片内容要是一样的,只是正反按钮的颜色不一样。