smali语言详解之字段的声明(变量、常量)


一、smali语言的字段声明格式

1.1、非静态变量

.field 权限修饰关键字 变量名:变量类型的全包名路径或与java对应的数据类型关键字

1.2、静态变量

.field 权限修饰关键字 静态修饰关键字 变量名:变量类型的全包名路径或与java对应的数据类型关键字

注意关于静态变量初始化赋值问题,详见博客:smali语言详解之static静态代码块的声明与静态变量初始化赋值位置https://yinglongwu.blog.csdn.net/article/details/129230987

1.3、常量

注意当常量值为数字时需用16进制表示

.field 权限修饰关键字 静态修饰关键字 final 常量名:常量类型的全包名路径或与java对应的数据类型关键字 = 常量的值

1.4、smali与java之间基本数据类型的对应关系

smali java
B byte
S short
I int
J long
F float
D double
C char
Z boolean
V void
[ 数组
L+全类名路径用/分隔,以分号结尾 object(对象和类)

二、示例

java完整代码如下

package com.ylw.helloworld;public class Test {private static final String STR = "hello"; //常量private static final int TAKE_PHOTO = 1; //常量private static int a;private int b;private int[] c;private String d;private String[] e;
}

对应的smali完整代码如下

.class public Lcom/ylw/helloworld/Test;#(此行不可删)Lcom/ylw/helloworld/Test;为类的全包名路径,根据实际情况有所不同
.super Ljava/lang/Object;#(此行不可删)声明父类,当没有使用extends写明继承时,默认继承Object类
.source "Test.java"#(此行可删)#表示此smali代码对应的java源码文件# static fields#自动生成的注释,表明以下为静态字段,可以看出final常量需要额外用等于号赋值
.field private static final STR:Ljava/lang/String; = "hello".field private static final TAKE_PHOTO:I = 0x1.field private static a:I# instance fields#自动生成的注释,表明以下为实例字段
.field private b:I.field private c:[I.field private d:Ljava/lang/String;.field private e:[Ljava/lang/String;#以下内容为无参构造,与本文章内容无关,不做解释
# direct methods
.method public constructor <init>()V.registers 1.prologue.line 3invoke-direct {p0}, Ljava/lang/Object;-><init>()Vreturn-void
.end method

smali语言详解之字段的声明(变量、常量)相关推荐

  1. smali语言详解之static静态代码块的声明与静态变量初始化赋值位置

    smali语言详解之static静态代码块的声明与静态变量初始化赋值位置 一.smali语言的静态代码块声明格式 .method static constructor <clinit>() ...

  2. smali语言详解之一般/构造方法(函数)的声明与返回值关键字

    smali语言详解之一般/构造方法(函数)的声明与返回值关键字 一. smali语言的方法声明格式 .method与.end method成对出现,类似于java中的花括号 1.1.非静态的一般方法 ...

  3. smali语言详解之类的声明

    smali语言详解之类的声明 一.smali语言的类声明格式 .class 权限修饰关键字 类的全包名路径 二.示例 2.1.一般类(无继承和接口实现) java代码如下 public class T ...

  4. smali语言详解之创建对象

    smali语言详解之创建对象 一.smali语言创建对象分两步进行 第一步,声明对象实例,格式如下 new-instance 变量名,该对象对应类的全包名路径 第二步,调用构造方法(如果构造方法内还定 ...

  5. smali语言详解之方法的调用

    smali语言详解之方法的调用 一.方法调用关键字介绍 smali语言方法调用关键字主要有以下五种 invoke-virtual主要用于非私有实例方法的调用.实例方法指不是构造方法.父类方法等的属于这 ...

  6. Drools 规则语言详解(上)

    http://www.blogjava.net/guangnian0412/archive/2006/06/09/51574.html http://www.blogjava.net/guangnia ...

  7. c++指针详解_c语言详解sizeof

    一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等. 它并不是函数. sizeof操作符以字节形式给出了其操作数的存储大小. 操作数可以是一个表达式或括在括 ...

  8. 如何用c语言编写stm32的程序吗,STM32入门C语言详解

    <STM32入门C语言详解>由会员分享,可在线阅读,更多相关<STM32入门C语言详解(6页珍藏版)>请在人人文库网上搜索. 1.最新 料推荐阅读 flash : 芯片内部存储 ...

  9. 克鲁斯卡尔算法c语言,Kruskal算法(一)之 C语言详解

    最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树. 例如,对于如上图G4所示的连通网可以有多棵权值总和 ...

最新文章

  1. iOS Plist 文件的 增 删 改
  2. Spring Security 实战干货:玩转自定义登录
  3. Intel汇编语言程序设计学习-第三章 汇编语言基础-下
  4. hdu3177 贪心
  5. 深度学习核心技术精讲100篇(四十四)-深度召回在招聘推荐中的挑战和实践
  6. 【阿里云 Linux 服务器】mysql 遇到以下问题Expression #1 of SELECT list is not in GROUP BY clause and contains nonag
  7. [html] 你知道什么是粘性布局吗?
  8. 换SSD硬盘,重装系统,一阵子忙乱
  9. WCF并发连接数的问题
  10. C# 程序中使用 SQLite 数据库
  11. 【安装教程】——widows_pycharm远程连接Linux服务器
  12. 计算机显卡怎样安装方法,电脑装机小知识,新手如何正确安装好独立显卡
  13. [树的直径 树形DP] UOJ #11【UTR #1】ydc的大树
  14. Java类加载流程趣谈
  15. synaptics触摸板新驱动强势更新[附下载]!
  16. 小程序云服务器机型选择,小程序云服务器机型选择
  17. 如何解决360极速浏览器主页无法修改问题
  18. 机器学习的梯度下降中学习率的选取
  19. LVGL 官方UI设计工具 EdgeLine代码移植
  20. python中bind的用法_Python socket.bind方法代码示例

热门文章

  1. 论文笔记--3D Human Pose Estimation with Spatial and Temporal Transformers(用空间和时间变换器进行三维人体姿势估计)
  2. [架构设计]-- 数据库设计原则
  3. PEAR:PHP扩展与应用库
  4. 十二种常见设计模式代码详解
  5. 随机数种子与伪随机数生成原理
  6. 机器学习算法:支持向量机(SVM)
  7. 计算机是否属于公共管理类,公共管理类包含的专业有哪些
  8. java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z错误
  9. 使用JMH进行性能测试
  10. js文件报错:Uncaught TypeError: Cannot read property 'split' of null