------------------------------------------------分割线-------------------------------------------------------------------------------------
虽然关于指令集现在还没有讲,但是可以先看一个例子,加深一下理解。
HelloWorldAppActivity.smail 示例:
.classpublicLcom/cn/daming/activity/HelloWorldAppActivity;
public class HelloWorldAppActivity extends Activity
.superLandroid/app/Activity;
public class HelloWorldAppActivity extends Activity
# instance fields 实例变量
.field privatemTextView:Landroid/widget/TextView;
privateTextView mTextView;
.method public constructor <init>()V 无参构造函数
.locals0 局部变量0个
.prologue ??
.line7
invoke-direct {p0}, Landroid/app/Activity;-><init>()V
return-void
.end method
# virtual methods 非静态方法
.method public onCreate(Landroid/os/Bundle;)V
public void onCreate(Bundle savedInstanceState)
.parameter"savedInstanceState"
public void onCreate(Bundle savedInstanceState)
.line12
invoke-super{p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
super.onCreate(savedInstanceState);
const/high16 v0,0x7f03 将0x7f03放入v0中
R.layout.main
Lcom/cn/daming/activity/HelloWorldAppActivity;->setContentView(I)V
p0代表this,而v0则传递参数R.layout.main的值。
this.setContentView(R.layout.main);
const/high16 v0,0x7f05
R.id.text_view
Lcom/cn/daming/activity/HelloWorldAppActivity;->findViewById(I)Landroid/view/View;
mTextView =(TextView)findViewById(R.id.text_view);
p0代表this,而v0则传递参数R.layout.main的值。
move-result-object v0
将值放入v0
check-cast v0, Landroid/widget/TextView;
类型检查
iput-object v0, p0, Lcom/cn/daming/activity/HelloWorldAppActivity;->mTextView:Landroid/widget/TextView;
iget-object v0, p0, Lcom/cn/daming/activity/HelloWorldAppActivity;->mTextView:Landroid/widget/TextView;
const/high16 v1,0x7f04
invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(I)V
.line16return-void
.end method
HelloWorldAppActivity.java 完整示例:
package com.cn.daming.activity;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloWorldAppActivity extends Activity {
private TextView mTextView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView = (TextView)findViewById(R.id.text_view);
mTextView.setText(R.string.hello);
}
}
通过对比发现基本的方法名称没有改变,多了一个
.method public constructor <init>()V 表示该类的不带参数缺省的构造方法,
onCreate()方法是以.method publiconCreate(Landroid/os/Bundle;)V 开始,.end method 结束
本文通过HelloWorldAppActivity.smail的示例,解析Smail语法的基本结构和关键指令,包括类声明、字段定义、方法实现等,帮助读者深入理解Smail反编译文件。
1449

被折叠的 条评论
为什么被折叠?



