自2015年QQ空间Team放出安卓App热补丁动态修复技术介绍之后,各种热修复技术层出不穷,越来越多的项目也开始尝试这种新技术,也有了一些相对稳定的框架出现。本文主要讲解如何在Eclipse中利用Ant构建工具产生多个dex文件,从而为热修复做准备。若有问题恳请指正,欢迎评论交流!
一般情况下Apk解压后里面都会包含一个classes.dex文件,该文件里面包含了应用的所有.class文件,当创建多个dex文件,并指定某些.class到指定dex文件中就是dex多分包。简言之,一个Apk包含多个.dex文件。
dex多分包的应用场景:
在ADT中对Android项目进行多分包需要借助Ant构建工具,通过修改构建策略和规则产生多分包,如果你对Ant构建不是很了解可以参考http://blog.csdn.net/magic_jss/article/details/52504131;该步骤讲解主要是根据前篇文章的修改。
Ant打包主要流程:
在第5步,将.class文件转化成.dex文件,在这里可以修改打包策略产生多个dex文件,修改如下:
主包:classes.dex主要存放Activity、Application等入口类。
从包:classesn.dex主要存放业务逻辑类,可能出现bug的类,后期修复的类。
c.txt 将该文件里面的class文件打包到classes.dex(主包),一般情况下要保证该文件里面的类不会出现问题。
在第7步,需要将主包classes.dex添加到未签名的apk中去。
由于aapt命令在添加或者删除的时候不能是绝对路径,而是相对路径,因此需要拷贝文件到项目的根目录下面,因为我们的脚本是在根目录下面,这样在运行aapt的时候,可以直接操作dex文件了。
添加其他dex文件到未签名Apk中去。这里需要用到ant-contrib-1.0b3.jar,下载地址http://download.csdn.net/detail/magic_jss/9628968;将该Jar放到Ant解压目录的lib目录下面,还需要在build.xml中指定ant-contrib-1.0b3.jar的路径。
其他步骤就是对apk进行签名,对签名的apk包进行字节对齐,和之前文章一样不在赘述。
最后通过cmd进入到该项目目录下执行 ant make (make为自定义)命令即可进行打包。由于项目中我只打包了两个dex,即classes.dex、classes2.dex,查看dex文件内容如下: classes.dex
classes2.dex