写这个系列文章是想了很久但是一直没有时间付诸行动,趁着这两天假期还没有结束,
赶紧动笔,怕上班了就没有时间再静下心来写这些文章,所以有点赶,表现在系列文章的
内容安排上就不是很合理,有些内容还需要丰富,但是聊胜于无吧,先写下再修改,如果
有一些反馈也可以根据反馈来修改。好了,开始第二篇文章。
这篇文章可以成为dx的HelloWorld,在这篇文章里我会介绍如果将一个java文件编译
成一个dex文件。ok,,go!
step1: 准备java文件,文件名HelloWorld.java,内容如下
public class HelloWorld {public void sayHello() {System.out.println("Hello World!");}} 多么熟悉的HelloWorld 🙂
step2:编写脚本,内容如下:
mkdir classesjavac -d classes src/*.javadx -JXmx500m –debug –dex –no-optimize –positions=none –no-locals \–dump-to=classes.lst –output=classes.dex classeszip test.jar classes.dex 这里需要做一些解释,首先利用javac编译java源文件,生成class文件,然后利用dx将
class文件转换成dalvik指令,并打包生成classes.dex,最后将dex打包成jar包。虽然只是
短短的几句话,但是dx进程的内部逻辑其实非常复杂,后续我会单独写一篇文章介绍dx的
过程。简单总结一下上面的编译过程:
.java ————-> .class ———-> .dex javac dx
对应的逆向过程如下:
.java <————- .class <———— .dex
JD-GUI dex2jar
step3: 执行上述脚本就会生成classes.dex文件
这篇文章主要是通过脚本来介绍java to dex的过程,后续文章会详细介绍dx的过程,以及dex
文件的结构。
走过的路成为背后的风景,不能回头不能停留,若此刻停留,