场景
换了手机之后,把旧手机的联系人、通话记录等数据迁移到新手机上
思路
1. 使用新手机和旧手机分别备份通话记录,不同手机备份文件所在位置可能不一样,一般在MIUI/backup/AllBackup/yyyyMMdd_HHmmss类似的目录下,把文件分别复制到new目录和old目录下
2. 读取旧备份文件的'apps'前的字节,读取新备份文件'apps'前的字节
3. 将旧备份文件'apps'前的字节替换为新备份文件'apps'前的字节
4. 保存生成新的备份文件
代码实现
import shutil
# 读取指定字符串前的字节,并转换为16进制展示
def read_file_before_string(file_path, string):
with open(file_path, 'rb') as file:
data = file.read()
index = data.find(string.encode()) # 查找特定字符串的位置
if index != -1:
data = data[:index] # 截取特定字符串之前的数据
return data.hex() # 转换为十六进制形式
# 读取原备份文件,替换指定字节后并保存为新的备份文件
def replace_and_save(file_path, string, new_content, new_file_path):
with open(file_path, 'rb') as file:
data = file.read()
index = data.find(string.encode()) # 查找特定字符串的位置
if index != -1:
new_data = new_content + data[index:] # 替换内容
with open(new_file_path, 'wb') as new_file:
new_file.write(new_data) # 写入新文件
# 复制文件
def copy_file(source_file, destination_dir):
shutil.copy2(source_file, destination_dir)
old_bak_file_path=r'D:\miui\old\通话记录(com.android.contacts).bak' # 旧手机的备份文件路径
new_bak_file_path=r'D:\miui\new\通话记录(com.android.contacts).bak' # 新手机的备份文件路径
string='apps' # 请勿更改
new_content=bytes.fromhex(read_file_before_string(new_bak_file_path,string)) # 读取新备份文件的miui头字节
output_bak_file_path=r'D:\miui\output\通话记录(com.android.contacts).bak' # 最终生成的适配新手机的备份文件
replace_and_save(old_bak_file_path, string, new_content, output_bak_file_path)
# 复制新手机备份中的descript.xml到out目录
new_descript_file_path=r'D:\miui\new\descript.xml'
destination_dir=r'D:\miui\output'
copy_file(new_descript_file_path,destination_dir)
执行之后,重要提示:恢复的APP会覆盖当前已经安装的APP的数据,请恢复前再次备份!!!`**
- 把out目录下即可拿到适配新手机的两个文件
descript.xml
和通话记录(com.android.contacts).bak
复制到手机 - 把新手机备份
MIUI/backup/AllBackup/yyyyMMdd_HHmmss
的文件,替换为生成的文件 - 回到数据恢复界面
- 点击恢复即可
总结
- 适合单应用的数据恢复
- 适合旧手机向旧手机或旧手机向新手机进行数据迁移
- 不适合微、qq,miui备份时做了处理
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦