从.java到.dex文件(命令行,基础HelloWorld.java示例。)
2015-11-10 14:20
926 查看
前言:dex文件是Android平台上可以执行的文件。每个APP的都作为一个Dalvik虚拟机实例,在自己进程中运行.Davik虚拟机的可执行文件格式是.dex.Java源代码编译成.class文件后,通过Android SDK 中的 “dx” 工具转换为Dalvik虚拟机可执行的.dex文件。每个.class文件只包含一个class,但是一个.dex文件可以包括多个class。
需要工具:
1. jdk 1.6(不要使用过高版本,否则在使用sdk将.class转换为.dex文件时会报错,作者使用1.8版本,果然报错了 (>|.|<))
2. sdk (作者直接下载了adt-bundle-windows-x86,里面已经集成eclipse,但是打开文件夹,查看sdk文件夹里面就有需要的build_tools工具了)
3. 010 Editor 用它来查看dex文件内的机器码。
4. dex2jar 反编译工具,将dex文件打成jar包。
5. jd-gui 将用dex2jar做好的jar包用这个工具打开,就可以查看源码啦!
工具下载:http://pan.baidu.com/s/1kTyDMgZ
正文开始:
第一步: 编写一个HelloWorld的.java程序,将这个程序编译成.class文件。
在cmd下敲入 -javac Hello.java (必须配置好jdk的环境变量哈,不会百度一下。)
执行完成后,在相应的文件夹下会生成对应的.class文件。(我在build-tools内生成了一个Hello.class)
第二步: 使用Android SDK内的build_tools内的dx工具,将.class文件转换成.dex文件。
首先这步操作必须确定你已经把sdk的build_tools内的dx工具放到你的电脑里了 !!!
在adt-bundle-windows-x86_64-20140702\sdk\build-tools内找到dx.bat,这步才能顺利执行。dx.bat路径每个人装的可能不一样。我已经将Hello.class文件移到了和dx.bat统一的文件夹下。
进入build-tools文件夹 在cmd下敲入 cd C:\work\Android\adt-bundle-windows-x86_64-20140702\sdk\build-tools
运行dx指令,将.class转换为.dex dx --dex --output=Hello.dex Hello.class
执行完这两句话后在该文件夹下会生成Hello.dex文件。
第三步: 此时可以使用010 Editor打开Hello.dex文件。如图,已经可以用这个简单的.dex文件源码了解dex的结构了。(解dex的结构参考:http://bbs.pediy.com/showthread.php?t=184761)
第四步: 将.dex文件转换为jar包。
下载dex2jar 工具,cmd 内输入 --cd C:\work\Android\dex2jar-0.0.9.15 (你安装dex2jar的位置。)
把你的Hello.dex文件也放在C:\work\Android\dex2jar-0.0.9.15这个路径下。
cmd 内输入 --dex2jar Hello.dex 结果如下图时,会在dex2jar-0.0.9.15下多出一个Hello_dex2jar.jar包。
第五步: 使用jd-gui将Hello_dex2jar.jar打开就可以查看源码了。
以上整个流程 .java----.class----.dex----.jar----(查看源码了)。(实际中,APK内可通过改后缀.zip,解压缩,找到整个应用程序的dex文件。而dex可以反编译出程序的内容。正式发布的app是一定会对dex文件进行处理的。)
需要工具:
1. jdk 1.6(不要使用过高版本,否则在使用sdk将.class转换为.dex文件时会报错,作者使用1.8版本,果然报错了 (>|.|<))
2. sdk (作者直接下载了adt-bundle-windows-x86,里面已经集成eclipse,但是打开文件夹,查看sdk文件夹里面就有需要的build_tools工具了)
3. 010 Editor 用它来查看dex文件内的机器码。
4. dex2jar 反编译工具,将dex文件打成jar包。
5. jd-gui 将用dex2jar做好的jar包用这个工具打开,就可以查看源码啦!
工具下载:http://pan.baidu.com/s/1kTyDMgZ
正文开始:
第一步: 编写一个HelloWorld的.java程序,将这个程序编译成.class文件。
在cmd下敲入 -javac Hello.java (必须配置好jdk的环境变量哈,不会百度一下。)
执行完成后,在相应的文件夹下会生成对应的.class文件。(我在build-tools内生成了一个Hello.class)
第二步: 使用Android SDK内的build_tools内的dx工具,将.class文件转换成.dex文件。
首先这步操作必须确定你已经把sdk的build_tools内的dx工具放到你的电脑里了 !!!
在adt-bundle-windows-x86_64-20140702\sdk\build-tools内找到dx.bat,这步才能顺利执行。dx.bat路径每个人装的可能不一样。我已经将Hello.class文件移到了和dx.bat统一的文件夹下。
进入build-tools文件夹 在cmd下敲入 cd C:\work\Android\adt-bundle-windows-x86_64-20140702\sdk\build-tools
运行dx指令,将.class转换为.dex dx --dex --output=Hello.dex Hello.class
执行完这两句话后在该文件夹下会生成Hello.dex文件。
第三步: 此时可以使用010 Editor打开Hello.dex文件。如图,已经可以用这个简单的.dex文件源码了解dex的结构了。(解dex的结构参考:http://bbs.pediy.com/showthread.php?t=184761)
第四步: 将.dex文件转换为jar包。
下载dex2jar 工具,cmd 内输入 --cd C:\work\Android\dex2jar-0.0.9.15 (你安装dex2jar的位置。)
把你的Hello.dex文件也放在C:\work\Android\dex2jar-0.0.9.15这个路径下。
cmd 内输入 --dex2jar Hello.dex 结果如下图时,会在dex2jar-0.0.9.15下多出一个Hello_dex2jar.jar包。
第五步: 使用jd-gui将Hello_dex2jar.jar打开就可以查看源码了。
以上整个流程 .java----.class----.dex----.jar----(查看源码了)。(实际中,APK内可通过改后缀.zip,解压缩,找到整个应用程序的dex文件。而dex可以反编译出程序的内容。正式发布的app是一定会对dex文件进行处理的。)
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件