设为首页收藏本站

移动叔叔

搜索
查看: 24338|回复: 2
打印 上一主题 下一主题

[教程] MIUI【双开应用】数据备份(android通用,分身数据)

[复制链接]
跳转到指定楼层
楼主
发表于 2017-9-13 18:11:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jonhy_love 于 2018-3-31 09:57 编辑

miui发帖子一直是审核不过,发在这了。
0 前言
        现在手机配置都高了,Android新版本也都支持手机分身应用双开(分身)。        应用虽然支持双开,但是数据备份方面各大厂商都不提供双开(分身)数据备份。



        就目前市面上所有的备份软件来说都不支持双开数据的备份,对于一些有需求的人来说双开的数据也很重要。

在此,分享一下自己最近的成果。(以下内容全部基于ROOT权限下)


尊重劳动成果,且方便读者深入了解,转载请说明出处!!!!!


1 备份到底要备份什么?
        在Android上应用我们可以安装,只需备份数据即可,那么数据备份哪些呢?一般数据分为sd卡的数据和data分区的数据。主要数据是data的数据。
比如QQ:本文后续以备份QQ双开数据为例)
/sdcard/tencent
/data/data/com.tencent.mobileqq
双开应用和手机分身数据参考:h删t删tp://w删w除w.miui.co汉m字/thread-4295910-1-1.ht汉ml

2 怎么去备份数据
        在Windows时候大家备份数据都只是打包压缩备份就行。在Android中这么做却不行。为什么呢?因为Android的底层是基于Linux系统,Linux系统对文件的权限控制比较复杂。如果我们按照Windows的方法直接用rootexplorer或者ES文件浏览器在ROOT后直接zip压缩备份数据,那么这份数据是无用的。因为文件的权限在解压后会变化,应用打开文件会出错提示数据损坏(权限不够)。
        在这我讲一下Linux的文件构成(Windows下也一样,只是Windows程序对权限这一块没那么严(fu)谨(za))。在Linux下文件包括文件本身和读写权限所有者以及seLinux的Context。这些东西都要备份(这样才算备份完全),才能够还原。

        Android是Linux内核的系统,所以可以运行对应构架的Linux程序,此处备份用到的是tar命令。系统自带的tar一般不行,(功能被精(yan)简(ge)),常规的tar工具支持备份文件权限和selinux属性。我们通过这个工具去压缩、解压就能达到备份还原的效果。


3 操作步骤:
1、手机root,不会的自己出门左转
2、安装busybox(百度busybox installer apk)或者刷TWRP的recovery(建议用TWRP操作)。之所以推荐TWRP,因为TWRP内置的busybox支持seLinux Context备份,直接安装的busybox不支持,还原时候会麻烦点。
3、这里如果你用TWRP必须用电脑才能执行adb命令,如果直接用busybox可以在手机安装“终端模拟器”执行命令。
4、启动终端模拟器(有电脑直接adb shell su)或者进入recovery后adb shell
这里分开写下,命令有点小区别,主要给小白好操作
//开头的汉字表示注释意思,不是命令,不用复制,复制红色部分命令就行
方法一:TWRP的recovery下备份还原QQ双开数据

miui$adb shell
root@libra:/ #
开始备份:


cd /data/user/999/com.tencent.mobileqq        //进入QQ双开的数据目录 微信改成 com.tencent.mm就行,其他应用自己去获取包名
mkdir /sdcard/backups      //在sd卡创建备份文件夹
tar cvpzf /sdcard/backups/com.tencent.mobileqq.tgz ./      //tar备份QQ数据到sd卡


这样就备份QQ双开数据到/sdcard/backups/com.tencent.mobileqq.tgz 这个压缩包文件了采用的gzip压缩。
开始还原:
tar xvpzf /sdcard/backups/com.tencent.mobileqq.tgz -C /data/user/999/com.tencent.mobileqq/     //还原SD卡的QQ数据到data分区

上述是在twrp的recovery下通过adb操作的命令。这样备份了文件、权限、selinux上下文。压缩包会比较大,因为selinux的权限。

方法二:开机状态下adb shell或终端模拟器下备份还原QQ双开数据miui$adb shell
shell@libra: su
在开机状态下直接用busybox的tar命令备份还原,需要记录并手动修改文件夹的所有者才行。(不会备份所有者和selinux信息)


开始备份:
cd /data/user/999/com.tencent.mobileqq     //进入QQ双开的数据目录 微信改成 com.tencent.mm就行,其他应用自己去获取包名
ls -l    //查看数据所有者

可以看到如下字样
drwx------ u999_a124 u999_a124          2017-09-13 15:55 tk
表示QQ双开应用属于u999_a124这个用户


tar cvpzf /sdcard/backups/com.tencent.mobileqq.tgz ./            //tar备份QQ数据到sd卡
备份完毕

开始还原:
cd /data/user/999/com.tencent.mobileqq
tar xvpzf /sdcard/backups/com.tencent.mobileqq.tgz -C ./            //还原SD卡的QQ数据到data分区
chown -R u999_a124:u999_a124 /data/user/999/com.tencent.mobileqq        //修改QQ数据的所有者为u999_a124
还原完毕


至此,数据备份还原就结束了。在还原数据结束后启动双开的QQ有可能会闪退几次,不用管不断的点,7/8次后就正常能进了




最后几点注意点:
1、下载busybox installer并安装busybox
2、TWRP和开机状态下的备份还原区别在于文件所有者,TWRP的busybox会备份这个数据,开机状态下的busybox不支持该功能
3、开机状态下的busybox操作需要查看所有者并修改所有者,每个应用的所有者都不同。
4、每个应用的包名不同,自己去看就知道
5、我的机器是刷的三方官改包,selinux是 Permissive状态,不需要备份selinux,只要备份权限修改所有者就行。
6、如果还原后提示QQ运行停止错误,报告错误信息。一般是所有者没修改,自己修改所有者。
7、查看所有者 可以执行 ls -l /data/user/999/com.tencent.mobileqq 或者 ps |grep com.tencent.mobileqq
8、其他品牌或者系统建议在adb下执行getenforce 先查看是否selinux开启 参考:ht删tp://bgu除ncle.blog.51cto.co汉m/3184079/957字315/

附录:(上边不懂的继续看下去)
1、查看应用数据文件所有者
adb shell下执行命令:ps |grep com.tencent.mobileqq                                                  <
显示如下:
u0_a124   5356  476   1743032 73844 ffffffff f6f021e4 S com.tencent.mobileqq:MSF
u999_a124 8269  476   1746004 74576 ffffffff f6f021e4 S com.tencent.mobileqq:MSF
u0_a124   11338 476   1838676 171240 ffffffff f6f021e4 S com.tencent.mobileqq
u999_a124 12827 476   1848620 189584 ffffffff f6f021e4 S com.tencent.mobileqq
u0_a124   13619 476   1737772 82708 ffffffff f6f021e4 S com.tencent.mobileqq:TMAssistantDownloadSDKService
u999_a124 13841 476   1735348 81784 ffffffff f6f021e4 S com.tencent.mobileqq:TMAssistantDownloadSDKService

u0表示非双开的,u999表示双开的。从上边可以看到 双开QQ的所有者是u999_a124

adb shell下执行命令:ls -l /data/user/999/com.tencent.mobileqq
显示如下:
drwx------ u999_a124 u999_a124          2017-09-11 17:20 jpeglib
lrwxrwxrwx install  install           2017-09-13 16:17 lib -> /data/app/com.tencent.mobileqq-1/lib/arm
-rw------- u999_a124 u999_a124        0 2017-08-18 10:43 permissions.txt
drwx------ u999_a124 u999_a124          2017-09-11 17:20 qav
drwx------ u999_a124 u999_a124          2017-09-11 17:20 scanfu
drwxrwx--x u999_a124 u999_a124          2017-09-13 17:07 shared_prefs
drwx------ u999_a124 u999_a124          2017-09-13 15:55 tk
drwx------ u999_a124 u999_a124          2017-09-11 17:20 txPttlib
drwx------ u999_a124 u999_a124          2017-09-11 19:35 txlib

u0表示非双开的,u999表示双开的。从上边可以看到 双开QQ的所有者是u999_a124

最后加一句,需要关闭selinux权限,否则无法打开数据文件。具体可自行百度。selinux enforced 改为permissive 或者disabled,





沙发
发表于 2020-6-22 15:02:27 | 只看该作者
牛啊!这么好的帖子竟然没人回复!

 

回复

使用道具 举报

藤椅
发表于 2020-11-20 22:58:12 | 只看该作者
风暴弗里曼 发表于 2020-6-22 15:02
牛啊!这么好的帖子竟然没人回复!

确实是篇顶级文章,专门注册账号来感谢作者

 

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

© 2008-2024 移动叔叔. 版权所有,专业的网络售后平台 ( 闽ICP备18006692号-3 )

商务合作点击这里给我发消息|Email:service@mobileuncle.com|手机版|移动叔叔     

GMT+8, 2024-12-27 00:07 , Processed in 0.264538 second(s), 16 queries , Gzip On, Memcache On.

返回顶部