- 移动开发
- 开发工具
- 逆向工程
【免费下载链接】LibChecker
An app to view libraries used in apps in your device.
LibChecker 是一款用于查看设备上应用所使用库(含原生库、DEX、组件与签名信息)的开源 Android 应用。本文以仓库内 changelog/CHANGELOG.md(对应 changelog/CHANGELOG_CN.md)中 2.5.1 至 2.5.4 四个版本的变更记录为主线,逐项解析这些版本背后的核心技术能力:Android 16/17 适配、16 KB 页对齐检测、WebUI 应用信息导出、快照体系增强、库引用统计(Action 类型)、Modern Xposed 模块识别等,并结合仓库源码给出实现层面的印证。读完本文,你将理解 LibChecker 近几个版本的功能脉络、关键检测逻辑的落地位置,以及如何借助这些能力进行应用库分析与 16 KB 适配排查。
一、版本总览:2.5.x 系列的演进主线
从 2.5.1 到 2.5.4,LibChecker 的演进可以归纳为四条主线:
- 系统版本适配:先后适配 Android 16(2.5.1)、Android 17(2.5.4),并覆盖 Android 15+ 的"已归档应用"信息记录、Android 8+ 的 16 KB 对齐图表统计。
- 安装包分析能力增强:新增 APKs(Split APK 集合)分析、APK 下载链接分享(元数据轻量分析)、签名方案检测优化、ELF 原生库检测标签扩充。
- 快照(Snapshot)体系完善:快照自动删除、Build ID 与安全补丁等级记录、原生库体积变化比例、备份可靠性修复。
- 库识别与统计升级:规则库从 V43 更新至 V44,引入基于 IntentFilter
action标签的库识别方式,库引用统计新增Action类型。
版本与核心主题的对应关系如下:
| 版本 | 系统适配 | 核心新增能力 |
|---|---|---|
| 2.5.1 | Android 16 | APKs 分析、16 KB 对齐标记、Compose Multiplatform 检测、快照自动删除、IEC 单位 |
| 2.5.2 | — | IntentFilter action 库识别、签名方案展示、Build ID 快照记录、图表分布显示 Android 版本 |
| 2.5.3 | — | APK 链接分享、APKS 对比、权限提供者、主题/备选图标、实时更新通知检测 |
| 2.5.4 | Android 17 | WebUI 应用信息导出、Overlay 应用详情、Modern Xposed 模块识别、ZIP 对齐值展示 |
二、16 KB 页对齐检测:从"是否对齐"到"ZIP 对齐值"
16 KB 页大小是 Android 15+ 系统对原生库的硬性要求(传统设备为 4 KB 页),应用内所有 ELF 原生库的段对齐必须满足 16 KB 要求。LibChecker 在 2.5.x 系列中对该能力的迭代最为密集:
- 2.5.1:修正 16 KB 对齐的检测方式;在 Android 8+ 的图表中统计 16 KB 对齐应用;在原生库列表中对两类库独立标记——已开启 16 KB 对齐的库,以及"未压缩但未按 16 KB ZIP 对齐"的库(即
NON 16 KB STORED标签)。 - 2.5.2:再次修正原生库 16 KB 对齐的检测方法。
- 2.5.3:非标准 ELF 文件不再纳入 16 KB 检测,避免误报。
- 2.5.4:对已实现 16 KB 页对齐、但未以 16 KB 页对齐压缩的原生库,直接显示具体的 ZIP 对齐值。
从源码看,检测的核心逻辑位于 ELF 解析模块。app/src/main/kotlin/com/absinthe/libchecker/utils/elf/ElfInfo.kt中定义了pageSize: Int = -1字段,用于记录 ELF 的页大小;ElfParser.java在解析程序头(Program Header)时通过minAlign = Math.min(minAlign, ph.align)(见ElfParser.java第 100 行)汇总各段的最小对齐值,而Program32Header.java/Program64Header.java分别以readWord/readLong从段头偏移处读取align字段(对应 32 位 ELF 段头 0x1C 偏移、64 位 ELF 段头 0x30 偏移)。这与变更记录中"检测方法持续修正"的迭代方向一致——对齐判断既要看 ELF 段对齐,也要看 ZIP 容器内的存储对齐。
实操提示:针对应用进行 16 KB 适配时,应确保所有原生库都带有「16 KB」标签,并且没有任何原生库带有「NON 16 KB STORED」标签(该提示同样出现在 2.5.1 的变更说明中)。2.5.4 进一步给出具体 ZIP 对齐值,可据此定位是打包器(如 ApkZipper)未设置
alignment还是 ELF 段本身未对齐。
三、WebUI 应用信息导出:本地分析、可视化查看
2.5.4 在设置界面新增了应用信息导出功能:将应用信息导出为文件后,可在 WebUI(https://lc.absinthe.life/)中打开并以可视化形式查看。变更说明强调"所有分析均在本地进行",即导出与对比过程不依赖云端。
源码佐证:
- 导出入口实现在
app/src/main/kotlin/com/absinthe/libchecker/domain/settings/ui/ExportAppsDialogView.kt与ExportAppsDialogFragment.kt:对话框包含描述文本、进度指示器(LinearProgressIndicator,最大值 100)、WebUI 骨架预览图(R.drawable.ic_webui_skeleton_preview)与导出按钮,并通过ExportAppsDialogAction.PrimaryButtonClick触发导出动作。 - WebUI 地址定义于
app/src/main/kotlin/com/absinthe/libchecker/constant/URLManager.kt(WEBUI_PAGE常量),"导出的应用可以在 WebUI 查看"的文案可见于app/src/main/res/values/strings.xml(export_apps_webui_tip),该文案已随多语言资源同步到values-zh-rCN、values-ar-rSA、values-zh-rTW等目录。
这一功能的价值在于:对超大型应用或游戏,无需完整下载 APK 即可通过"APK 下载链接分享"(2.5.3 引入)下载少量元数据,在 WebUI 中浏览大部分基础信息;本地分析保证了隐私与离线可用性。
四、快照体系:自动删除、Build ID 记录与体积变化
快照(Snapshot)是 LibChecker 用于对比应用库变化的核心功能,2.5.x 系列对其做了多项增强:
4.1 快照自动删除(2.5.1)
新增"快照自动删除"功能,可设置阈值自动清理旧快照。源码中的落地路径清晰:
- 偏好键定义于
app/src/main/kotlin/com/absinthe/libchecker/constant/Constants.kt:PREF_SNAPSHOT_AUTO_REMOVE_THRESHOLD = "snapshotAutoRemoveThreshold"; - 默认值与读写入口在
app/src/main/kotlin/com/absinthe/libchecker/constant/GlobalValues.kt(snapshotAutoRemoveThreshold,默认-1,表示不启用)与app/src/main/kotlin/com/absinthe/libchecker/data/snapshot/GlobalSnapshotSettingsRepository.kt; - 时间节点底部弹窗(
TimeNodeBottomSheetDialogFragment.kt)中提供开关与阈值对话框交互,关闭自动删除时将阈值重置为-1(即禁用),相关状态模型定义于domain/snapshot/timenode/model/TimeNodeBottomSheetState.kt(AutoRemove、SetAutoRemoveEnabled等)。
4.2 Build ID 与安全补丁等级(2.5.2)
自 2.5.2 起保存的快照会额外记录系统的Build ID和安全补丁等级(security patch level),当这些值发生变化时会展示在快照仪表盘上——这对于判断"系统更新是否导致了库行为变化"非常有用。
4.3 体积变化与展示优化
- 2.5.3:快照列表与详情页中,原生库类型新增体积变化比例展示;快照项右侧状态指示器颜色按具体比例显示,而非固定颜色。
- 2.5.3:快照不再记录
assets目录内的原生库信息(避免冗余);修复了部分应用快照无法保存、极端情况下备份失败的问题。
4.4 交互细节
2.5.2 新增快照详情页长按复制标题栏信息,便于记录或分享某个时间点的应用状态。
五、库识别与统计:IntentFilter action 与 Action 类型
5.1 基于 action 标签的库识别(2.5.2)
传统库识别依赖组件类名匹配规则。2.5.2 新增了第二种识别路径:通过组件IntentFilter中的action标签来识别和标记库,其展示优先级低于类名匹配。这意味着某些通过广播/服务 action 暴露身份(如Xposed模块、Live Update服务)的库也能被正确归类。
5.2 Action 类型统计(2.5.2 / 2.5.3)
库引用统计页面新增Action类型的高级过滤项;2.5.3 起该过滤默认启用,且 Action 类型统计不再过滤android命名空间,避免漏掉以android.*前缀声明的系统 action。同时,2.5.1 起统计中不再计入以 Application ID 开头的组件,减少自引用噪声。
规则库版本在 2.5.3 更新至 V43,2.5.4 更新至 V44,规则数据随应用更新分发(仓库app/schemas/下亦有数据库 Schema 演进记录,如com.absinthe.libchecker.database.LCDatabase的 12–25 各版本 JSON)。
六、Xposed 模块识别:从传统到 Modern Xposed API
2.5.4 支持识别Modern Xposed API的模块信息。传统 Xposed 模块通过在assets/xposed_init中声明入口类来识别,而 Modern Xposed API(如 LSPosed 的新式声明)采用不同的元数据格式。
源码层面,模块信息解析集中在app/src/main/kotlin/com/absinthe/libchecker/domain/app/detail/action/DetailAppInfoResolver.kt:getXposedModuleInfo(packageName)在Dispatchers.IO上读取模块元数据并映射作用域应用(getXposedScopeAppInfo、normalizeXposedScope),同时通过readZipInfo读取 APK 内相关 zip 条目(第 349 行附近)。这一实现同时覆盖了传统xposed_init声明与新版 API 的声明方式,且与应用详情页的组件/服务信息联动展示。
七、安装包分析:APKs、APK 链接分享与签名方案
7.1 APKs 分析与对比(2.5.1 / 2.5.3)
2.5.1 支持分析 APKs(Split APK 集合)安装包;2.5.3 进一步支持APKS 文件对比,并修复了部分应用 Split APKs 列表获取不完整、Split APKs 原生库缺失的问题。对多 ABI/多语言拆分的应用而言,APKs 支持是完整呈现原生库与资源结构的前提。
7.2 APK 下载链接分享(2.5.3)
支持将 APK 的下载链接分享至 LibChecker,通过下载少量元数据即可展示大部分基础信息,尤其适合超大型应用或游戏——避免了完整下载数 GB 安装包才能查看库信息的成本。
7.3 签名方案检测(2.5.2 / 2.5.4)
2.5.2 在应用签名页面新增签名方案展示(v1/v2/v3 等);2.5.4 提升了签名方案检测的速度与准确性。签名信息是判断应用来源可信度与更新链路的重要依据。
7.4 安装来源信息(2.5.1 / 2.5.4)
- 2.5.1:安装来源页面新增安装时间信息。
- 2.5.4:将DEX 优化信息从应用属性弹窗迁移至安装来源弹窗;对于已授予 Shizuku 权限的用户,展示更准确的优化结果(Shizuku 可读取系统级 DEX 优化状态,相关能力见仓库
app/src/main/kotlin/com/absinthe/libchecker/utils/ShizukuManager.kt)。
八、其他值得关注的细节变更
- 应用详情页:2.5.4 为 Overlay 应用新增详情页;2.5.3 支持检测主题图标与备选启动图标、检测**"实时更新通知"(Live Update Notifications)、展示权限提供者**、将特定原生库提取至下载目录、在"进一步操作"中直接跳转更多文件管理器及商店。
- 图表与统计:2.5.2 在「图表 - 分布」中展示设备 Android 版本(含即将到来的 minor 版本);2.5.1 起 Android 8+ 可在图表中统计 16 KB 对齐应用。
- 单位与界面:2.5.1 新增「使用 IEC 单位」选项(KB/MB 以 1024 进制显示);2.5.1 更新为更现代的 Material Design 页面样式。
- 组件进程指示:2.5.1 修正详情页应用组件进程指示栏的显示逻辑。
- Telemetry:2.5.1 将遥测平台迁移至 Firebase;2.5.3 在非 FOSS 版本移除部分涉及启动应用统计的遥测事件(FOSS 构建见
app/src/foss/kotlin/com/absinthe/libchecker/utils/Telemetry.kt,与 market 变体区分)。 - Dex 页移除:2.5.1 移除应用详情页的「Dex」页,原因是 Dex 规则长期缺乏维护——这是"以规则库维护成本决定功能存续"的典型产品决策。
- 无障碍与稳定性:2.5.4 优化无障碍体验与若干 UI 设计;各版本均修复了横屏宽屏设备崩溃、底部弹窗无法弹出、搜索栏内容丢失、首页列表不刷新等稳定性问题。
九、规则库版本与数据库演进
规则库(Rules Database)随版本迭代持续更新:2.5.3 → V43,2.5.4 → V44。规则的用途是驱动库识别(类名匹配 + action 匹配)与组件归属判断,其数据模型与迁移逻辑位于app/src/main/kotlin/com/absinthe/libchecker/database/RulesRepository.kt,Schema 演进记录见 app/schemas/com.absinthe.libchecker.database.RuleDatabase/1.json。主数据库LCDatabase的 Schema 已演进至第 25 版(app/schemas/com.absinthe.libchecker.database.LCDatabase/),说明快照、库引用统计等数据结构在多版本中持续扩展——例如 2.5.2 快照新增的 Build ID 字段即需要数据库迁移支撑。
十、如何在当前版本中验证这些能力
按以下路径可在 LibChecker(≥ 2.5.4)中逐一验证上述特性:
- 16 KB 对齐检查:进入应用详情 → 原生库列表,观察「16 KB」与「NON 16 KB STORED」标签;对已对齐但 ZIP 未对齐的库查看具体对齐值。
- WebUI 导出:设置 → 应用信息导出,生成文件后在
lc.absinthe.life打开查看可视化对比。 - 快照自动删除:快照时间节点面板开启 AutoRemove 并设置阈值(默认禁用,阈值
-1)。 - Action 库识别:库引用统计页启用 Action 类型过滤,观察基于 IntentFilter action 标记的库。
- Xposed 模块:查看已装 Xposed/LSPosed 模块应用的详情页,确认 Modern Xposed API 信息是否被正确解析。
以上能力对应的源码均可通过本文引用的相对路径在仓库中深入阅读(ELF 解析见 utils/elf/,快照逻辑见 domain/snapshot/,应用详情解析见 domain/app/detail/action/DetailAppInfoResolver.kt),据此可进一步理解各功能的底层实现与检测边界。
- 移动开发
- 开发工具
- 逆向工程
【免费下载链接】LibChecker
An app to view libraries used in apps in your device.
相关推荐
LibChecker 2.5.x 版本演进全解析:从 16 KB 对齐检测、APKs 分析到 Android 17 适配
LibChecker 2.5.x 版本演进全解析:从 16 KB 对齐检测、APKs 分析到 Android 17 适配 导读 本文以 LibChecker 官
移动开发开发工具逆向工程CPU-X硬件检测工具版本演进与技术解析
CPU X硬件检测工具版本演进与技术解析 项目概述 CPU X是一款功能强大的硬件检测工具,能够详细显示CPU、内存、主板、显卡等硬件信息。该项目采用C++开发
Dragonfly版本演进:从v0.4.x到v1.0.x的技术路线图分析
Dragonfly版本演进:从v0.4.x到v1.0.x的技术路线图分析 Dragonfly作为一款高性能的P2P内容分发系统,在版本演进过程中实现了从基础架构
云原生
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考