无论是普通类、抽象类、接口类或者内部类,在反编译出来的代码中,他们都以单独的smali文件来存放。
一、smali文件的头3行描述了当前类的一些信息,格式如下:
.class <访问权限>[修饰关键字]<类名>
.super <父类名>
.source <源文件名>
类名开头的L是遵循Dalvik字节码的相关约定,表示后面跟随的字符串为一个类,经过混淆的dex文件,反编译出来的smali代码可能没有源文件信息,因此,.source行可能为空。
二、smali文件中,字段的声明使用“.field”指令
- 静态字段格式:
#static fields
.field <访问权限> static[修饰关键字]<字段名>:<字段类型>
- 实例字段格式:
#instance fields
.field <访问权限> static[修饰关键字]<字段名>:<字段类型>
三、smail文件中,方法的声明使用“.method”指令,方法有直接方法与虚方法。
- 直接方法声明格式:
#direct methods
.method <访问权限>[修饰关键字]<方法原型>
<.locals> //置顶了使用的局部变量的个数
[.par