🛠️ 如何查看自己 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 版或开发者签名