一直以来钛备份都可以完美备份安卓 app 的应用数据,包括所谓的用户登录状态都备份起来。
一般全量备份数据推荐使用 TWRP(recovery) 进行对手机刷机前备份,类似于 windows 中的 ghost 对硬盘分区完整备份。但往往手机存储剩余较少无法满足全量备份,手机也不方便外接硬盘去备份数据。
钛备份对于更换手机或者刷机备份都尤为重要,如果你不想通过 TWRP 全量备份的话,使用钛备份可以轻松将应用 APK、应用数据、用户数据完整备份并恢复。
但钛备份已经好几年没有更新了,也没有支持应用分身中的数据备份,这部分数据就需要自己来进行备份。
本文以 wechat 举例,简单记录下备份的数据与恢复到新手机的过程,同样也是需要 root 方可进行,并需要 busybox 支持(magisk 已内置)。
数据存储位置
应用数据存储目录 /data/data/com.tenent.mm
默认应用用户数据存储目录 /data/user/0/com.tencent.mm
分身应用用户数据存储目录 /data/user/999/com.tencent.mm
其他 /sdcard 中应用附属数据自行考虑备份,我选择丢弃
备份数据
建议在备份手机上使用终端命令进行备份数据,不建议通过软件备份,因为软件会首先将所有文件扫描一遍统计好数量,大小后再进行备份,对于某些应用存在很多小文件非常影响速度。
这里使用 termux 或者 MT 管理器的终端,同样需要提权到 root
提权 root 并备份 wechat 分身应用数据
su
tar -czf /sdcard/com.tencent.mm.tar.gz /data/user/999/com.tencent.mm
将 /sdcard/com.tencent.mm.tar.gz 复制到新设备中。
恢复数据
在将要恢复的手机设备上,建议先安装好应用,这样就不需要再备份应用 APK 去到新手机设备中,确保兼容性也推荐装同版本的应用,并从 Google Play 下载安装好。
安装好后,如果你想恢复到普通用户空间,直接直接恢复到应用目录就行,如果想恢复到分身空间,先在系统里开启对这个应用的分身功能,系统会给该应用在 /data/user/999 里面创建一份对应的目录。
这个目录文件的权限信息非常重要,默认系统都开启了 selinux 机制,我们需要将恢复的数据和这个目录改的一致才能使用,否则就必须关闭 selinux。
提权,并更改系统空分身应用的用户目录名
su
cd /data/user/999/
mv com.tencent.mm com.tencent.mm5
将上个设备备份的数据包放置到 sdcard 根目录
解压数据包进行恢复到分身空间
tar -xzf /sdcard/com.tencent.mm.tar.gz -C /data/user/999/
执行完毕,此时如果在不关闭 selinux 的情况下,进入应用会出现闪退或者根本无法启动的情况。你也可以选择关闭 selinux 来解决该问题。
临时关闭如下,永久关闭自行搜索解决方案。
setenforce 0
调整权限
为了不关闭 selinux,来完美解决该问题,需要将目录的所属用户、所属用户组、文件权限、selinux 安全上下文都和分身空间原本的目录改为一致才行。
查看当前设备,原本分身空间用户权限信息。
cd /data/user/999
ls -ahl
将刚刚解压后的目录所有者设置为和分身应用一致(我这里的 com.tencent.mm5 是开启分身应用后系统生成的,需要参照它设置)
chown -R u999_a226:u999_a226 com.tencent.mm
设置目录权限为 700,一般不需要执行,除非你是通过其他方式备份恢复的文件。
chmod -R 700 com.tencent.mm
接下来对文件目录更改 selinux 安全上下文,首先查看分身空间这个应用默认的上下文字段。
ls -Zl
其中 selinux 安全上下文字段解释如下:
u:object_r:app_data_file:s0:c226,c256,c743,c771
身份:角色 : 类型 : 灵敏度: [类别,可选]
使用 chcon 来更改上下文字段,chcon 有个便捷之处就是可以很方便的以另外一个目录作为参考将指定目录设置为一致的安全上下文,所以有了刚才备份的目录,现在一个指令就能搞定。
/data/adb/magisk/busybox chcon -R --reference=com.tencent.mm5 com.tencent.mm
chcon: can't obtain security context: com.tencent.mm/lib
如果出现了上述错误,不要紧,只因那个文件是个软连接,可以忽略。
记得使用 busybox 中的 chcon,很多系统中的 chcon 是不具备完整的安全上下文更改功能,被阉割了。
杀掉应用进程,重新访问即可正常使用
ps -ef|grep com.tencent.mm|grep -v grep|awk '{print $2}'|xargs kill -9
接下来就可以正常使用了。
Comments