一、比较JAVA字节码和Dalvik字节码
1.新建文件 Hello.java
public class Hello{
public int foo(int a,int b){
return (a+b)*(a-b);
}
public static void main(String[] argc){
Hello hello=new Hello();
System.out.println(hello.foo(5,3));
}
}
2.编译为class文件
命令行: javac -source 1.6 -target 1.6 Hello.java (我的JDK版本为1.8,但是这里编译需指定版本为1.6)
3.编译为dex文件
命令行: dx --dex --output=Hello.dex Hello.class (dx即为SDK下build-tools中的dx.bat,我使用的是4.4w下的)
4.JAVA反汇编
命令行: javap -c -classpath . Hello.class
Compiled from "Hello.java"
public class Hello {
public Hello();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public int foo(int, int);
Code:
0: iload_1
1: iload_2
2: iadd
3: iload_1
4: iload_2
5: isub
6: imul
7: ireturn
public static void main(java.lang.String[]);
Code:
0: new #2 // class Hello
3: dup
4: invokespecial #3 // Method "<init>":()V
7: astore_1
8: getstatic #4 // Field java/lang/System.out: