Skip to content

🔢 EncodedValue

DEX 编码值的根接口,用于表示字段初始值和注解参数值。

属性
包名org.jf.dexlib2.iface.value
类型interface extends Comparable<EncodedValue>
源码EncodedValue.java

🎯 职责

EncodedValue 是一个类型分发接口,通过 getValueType() 返回具体类型常量(对应 ValueType.*),消费者再将其强转为具体子接口。

🧠 关键实现

java
public interface EncodedValue extends Comparable<EncodedValue> {
    /**
     * 返回值类型,对应 ValueType.* 常量:
     * VALUE_BYTE, VALUE_SHORT, VALUE_CHAR, VALUE_INT, VALUE_LONG,
     * VALUE_FLOAT, VALUE_DOUBLE, VALUE_STRING, VALUE_TYPE,
     * VALUE_FIELD, VALUE_METHOD, VALUE_ENUM,
     * VALUE_ARRAY, VALUE_ANNOTATION, VALUE_NULL, VALUE_BOOLEAN
     */
    int getValueType();
}

子接口体系

子接口ValueType 常量用途
ByteEncodedValueVALUE_BYTEbyte 字面量
IntEncodedValueVALUE_INTint 字面量
LongEncodedValueVALUE_LONGlong 字面量
StringEncodedValueVALUE_STRING字符串引用
TypeEncodedValueVALUE_TYPE类型描述符
FieldEncodedValueVALUE_FIELD字段引用
MethodEncodedValueVALUE_METHOD方法引用
EnumEncodedValueVALUE_ENUM枚举值
ArrayEncodedValueVALUE_ARRAY嵌套数组
AnnotationEncodedValueVALUE_ANNOTATION嵌套注解
NullEncodedValueVALUE_NULLnull 值
BooleanEncodedValueVALUE_BOOLEANboolean 字面量

🔗 关系

📌 小结

EncodedValue 体系覆盖了 DEX 中所有可以出现在"静态数据区"的值类型,是 dexlib2 类型系统最为完整的一个子包。在脱壳 smali 输出中,字段的 .value 指令和注解的元素值都依赖这套接口。

基于 MIT 协议发布 · 本文档仅用于安全研究与教学目的