如何查看自己 Android App 的私有数据?从 `adb backup` 到数据提取全过程

发布于:2025-04-13 ⋅ 阅读:(23) ⋅ 点赞:(0)

🛠️ 如何查看自己 Android App 的私有数据?从 adb backup 到数据提取全过程

📌 前言:作为一名 Android 开发者,我常常想知道自己写的 App 在用户设备上的数据存储结构是怎样的,比如有没有数据写入成功、有没有缓存占用太多空间、有没有某些数据长期未清理……
本文记录一次我自己从 App 备份中提取数据的全过程,希望对有类似需求的开发者有所帮助!


🎯 背景需求

我有一个正在开发的 App,包名为 com.example.myapp,为了了解用户使用过程中的数据行为(例如缓存、音频、日志等),我决定从 App 的私有目录中导出文件看看

但是由于 Android 9.0(API 28)之后 App 的私有目录默认不可直接访问,所以需要曲线救国 —— 利用 adb backup + 解包 的方式。


🧰 步骤一:使用 adb 备份 App 数据

首先将 Android 设备连接电脑,确认 adb 能正常使用:

adb devices

然后运行备份命令:

adb backup -noapk -noshared -noobb -no-compression com.example.myapp -f my_backup.ab

参数说明:

  • -noapk:不备份 APK 文件
  • -noshared:不备份 /sdcard 的内容
  • -noobb:不备份 OBB 文件
  • -no-compression:避免压缩,后续解压方便
  • -f:输出文件名

执行过程中手机上会弹出“是否允许备份”的提示,点击确认即可。


📦 步骤二:使用 abe.jar 工具解包 .ab 文件

.ab 是 Android Backup 格式,并不是普通的 .tar 文件,需要通过工具处理。

下载 Android Backup Extractor 工具:

GitHub 地址:https://github.com/nelenkov/android-backup-extractor

然后使用如下命令解包:

java -jar abe.jar unpack my_backup.ab my_backup.tar

💡 如果你看到进度条跑完,没有报错,就说明解包成功了!


🧵 步骤三:解压 .tar 查看结构

运行下面命令查看 .tar 中都有哪些文件:

tar -tf my_backup.tar

典型结构可能如下:

apps/com.example.myapp/
apps/com.example.myapp/f/
apps/com.example.myapp/db/
apps/com.example.myapp/sp/

其中:

  • f/:通常是文件缓存、音频、图片等数据
  • db/:App 的 SQLite 数据库文件
  • sp/:SharedPreferences 的 XML 配置

你可以直接解压:

tar -xf my_backup.tar

然后去 apps/com.example.myapp/f/ 目录中查看你想要的数据,比如音频文件、缓存日志等。


🪤 踩坑记录

❌ 尝试用 dd 手动去头失败

一开始我尝试用命令跳过 24 字节 .ab 文件头:

dd if=my_backup.ab bs=1 skip=24 of=my_backup.tar

虽然可以得到一个 .tar 文件,但大概率解压会报错:

tar: Error opening archive: Unrecognized archive format

💥 原因:有些 .ab 文件是压缩过的,或者不是标准 .tar,建议使用 abe.jar 更稳妥。


✅ 总结

通过 adb backup + abe.jar,我们可以在 无需 root 的情况下 获取并分析 App 的私有数据,非常适合开发调试阶段使用,或者用于临时排查用户问题。


📌 注意事项

  • Android 10(API 29)之后 adb backup 被逐步废弃,建议在测试设备上使用较低版本系统
  • 仅能备份非加密、非 android:allowBackup="false" 的 App
  • 目标 App 必须是 debug 版或开发者签名

❤️ 如果你也在做类似的 App 数据分析,欢迎一起交流!