三种方式查看Java类字节码

对于安卓应用,程序中的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 "":()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文件即可看到类似下图的目录,将能看到非常丰富的类信息。 
三种方式查看Java类字节码_第1张图片

内部插件工具的方式

上述两种方式会跳出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的右边就会看到类似下图的界面,非常丰富的类信息。

三种方式查看Java类字节码_第2张图片

以上。

你可能感兴趣的:(JAVA)