本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/583b9e3ee8992c2c2df6e6ac
导语
早在去年10月份,facebook就发布了介绍redex的文章,这个据说可以直接对apk做处理,既提高启动性能,又可减少安装包的利器让安卓开发者们都心动不已。直到今年4月,redex终于开源了,我们也第一时间对redex做了研究(有观众可能要说我骗人,这都11月了怎么还第一时间呢?好把这个总结是拖了很久才写),虽然由于坑多,最终没有接入到项目构建中,但受Interdex启发,在应用冷启动速度优化方面有了新的收获。
PS:本篇提到的冷启动速度优化,不包括Android 5.0及以上系统
一、redex的使用与坑
1.安装与使用
使用redex的第一个坑就是环境。很遗憾的是这个工具不支持windows系统(用mac开发的壕请忽略),只好装虚拟机来跑ubuntu。解决了系统,就可以按照github上的官方指引一步步来了,这里需要安装茫茫多的依赖库和解决若干环境问题,幸好各种典型issue已经有了解决方案,这里不再赘述。
2.优化原理与配置
Redex的优化项众多,并且可以很方便的修改配置文件来选择需要执行的优化,默认的配置文件如下
根据官方的介绍文档,redex的优化主要有以下几项:
A.内联。
简单说就是去除一些多级调用的中间层级,举个例子:
func1 -> static func2 -> static func3
优化后就是
func1 -> static func3
这样可以减少函数调用时间和字节码。除了静态方法调用,对象引用也有类似优化。
B.删除无用代码,移除空类。
C.对于只有一个实现类的接口或父类,直接用实现类代替。
D.SynthPass
翻译不能,官方例子,内部类B访问外部类A的private static变量,compile后其实是通过生成额外的acces方法来帮助内部类访问外部类私有成员。这个优化可以去除额外生成的字节码,方法相当于把变量的作用域改成public。
E.字符串缩减,包括提供字节码