Skip to content

📚 依赖架构 ​

架构 依赖清单

ClassyShark 的第三方依赖撑起三类职责:二进制解析(dex / class / ELF)、网络(GitHub API 自更新)、JSON 序列化。源码树内还维护一个 third_party/ 目录存放闭源/遗留 jar。

依赖总览 ​

ClassySharkWS/build.gradle 中的完整依赖(见 构建系统架构):

第三方库组织/仓库用途使用模块
dexlib2 2.2.7org.smali · Maven解析 dex:类结构、smali、字符串、方法盘点多走它DexReader · DexlibLoader · DexlibAdapter · MetaObjectDex · DexInfoTranslator · DexStringsDumper · ApkDashboard
ASM asm-all 5.2org.ow2 · Maven解析 class 字节码(含 ClassVisitor 提类名)ClazzReader · ClassNameVisitor · MetaObjectAsmClass · ClassDetailsFiller
ASMDEX 1.0org.ow2 · third_partyOW2 的 dex 字节码 API,访问 dex 方法DexMethodsDumper · ApkNativeMethodsVisitor · ApkDashboard
java-binutilsnl.lxtreme · third_partyELF 解析(CMake 风格 binutils 的 Java 移植),读 .so 符号/依赖ElfReader · ElfTranslator · DynamicSymbolsInspector · MultidexReader
util-2.0.6third_party配套工具库(供 java-binutils / 若干辅助类使用)—
guava 31.1-jrecom.google · Maven通用集合/IO 工具,XML 反序列化用 LittleEndianDataInputStream(小端 AXML 字序)XmlDecompressor 等
BCEL 6.5.0org.apache.bcel · Maven解析 jar/class 元数据,方法计数按 BCEL 常量池统计RootBuilder · MethodCountExporter
okhttp 4.10.0com.squareup · MavenHTTP 客户端,Retrofit 默认引擎GitHubApi · NetworkManager
okio 3.2.0com.squareup · Mavenokhttp 底层 IO 缓冲库GitHubApi 等
retrofit 2.9.0com.squareup · Maven声明式 REST 客户端,封装 GitHub releases 查询NetworkManager · UpdateManager · AbstractReleaseCallback
converter-gson 2.9.0com.squareup.retrofit2 · MavenRetrofit 的 Gson 转换器(响应 JSON → 模型)AbstractReleaseCallback 等
gson 2.9.0com.google.code.gson · MavenJSON 序列化/反序列化(Agent 协议报文 + release 模型注解绑定)Agent 协议 · Release · ReleaseDownloadData

解析器分工 ​

mermaid
flowchart TD
    A[归档] -->|.dex| D[DexReader / DexlibLoader<br/>dexlib2]
    A -->|.class 单文件| C[ClazzReader<br/>ASM]
    A -->|.apk 内嵌 dex| M[MultidexReader<br/>ASMDEX + dexlib2]
    A -->|.so| E[ElfTranslator<br/>java-binutils]
    A -->|二进制 XML| X[XmlDecompressor<br/>guava LittleEndianDataInputStream]
    A -->|方法计数| B[RootBuilder<br/>BCEL]
  • dexlib2 是 dex 主解析器,几乎覆盖 dex 相关全部模块;ASMDEX 只做方法级访问(native 方法扫描、方法转储),两库并存互补。
  • java-binutils(nl.lxtreme.binutils.elf.Elf)负责 .so 的 ELF 文法,统一被 DynamicSymbolsInspector、MultidexReader、ElfTranslator 引用。
  • 二进制 Android XML 是小端序,guava 的 LittleEndianDataInputStream(com.google.common.io)正好按小端逐字段读出 AXML 头与字符串池,是 XmlDecompressor 的关键基座。

third_party 目录 ​

仓库根目录 third_party/ 存放无法从 Maven Central 获得的闭源/遗留 jar,由 flatDir 仓库挂载:

文件内容
asmdex-1.0.jarASMDEX 库本体
util-2.0.6.jar配套工具库
java-binutils.jarELF 解析库本体
ASMDEX.LICENSEASMDEX 的 Apache-2.0 许可文本
java-binutils.LICENSEjava-binutils 的许可文本

📌 加依赖时若构件来自第三方,优先 Maven Central;只有获取不到源码/坐标的才落 third_party/ 并附 LICENSE。

网络与更新链路 ​

自更新(updater)模块是依赖最齐全的子模块,链路如下:

mermaid
flowchart LR
    UM[UpdateManager] --> NM[NetworkManager<br/>retrofit]
    NM --> gh[GitHubApi 接口]
    gh -->|Gson 转换| RC[AbstractReleaseCallback]
    RC --> DL[AbstractDownloader<br/>okhttp 下载占位]

设计要点 ​

  • 🧩 按能力分层 — 解析类(dexlib2/ASM/ASMDEX/binutils/BCEL/guava)与网络类(okhttp/okio/retrofit/gson)职责互不重叠。
  • 🖇️ 同一格式两套 API — dex 既有 dexlib2(高层对象模型)又有 ASMDEX(字节码级低层),按场景取用。
  • 📦 本地化依赖 — 闭源落地 third_party/ 与 LICENSE,保证可复现构建。
  • 🔗 更新链单一出口 — 对外网络只发生在 updater 子模块,其余核心解析保持无网络。

进一步阅读 ​

最后更新:

基于 Apache 2.0 协议发布