这两天在研究应用的热修复,热修复的原理比较复杂昨天看了一天也没弄明白,不过大致流程弄明白了,有想研究热修复的可以参考鸿神的csdn:
http://blog.csdn.net/lmj623565791/article/details/49883661 内容比较长,大家要有耐心哦。
其中有一个class->jar->dex的过程,
将class文件弄成jar(根据自己的需求将class文件放到自己的指定目录下)生成jar的指令如下: path.jar是你要生成的jar名称 后面是要生成jar的文件目录
在class文件生成jar成功后,下面就需要进行下一步了jar->dex了,在这我们还需要dx工具,在sdk的build-tools里面有dx工具,但是不知道执行完命令没有生成path_dex.jar
所以推荐大家自己下载一个dx工具:
这是下载链接:http://download.csdn.net/detail/qxs965266509/9375139
用法也有详细说明。
就在jar包换成dex的jar包的时候,我遇到了大坑:
指令如下: path_dex.jar是转换后的jar path.jar是原始的jar
dx --dex --output=path_dex.jar path.jar
错误提示如下:
虽然path_dex.jar生成了,但是我通过反编译之后,发现里面少了很多东西。出现这个问题的原因好像是jdk版本和android studio编译之后生成class文件的jdk版本不一致,至于为什么不一致,我也想说,这是什么鬼。不过还是有解决办法的,我们可以将我们的class文件强制转换成1.6版本,然后再走class->jar->dex流程就可以了。
javac -source 1.6 -target 1.6 xx.java(xx代表了你的java文件名称)
当然也可以同时组合其它的命令:-d是生成包名的指令
我们可以忽略上面的警告,因为对我们没有影响。现在我们再进jar->dex转换的时候,效果如下:
ok~