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。

相关推荐
H_z_q240124 分钟前
Web前端制作一个评论发布案例
前端·javascript·css
秋秋小事1 小时前
可选链与非空操作符
前端
iRuriCatt1 小时前
智慧景区管理系统 | 计算机毕设项目
java·前端·spring boot·vue·毕设
程序员清洒2 小时前
Flutter for OpenHarmony:Icon 与 IconButton — 图标系统集成
前端·学习·flutter·华为
Yolanda942 小时前
【项目经验】钉钉免密登录实现
前端·javascript·钉钉
2601_949613022 小时前
flutter_for_openharmony家庭药箱管理app实战+药品详情实现
java·前端·flutter
We་ct3 小时前
LeetCode 15. 三数之和:排序+双指针解法全解析
前端·算法·leetcode·typescript
美狐美颜SDK开放平台3 小时前
直播场景下抖动特效的实现方案:美颜sdk开发经验分享
前端·人工智能·美颜sdk·直播美颜sdk·视频美颜sdk
草青工作室3 小时前
java-FreeMarker3.4自定义异常处理
java·前端·python
美狐美颜sdk3 小时前
抖动特效在直播美颜sdk中的实现方式与优化思路
前端·图像处理·人工智能·深度学习·美颜sdk·直播美颜sdk·美颜api