三种方式查看Java类字节码

来源:互联网 发布:抠图软件 mac版 编辑:程序博客网 时间:2024/06/07 11:44

对于安卓应用,程序中的Java文件被编译成.class文件后,虽然还会被dex工具进行内部优化、压缩,再打包成dex文件,但是本质上并未脱开与Java开发类似的编译和虚拟机实现,由此,深入安卓开发,离不开深入学习Java语言,也免不了要去研究JVM类加载、JVM字节码相关的东西,这时就需要经常查看字节码。 
本文提供了三种较为方便的查看字节码的方式。

完全命令行方式

假设本地D盘里有个Hello.java文件:

public class Hello{    public void say(){        Hello he = new Hello();        System.out.println("hello world");    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

首先使用命令javac D:\Hello.java,将java文件编译成Hello.class文件,此时直接打不开,可使用jd-gui.exe程序打开,或者用ide工具(比如as)打开,不过显示的Hello.class文件是被反编译过的,基本与原java文件一样。并不是我们想要看的格式。这时,使用javap -c D:\Hello.class便可以在dos窗口里看到我们需要的字节码文件:

public class Hello {  public Hello();    Code:       0: aload_0       1: invokespecial #1         4: return  public void say();    Code:       0: new           #2      // class Hello       3: dup       4: invokespecial #3      // Method "<init>":()V       7: astore_1       8: getstatic     #4             11: ldc           #5      // String hello world      13: invokevirtual #6            16: return}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

外接工具的方式

假设本地D盘里有个Hello.java文件,类似上面的描述编译成Hello.class文件(或者找到ide中相关out文件夹中的那些.class文件),然后下载Java Bytecode Editor,解压,直接运行jbe.sh即可看到UI面板,打开Hello.class文件即可看到类似下图的目录,将能看到非常丰富的类信息。 
这里写图片描述

内部插件工具的方式

上述两种方式会跳出ide,有时会显得比较费时。我们需要一款合适的插件,感谢jclasslib bytecode viewer,我们打开ide(这里是Android studio),setting-plugin-browse..-bytecode viewer-jclasslib bytecode viewer-install-restart,此时呢,打开一个java文件,对java文件,然后面板上View-Show bytecode with jclasslib,此时在ide的右边就会看到类似下图的界面,非常丰富的类信息。

这里写图片描述

以上。