指令格式标识的类型码
助记符 | 位大小 | 说明 |
b | 8 | 8位有符号立即数 |
c | 16,32 | 常量池索引 |
f | 16 | 接口常量(仅对静态链接格式有效) |
h | 16 | 有符号立即数(32位或者64位数的高值位,低值位为0) |
i | 32 | 立即数,有符号整数或32位浮点数 |
l | 64 | 立即数,有符号整数或64位双精度浮点数 |
m | 16 | 方法常量(仅对静态链接格式有效) |
n | 4 | 4位的立即数 |
s | 16 | 短整型立即数 |
t | 8,16,32 | 跳转,分支 |
x | 0 | 无额外数据 |
Dalvik字节码类型描述符
语法 | 含义 |
V | void 只用于返回值类型 |
Z | boolean |
B | byte |
S | short |
C | char |
I | int |
J | long |
F | float |
D | double |
L | JAVA类 类型 |
[ | 数组类型 |
L类型可以表示Java类型中的任何类,这些类在Java代码中以package.name.ObjectName 方式引用,到了Dalvik汇编代码中
它们以Lpackage/name/ObjectName ; 形式表示,注意最后有个分号,L表示后面跟着一个Java类,package/name/表示
对象所在的包,ObjectName表示对象的名称,最后分号表示对象名结束。例如:Ljava/lang/String;相当于 java.lang.String
[ 类型可以表示所有基本类型的数组,[后面紧跟基本类型描述符,如[I 表示一个整型一维数组,相当于Java中的int []多个在一起时
可用于多维数组。[[I 表示 int[][]
Dalvik方法的表示
方法格式如下:
Lpackage/name/ObjectName; ->MethodName(III)Z
在这个例子中,Lpackage/name/ObjectName;应该理解为一个类型 MethodName 为具体的方法名,(III)Z 是方法的签名部分,其中
括号内的III 为方法的参数(在此为三个整型参数),Z表示方法的返回类型(boolean类型)
一个复杂的例子:
method (I[[IILjava/lang/String;[Ljava/lang/Object;)Ljava/lang/String
转化为:
String method(int ,int [][],int ,String,Object[])