熟悉java的童鞋一定会记得该类型的方法有个默认的参数指向当前对象,在smali中,方法的默认对象参数用p0表示.
举例说明: # direct methods
.method public constructor ()V
.registers 2
.prologue
.line 8
invoke-direct {p0}, Landroid/app/Activity;->()V
.line 10
const-string v0, "MainActivity"
iput-object v0, p0, Lcom/social_touch/demo/MainActivity;->TAG:Ljava/lang/String;
.line 13
const/4 v0, 0x0
iput-boolean v0, p0, Lcom/social_touch/demo/MainActivity;->running:Z
return-void
.end method
需要注意smali为其添加了#direct method注释
2. 虚方法虚方法的定义会和直接方法唯一的不同就是注释不同:#virtual methods,其格式如下: #virtual methods
.method [修饰关键词]
[.parameter1]
[.parameter2]
[.prologue]
[.line]
.end
3. 内部类的smali文件结构
内部类的smali文件稍有不同,具体表现在内部类对应的smali文件的的文件名为[外部类名称$内部类名称.smali]更详细的说明见下文.
4. 实例演示
smali文件的结构也是非常清晰明了的,熟悉之后读起来也是非常不错的.下面我们来看个简单的smali文件.为了方便理解,我们首先贴一段java代码: public class MainActivity extends Activity implements View.OnClickListener {
private String TAG = "MainActivity";
private static final float pi = (float) 3.14;
public volatile boolean running = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout