APK战争 diffoscope

Diffoscope

  • 📦 可对比两个 APK 文件的每个组成部分(DEX、XML、图片资源、so、assets)
  • 能输出详细差异报告,适合用来检测是否足够差异化

支持递归解包 APK 内容,比普通 diff 更强大。


安装

你在 mac 上通过:

bash 复制代码
brew install diffoscope

✅ 一、确认安装成功

运行:

bash 复制代码
diffoscope --version

如果输出版本号,比如:

bash 复制代码
diffoscope 263

表示安装成功。


✅ 二、基本用法:对比两个 APK

假设你有两个 Flutter 编译产物:

  • build1.apk
  • build2.apk

命令一:输出纯文本到终端

bash 复制代码
diffoscope build1.apk build2.apk

会直接在终端显示详细的对比内容。


命令二:输出为 HTML 文件(推荐)

bash 复制代码
diffoscope --html diff_report.html build1.apk build2.apk

然后打开生成的 diff_report.html 文件查看差异。


命令三:输出为简化报告(限制大小)

bash 复制代码
diffoscope --html diff_report.html --max-report-size=10m build1.apk build2.apk

有时候对比结果特别大,这个参数可以限制报告大小。


✅ 三、输出示例效果(你会看到)

  • AndroidManifest.xml:包名是否不同
  • classes.dex:代码逻辑变化
  • assets/*:是否有新增/改动文件
  • lib/arm64-v8a/libapp.so:是否重新混淆
  • res/values/strings.xml:是否改了 app name 等 UI 文案

每一项都会列出 "相同/不同内容",支持二进制 diff。


✅ 四、可选技巧

操作 命令
解包 APK 手动查看 unzip myapp.apk -d output_dir
只对比 assets 目录 diffoscope assets1/ assets2/
只对比 so 文件 diffoscope libapp1.so libapp2.so

✅ 五、配合 Flutter 混淆使用建议

如果你在用 Flutter 构建 release 包建议加上:

bash 复制代码
flutter build apk \
  --release \
  --obfuscate \
  --split-debug-info=build/symbols

这样生成的 libapp.so 文件是混淆过的,对比时差异明显,利于过shen。

相关推荐
周胡杰1 分钟前
鸿蒙arkts使用关系型数据库,使用DB Browser for SQLite连接和查看数据库数据?使用TaskPool进行频繁数据库操作
前端·数据库·华为·harmonyos·鸿蒙·鸿蒙系统
31535669132 分钟前
ClipReader:一个剪贴板英语单词阅读器
前端·后端
玲小珑4 分钟前
Next.js 教程系列(十一)数据缓存策略与 Next.js 运行时
前端·next.js
qiyue7719 分钟前
AI编程专栏(三)- 实战无手写代码,Monorepo结构框架开发
前端·ai编程
断竿散人23 分钟前
JavaScript 异常捕获完全指南(下):前端框架与生产监控实战
前端·javascript·前端框架
Danny_FD25 分钟前
Vue2 + Vuex 实现页面跳转时的状态监听与处理
前端
小飞悟25 分钟前
别再只会用 px 了!移动端适配必须掌握的 CSS 单位
前端·css·设计
安思派Anspire26 分钟前
LangGraph + MCP + Ollama:构建强大代理 AI 的关键(一)
前端·深度学习·架构
LRH27 分钟前
JS基础 - 基于 Generator + Promise 实现 async/await 原理
前端·javascript
Jolyne_27 分钟前
可配置永久生效的Table组件的封装过程
前端·react.js