Android: .java文件转.dex和java字节码

一、.java文件转.dex

  1. 首先将 .java 文件转成 .class 文件(例如:Hello.java)
    javac Hello.java —> 得到Hello.class
    [这里有一个坑,请大家注意:如果你的java版本是1.7 或 1.8的话,在转dex文件的时候很有可能会报错,请使用如下命令:javac -source 1.6 -target 1.6 Hello.java]
    还有如果你的java文件引用了别的jar包你的使用:javac -cp jar路径 Hello.java
  2. .class 文件 转为 .dex 文件
    dx --dex --output=Hello.dex Hello.class
    经历上面两步就可以得到dex文件了。

二、.class 文件转 java字节码

javap -c -classpath . Hello

三、查看.dex内的Dalvik字节码

dexdump -d Hello.dex
在终端输入上个命令会直接在终端输出。
如果你想直接把输出结果放到某个文件中可以这么写:
dexdump -d Hello.dex > dalvik_hello.txt

上面这几步的方式适合查看单个java文件的Dalvik字节码,如果是整个APK的还是用工具查看。

javap 是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码。

语法:

  javap [ 命令选项 ] class. . .
  javap 命令用于解析类文件。其输出取决于所用的选项。若没有使用选项,javap 将输出传递给它的类的 public 域及方法。javap 将其输出到标准输出设备上。

命令选项:

  -help 输出 javap 的帮助信息。
  -l 输出行及局部变量表。
  -public 只显示 public 类及成员。
  -protected 只显示 protected 和 public 类及成员。
  -package 只显示包、protected 和 public 类及成员。这是缺省设置。
  -private 显示所有类和成员。
  -J[flag] 直接将 flag 传给运行时系统。
  -s 输出内部类型签名。
  -c 输出类中各方法的未解析的代码,即构成 Java 字节码的指令。
  -verbose 输出堆栈大小、各方法的 locals 及 args 数,以及class文件的编译版本
  -classpath[路径] 指定 javap 用来查找类的路径。如果设置了该选项,则它将覆盖缺省值或 CLASSPATH 环境变量。目录用冒号分隔。

【javap命令部分借鉴自:http://blog.csdn.net/hantiannan/article/details/7659904

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

outer199

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值