换了手机之后,把旧手机的联系人、通话记录等数据迁移到新手机上
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的数据,请恢复前再次备份!!!`**
descript.xml
和通话记录(com.android.contacts).bak
复制到手机MIUI/backup/AllBackup/yyyyMMdd_HHmmss
的文件,替换为生成的文件