在OpenHarmony系统中,恢复出厂设置(也称为"恢复工厂默认设置")是一种将设备恢复到初始状态的操作,通常用于解决系统故障、清除用户数据或重置设备。
恢复出厂设置的作用
清除用户数据:删除所有用户安装的应用、设置、个人文件(如照片、文档等)。
重置系统设置:将系统参数恢复到出厂时的默认值(如网络设置、语言、时区等)。
修复系统问题:解决因软件冲突、系统卡顿或配置错误导致的问题。
系统版本不变:恢复出厂设置不会更改系统版本,仅清除用户数据
1. 思维导图
2. 源码坐标
功能 |
路径 |
关键符号 |
行号 |
备注 |
统一 C++ 入口 |
base/update/ota_service/src/factory_reset.cpp |
FactoryReset::resetToFactory() |
45-55 |
仅作合法性检查 + 写标志 |
JS ArkTS 封装 |
base/update/ota_service/js/napi/factory_reset_napi.cpp |
napi_factory_reset() |
28-36 |
透调到 C++ |
终端脚本 |
base/update/updater/tools/write_updater.cpp |
main() |
60-70 |
写 /misc/boot/mode |
擦除脚本 |
base/update/updater/scripts/updater-script |
erase_userdata() |
120-130 |
调用 blockdev --wipe |
白名单列表 |
vendor/xxx/etc/factory_reset_keep.json |
纯文本 |
无行号 |
每行一个保留路径 |
bash
复制代码
方式1:
import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; #导入abilityAccessCtrl
async function factoryReset() {
try {
let atManager = abilityAccessCtrl.createAtManager();
await atManager.reset('factory');
console.log('恢复出厂设置初始化成功');
} catch (err) {
console.error(`恢复出厂设置错误: ${err.code}, ${err.message}`);
}
}
方式2:
使用文件系统操作
import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';
async function customFactoryReset() {
try {
// 1. 删除用户数据分区
await fs.rmdir('/data/user');
// 2. 恢复系统配置文件
await fs.copy('/system/etc/factory_defaults', '/data');
// 3. 重启设备
let power = await import('@ohos.power');
power.reboot('factory-reset');
} catch (err) {
console.error(`Custom factory reset failed: ${(err as BusinessError).message}`);
}
}
方式3:擦除系统数据和重启系统的方式
#include "reset_service.h"
void FactoryReset(struct HdfDeviceObject *device)
{
// 擦除user分区
BlockErase("/dev/block/by-name/userdata");
// 恢复出厂分区
BlockRestore("/dev/block/by-name/factory");
// 重启系统
SystemReboot();
}
3. 终端命令
bash
复制代码
# 1 连接设备
hdc shell
# 2 写入标志
write_updater user_factory_reset
# 3 重启到 updater
reboot updater
该种方式原理就是重置用户数据,实际代码可以使用如下方式来实现恢复出厂设置:
import { childProcess } from '@ohos.process';
async function FactoryReset() {
try {
let cmd = 'reset factory';
let result = await childProcess.execute(cmd);
console.log(`Factory reset command executed: ${result.exitCode}`);
} catch (err) {
console.error(`Execute factory reset failed: ${err.code}, ${err.message}`);
}
}
执行后 90 s 内完成擦除并自动重启到开机向导。
4. 参数与文件
文件 |
作用 |
示例内容 |
/misc/boot/mode |
重启模式标志 |
user_factory_reset |
/system/etc/factory_reset_keep.list |
保留路径白名单 |
/data/vendor/camera/calibration.dat |
/system/etc/updater-script |
擦除脚本 |
erase("/dev/block/by-name/userdata") |
ohos.permission.FACTORY_RESET |
权限声明 |
系统应用必须申请 |
5. 需求定制思路
需求 |
修改点 |
验证方法 |
保留相机校准 |
在 factory_reset_keep.list 追加 /data/vendor/camera/* |
恢复后 ls /data/vendor/camera 文件存在 |
禁止低电量重置 |
在 FactoryReset::resetToFactory() 加 if (soc < 15) return ERR_LOW_BATTERY; |
返回错误码 2001 |
重置前云备份 |
在 updater-script 前插入 exec /system/bin/cloud_backup.sh |
日志出现 cloud_backup_success |
重置后自动 OTA |
在 updater-script 最后加 exec /system/bin/ota_client |
日志出现 ota_start |
双分区回滚 |
保持 AB 分区,失败自动回滚 |
getprop ro.boot.slot_suffix 切换 |
重置后首次开机向导 |
无需修改,系统默认 |
出现 com.ohos.setupwizard |
重置后自动激活 |
在 updater-script 最后加 exec /system/bin/auto_activate |
日志出现 activate_success |
重置后自动注册 |
在 updater-script 最后加 exec /system/bin/auto_register |
日志出现 register_success |
重置后保留蓝牙配对 |
在 factory_reset_keep.list 追加 /data/misc/bluedroid/* |
蓝牙自动连接 |
重置后保留 Wi-Fi 配置 |
在 factory_reset_keep.list 追加 /data/misc/wifi/* |
Wi-Fi 自动连接 |
重置后保留输入法词库 |
在 factory_reset_keep.list 追加 /data/user/0/com.inputmethod/dict |
输入法词库保留 |
重置后保留企业证书 |
在 factory_reset_keep.list 追加 /data/misc/keystore/* |
证书不丢失 |
6. 验证脚本
bash
复制代码
#!/bin/bash
set -e
echo "=== 1 备份相机校准 ==="
# OpenHarmony相机校准路径通常为/data/service/el0/camera
hdc shell "tar -czf /data/service/el0/camera_backup.tgz -C /data/service/el0/camera ."
echo "=== 2 触发重置 ==="
# OpenHarmony专用重置命令(需要系统权限)
hdc shell "param set persist.sys.factory.reset 1"
hdc shell "reboot recovery" # 进入恢复模式执行重置
echo "=== 3 等待重启 ==="
# 增加重试机制和超时检测
timeout=300
elapsed=0
while [ $elapsed -lt $timeout ]; do
if hdc shell getprop | grep -q 'sys.boot_completed=1'; then
break
fi
sleep 5
elapsed=$((elapsed+5))
done
if [ $elapsed -ge $timeout ]; then
echo "错误:设备未在${timeout}秒内完成启动"
exit 1
fi
echo "=== 4 验证保留文件 ==="
# OpenHarmony相机校准文件验证(支持多目录检测)
hdc shell "ls /data/service/el0/camera | grep -E 'calibration|cam_cal'"
echo "=== 5 验证重置成功 ==="
# 检查OpenHarmony专用重置标志
if hdc shell getparam | grep -q 'factory.reset.mode=1'; then
echo "PASS: 恢复出厂设置验证成功"
else
echo "FAIL: 未检测到重置标志"
exit 1
fi
7. 注意事项
- 权限 :仅系统应用可声明
ohos.permission.FACTORY_RESET
。
- 数据 :
/data
与 /cache
默认全擦;白名单文件除外。
- 升级 :
updater-script
随 OTA 更新,可热修复。
- 回滚:AB 分区机制保证失败自动回滚旧系统。