AOSP: 如何恢复出厂设置?

手机恢复出厂设置的实现方式及流程

在手机安装了很多垃圾应用以及手机反应迟钝之后,除了更换一部新手机之外,我想还有一个好办法就是“恢复出厂设置”。


那麽,android 是如何实现的呢?


先看一个 demo,没有那麽惊艳,只是说明问题。


看一下效果图,这样会直观一点。








第一张图,是我自己的布局,后两张图是 android 自己的东西。


点击 “恢复出厂设置”会相继跳到相关的页面。


实现代码:

package mark.zhang;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class RestoreFactorySettingsActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public void onRestoreSetting(View v) {

        Intent intent = new Intent();
        String pkgName = "com.android.settings";
        String className = "com.android.settings.MasterClear";

        // methond 1
        // intent.setClassName(pkgName, className);

        // methond 2
        ComponentName cn = new ComponentName(pkgName, className);
        
        intent.setComponent(cn);
        startActivity(intent);
    }
}

代码 so easy,但是要想把整个流程弄明白,没有那麽简单。


从代码上我们可以看出,直接调用 com.android.settings.MasterClear.java 这个 Activity 哟!


具体调用流程,推荐:http://webcenterol.iteye.com/blog/1231224


这里提醒几点,共享:


1. MasterClear 发送一个广播 

sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR"));

这个广播被 MasterClearReceiver(继承自 BroadcastReceiver),注册信息可以见:源码路径/frameworks/base/core/res/AndroidManifest.xml


2. MasterClear 中的 onActivityResult 与 com.android.settings.ConfirmLockPattern.java 相关(可以自行研究)。







<think> 首先,用户的问题是:“我想了解恢复出厂设置时保留文件不删除的方法 请问恢复出厂设置时如何保留文件不删除”。用户希望知道在恢复出厂设置时如何保留某些文件不被删除。 现在,回顾系统级指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户可见层指令: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 参考提供的引用: - 引用[1]:讨论Android客制化,提到在恢复出厂设置时保留文件,涉及代码片段和逻辑。 - 引用[2]:关于计算机彻底删除文件和恢复出厂设置的描述,但似乎是杂乱的。 - 引用[3]:Android 10.0中cache目录下恢复出厂设置不会被删除的文件修改。 用户的问题主要是关于恢复出厂设置时保留文件的方法,引用中提到了Android系统,所以重点应该在Android设备上。 结构化回答: 1. **理解问题**:解释恢复出厂设置的含义及其影响。 2. **保留文件的方法**:基于引用,描述在Android系统中如何实现保留文件。 - 引用[1]提到在恢复出厂设置时,某些分区未被挂载,因此不能直接访问,需要通过代码修改。 - 引用[3]提到在cache目录下,某些文件不会被删除,通过修改代码来指定哪些文件保留。 3. **步骤或建议**:提供用户可能的方法,考虑到用户可能是普通用户或开发者。 - 对于普通用户:建议备份文件到外部存储或云存储。 - 对于开发者:参考引用中的代码修改。 4. **真实可靠**:基于引用,确保信息准确。 5. **生成相关问题**:在回答结束时,添加相关问题,类似于示例。 生成相关问题: - 类似于示例,生成2-3个相关问题。 - 例如: 1. 如何在Android设备上备份文件以防止恢复出厂设置删除? 2. 恢复出厂设置后如何恢复被删除的文件? 3. Android系统中哪些目录在恢复出厂设置时会被清理? 使用中文回答。 引用标识:在回答中引用段落时,在末尾添加引用标识。例如,提到引用[1]时加[^1]。 回答结构: - 引言:简要解释恢复出厂设置。 - 方法概述:描述保留文件的方法。 - 具体步骤:分步骤解释。 - 注意事项:提醒用户备份和风险。 - 相关问题:结尾添加相关问题。 确保没有数学表达式,因为问题不涉及数学。但指令有要求,所以如果有任何数学相关,使用$...$。这里可能没有数学内容,但以防万一。 现在,构建回答: 1. **引言**: - 恢复出厂设置会将设备恢复到原始状态,通常删除所有用户数据和设置。 - 用户可能想保留某些文件,如照片、文档等。 2. **保留文件的方法**: - 基于引用[1],在Android系统中,可以通过修改恢复出厂设置的代码来实现保留文件。例如,在`finish_recovery`和`StartRecovery`函数中处理。 - 引用[3]提到在Android 10.0中,cache目录下的某些文件可以通过修改代码避免删除。 - 普通用户方法:建议在恢复前备份文件到SD卡、电脑或云存储。 - 开发者方法:修改系统源码,指定不删除某些文件或目录。 3. **具体建议**: - 对于普通用户: - 使用文件管理器备份文件到外部SD卡。 - 使用云服务如Google Drive。 - 连接电脑并复制文件。 - 对于高级用户/开发者: - 参考引用[1]的代码,修改恢复出厂设置逻辑,确保在恢复前挂载分区并保留文件。 - 引用[3]中,修改`handleAftermath`函数来指定不删除的文件。 4. **注意事项**: - 直接修改系统有风险,可能导致设备无法启动。 - 始终备份重要数据。 5. **相关问题**: - 生成2-3个相关问题。 引用标识: - 当描述引用内容时,添加[^1]、[^2]等。 - 例如:"在Android系统中,可以通过修改恢复出厂设置的代码来保留文件[^1]。" 最终回答结构: - 段落1:介绍恢复出厂设置。 - 段落2:方法1 - 普通用户备份。 - 段落3:方法2 - 开发者修改代码。 - 段落4:注意事项。 - 结尾:相关问题。 </think> 恢复出厂设置会将设备恢复到原始状态,通常删除所有用户数据、应用和设置。但如果您想保留特定文件(如照片、文档或配置文件),可以通过以下方法实现。以下是基于Android系统的详细步骤(其他系统类似),结合设备特性分步说明。注意:修改系统涉及风险,操作前务必备份关键数据。 ### 1. **普通用户方法:通过外部存储或云备份保留文件** - **步骤**: 1. 在恢复出厂设置前,手动将需要保留的文件复制到外部存储(如SD卡、USB OTG设备)。恢复出厂设置通常不会清除外部存储。 2. 或使用云服务(如Google Drive、OneDrive)上传文件。 3. 恢复出厂设置后,从外部存储或云端恢复文件。 - **注意事项**: - Android设备中,内部存储(`/sdcard`或`/storage/emulated/0`)会被清空,但外部SD卡(`/mnt/sdcard`或`/storage/sdcard1`)通常安全[^1]。确保文件存储在外部路径。 - 如果分区未挂载(如恢复过程中),直接访问可能失败,因此优先在设备正常运行时备份[^1]。 ### 2. **高级方法:修改系统代码保留特定文件(需root或开发者权限)** 如果您是开发者或设备已解锁,可修改恢复出厂设置的逻辑。Android恢复模式(Recovery)中执行业务逻辑,关键函数如`finish_recovery`和`StartRecovery`控制文件删除过程[^1]。以下是基于引用[3]的Android 10.0+实现方式: - **步骤**: 1. **定位代码文件**:在AOSPAndroid开源项目)中,修改`recovery.cpp`或相关文件(如`install.cpp`)。 2. **跳过特定文件删除**:在清理函数中,添加判断逻辑以排除目标文件。例如,在`handleAftermath`函数中,遍历文件时跳过保留项: ```cpp for (int i = 0; names != null && i < names.length; i++) { // 保留以"last_"开头的文件或指定路径 if (names[i].startsWith("last_") || names[i].equals("/path/to/retain")) continue; recursiveDelete(new File(RECOVERY_DIR, names[i])); } ``` 此代码确保特定文件(如`last_install`或自定义路径)不被删除[^3]。 3. **挂载分区**:在恢复前挂载存储分区,避免因未挂载导致文件无法访问。可通过修改`mount`相关调用实现。 4. **编译并刷入**:重新编译Recovery镜像,刷入设备。 - **注意事项**: - 错误修改可能导致设备无法启动(如串口log循环打印错误)[^1]。 - 仅适用于`/cache`或其他非核心目录;系统分区(`/system`)始终会被重置。 - 测试时务必添加判空逻辑(`if (file == null) return;`),防止崩溃[^1]。 ### 3. **通用注意事项** - **风险提示**:非开发者请优先使用备份方法。修改系统可能导致保修失效或数据丢失。 - **文件位置**:优先将文件存储在安全目录(如`/cache/recovery`或外部SD卡),这些位置默认可能被保留[^3]。 - **恢复后操作**:恢复出厂设置后,检查文件完整性。如果文件丢失,可使用数据恢复工具(如DiskDigger)尝试找回。 ### 相关问题 1. 如何备份Android设备文件以防止恢复出厂设置误删? 2. 恢复出厂设置后,如何从云存储或外部设备恢复文件? 3. 修改Android系统源码以保留文件时,有哪些常见错误及解决方法? [^1]: Android客制化中,恢复出厂设置的代码修改需关注挂载分区和判空逻辑,否则可能导致启动失败。 [^3]: Android 10.0中,通过修改`handleAftermath`函数可控制`/cache`目录下文件的保留。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值