You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java/Android API调用描述中$符号的含义是什么?

Dalvik字节码描述符中$符号的含义说明

你在Androguard中采集到的带$符号的字符串是Dalvik/ART虚拟机使用的类方法描述符,其中$是字节码层面标记内部类的固定分隔符,和其他编程语言中的变量引用作用完全无关。

Java/Kotlin 等JVM系语言编译为字节码时,对嵌套类(包括静态内部类、非静态内部类、匿名内部类)会采用 外部类名$内部类名 的固定命名规则,Android应用编译生成的dex字节码沿用了这套命名规则,具体对应你给出的示例:

  • Ljava/util/Locale$LanguageRange/<init>:表示java.util.Locale的内部类LanguageRange的构造方法,<init>是字节码中构造方法的固定标记
  • Lcom/google/android/gms/vision/barcode/BarcodeDetector$Builder/setBarcodeFormats:表示BarcodeDetector的静态内部类Builder的setBarcodeFormats成员方法,这是Android开发中常见的Builder设计模式实现
  • 不带$的Lcom/google/android/gms/vision/Tracker/<init>:表示Tracker是没有嵌套关系的独立顶层类

API调用追踪场景的实际意义

  • 可以直接通过$的位置快速拆分出外部类、内部类的层级关系,不需要反编译回源代码就能判断类的嵌套结构
  • 如果需要把描述符转换为常规Java类名写法,直接把$替换为.即可,例如Locale$LanguageRange对应常规写法Locale.LanguageRange
  • 部分匿名内部类的描述符会出现外部类$1、外部类$2的格式,末尾的数字是编译器给匿名内部类自动分配的序号,没有业务含义,仅用于区分不同的匿名内部类

内容的提问来源于stack exchange,提问作者Riddick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:54:05