Smail语法基本知识(三)

本文通过HelloWorldAppActivity.smail的示例,解析Smail语法的基本结构和关键指令,包括类声明、字段定义、方法实现等,帮助读者深入理解Smail反编译文件。

------------------------------------------------分割线-------------------------------------------------------------------------------------

虽然关于指令集现在还没有讲,但是可以先看一个例子,加深一下理解。

HelloWorldAppActivity.smail 示例:

斜体灰色为对应Java代码

.classpublicLcom/cn/daming/activity/HelloWorldAppActivity;

public class HelloWorldAppActivity extends Activity

.superLandroid/app/Activity;

public class HelloWorldAppActivity extends Activity

.source "HelloWorldAppActivity.java"
# instance fields 实例变量

.field privatemTextView:Landroid/widget/TextView;

privateTextView mTextView;

# direct methods 静态方法?
.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) 

.locals2

.parameter"savedInstanceState"

public void onCreate(Bundle savedInstanceState

.prologue
.line12

invoke-super{p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

super.onCreate(savedInstanceState);

.line13

const/high16 v0,0x7f03 将0x7f03放入v0中

R.layout.main

invoke-virtual {p0, v0},

Lcom/cn/daming/activity/HelloWorldAppActivity;->setContentView(I)V

p0代表this,而v0则传递参数R.layout.main的值。

this.setContentView(R.layout.main);

.line14

const/high16 v0,0x7f05

R.id.text_view

invoke-virtual {p0, v0},

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;


.line15
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

.line16
return-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 public
onCreate(Landroid/os/Bundle;)V 开始,.end method 结束
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值