1、Smali语法解析.class 修饰关键字 /指定了当前类名.super /指定了当前类的父类.soucre /指定了当前类的源文件名例如:打开某反编译的smali文件:该源程序结构如图所示:(包文件不考虑)接下介绍的是字段(fields):声明字段使用“.field”指令静态字段(static)在装载程序集就分配内存空间实例字段(instance)要实例化才能使用,没有实例化不能使用#static fields.field 修饰关键字 static 字段:字段类型#instance fields.field 修饰关键字 字段:字段类型两者区别:后者少了static关键字。比如以下的实例字段声
2、明:.field private conn:Landroid/content/ServiceConnection;表示声明一个私有字段conn;它的类型是“android/content/ServiceConnection;”。(注意分号不能丢)如果一个类中有方法,那么必然有相关的发编译代码。方法的声明使用“.method”指令,“.end method”表示方法结束。直接方法(direct)虚方法(virtual)#direct methods.method 修饰关键字 /声明局部变量的个数.parameter /声明参数的个数.prologue /指令的开始处.line /指示在源代码的行数.end method虚方法和直接方法相同,只是注释不同。如果一个类实现了接口,会使用”.implememts”指令。#interfaces.implememts 如果一个使用了注释,会使用“.annotation”指令。MemberClasses 注解是编译时自动加上的, MemberClasses 注解是一个“系统注解”,作用是为父类提供一个MemberClasses列表。MemberClasses即子类成员集合,通俗的讲就是一个内部类列表。注释的格式:#annotations.annotation 注释属性 注释字段=值.end annotation