smali基本语法简介(与java对比)

1、smali和java基本数据类型对比

smalijava
Bbyte
Sshort
Iint
Jlong
Ffloat
Ddouble
Cchar
Zboolean
Vvoid
[数组

L+全类名路径用/分隔,以分号结尾

2、注释

//java注释

#smali注释

 

3、类声明

java类声明

public class MainActivity

smali类声明(要用类的全包名路径,全包名路径由大写L开头,全包名路径结尾要加英文分号;),示例如下

.class public Lcom/ylw/helloworld/MainActivity;

4、方法声明

java方法声明

public void showToast (View view) {
    方法内容
}

smali方法声明,java里的花括号用 .method 和 .end method 代替,其中第一行最后一个大写的V表示返回值为void,括号内的 Landroid/view/View; 为参数的全包名路径,示例如下

.method public showToast(Landroid/view/View;)V
    方法内容
.end method

 

5、变量声明

java变量声明

private Button mBtn3

smali变量声明,mBtn3:Landroid/widget/Button; 中冒号用来解释mBtn3的类型,Landroid/widget/Button; 为Button类型的全包名路径,示例如下

.field private mBtn3:Landroid/widget/Button;

6、变量的取值赋值

java对于成员变量一般使用get、set方法进行取值和赋值。
smali和java中get、set方法类似的是iget、iput、sget、sput,其中前缀i表示instance实例,前缀s表示static静态
7、方法的调用

java中直接使用方法的名称,传入相应的参数即可。
smali中使用invoke表示方法的调用,invoke为前缀,具体调用要看方法的类型使用invoke-类型进行调用

 

8、方法的取值(获取方法的返回值)

java

String a = getName()

   

smali实现上述java代码要分两步走:
第一步:调用方法,使用invoke-类型
第二步:进行返回值的接收,使用move-类型,下面代码示例表示将值赋给v2

move-result-object v2
 

object(对象和类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值