精华内容
下载资源
问答
  • 关于怎么进入recovery模式这个问题,小编我是想了很久才想到的。但是小编在想到的同时,也想要现在立刻马上和小伙伴们分享,所以才会有出现在这里的我。那么下面我们就开始说recovery模式的进入方法吧。小伙伴们,...

    关于怎么进入recovery模式这个问题,小编我是想了很久才想到的。但是小编在想到的同时,也想要现在立刻马上和小伙伴们分享,所以才会有出现在这里的我。那么下面我们就开始说recovery模式的进入方法吧。

    小伙伴们,我们都知道,要想要多视频进行操作,那就得先进入recovery模式。但是说到进入recovery模式,那问题就来了。该怎么进入呢?没事儿,小编接下来就是来告诉你们怎么进入的,所以你们赶紧往下滑~

    首先,上网搜索并下载“蘑菇云”。下载完成后,直接运行其安装程序进行安装。

    68442409df041c04d3cf8c34c63861aa.png

    recovery电脑图解1

    67c147f678a0a8fbff28a347599d280b.png

    进入recovery模式电脑图解2

    然后,将手机通过USB数据线与电脑相连,如下图所示,先点“设置”,再点“应用程序”,再点“开发”,最后点“usb调试”。

    8c84b8beffa7e5f1ef783cb5ef28fb68.png

    进入recovery模式电脑图解3

    接着,直接运行“蘑菇云”程序。此时程序就会自动安装与当前手机相匹配的驱动程序。

    adf23b435c02334c3cae832b1e16efb5.png

    recovery模式电脑图解4

    下一步,手机驱动程序安装完成后,切换到“工具”,然后找到并点击“进入Recovery模式”。

    23796a75d8bedcb91a7684c1ea30c1fd.png

    recovery电脑图解5

    最后,手机会自动重启,并进行Recovery模式。

    87585cf10cff4f8311f8ef8f25152629.png

    recovery模式进入电脑图解6

    展开全文
  • 很多Android安卓手机刷机或者刷字体需要进入recovery模式。那么 如何进入recovery模式? 很多新手比较迷茫!这里就说下进入方法:什么是recovery?如何进入recovery模式?其实我们可以从recovery这个单词中看出所谓的...

    什么是recovery?很多Android安卓手机刷机或者刷字体需要进入recovery模式。那么 如何进入recovery模式? 很多新手比较迷茫!这里就说下进入方法:

    什么是recovery?如何进入recovery模式?

    其实我们可以从recovery这个单词中看出所谓的recovery模式就是一个恢复模式,用户进入这个模式之后,可以对当前用户的一些数据进行清除,并恢复出厂设置。而比较官方的解释recovery模式是什么意思的话,则是recovery模式是手机系统的一个工程模式,用户通过同时按住开机键加音量减小键加拨号键(部分机型),直到手机界面出现一个三角框里面一个感叹号即是进入了传说中的recovery模式,在这个模式中用户可以看到以下的内容(不同的手机显示的内容不同):

    9947980_3053_130723103217_1_thumb.jpg

    reboot system now: 重启系统

    apply sdcard:update.zip: 应用SD卡中的update.zip

    wipe data/factory reset: 清空数据/设定工厂模式

    backup rom to sdcard: 备份ROM到SD卡

    restore rom from sdcard: 从SD卡还原ROM

    toggle app2sd: 触发APP TO SD

    其中常用的功能就是wipe data/factory reset,这是刷机前必有的操作,不然会出现刷机卡住的现象;apply sdcard:update.zip这个选项就是将我们的ROM刷机包放在SD卡中,从这个选项中选择,然后开始刷机。

    以上就是小编为大家解释的recovery模式是什么意思以及进入recovery模式的方法,希望对你有所帮助。

    展开全文
  • Android系统升级 Recovery模式(01)Recovery模式启动 Android系统升级 Recovery模式(02)Recovery升级过程 Android系统升级 Recovery模式(03)update-binary模块 本模块分享的内容:Recovery模式启动 本章...

    该系列文章总纲链接:专题分纲目录 Android系统升级 Recovery模式


    本章关键点总结 & 说明:

    导图是不断迭代的,这里主要关注➕ recovery模式启动部分即可,主要从 更新包简介,mian函数解析开始解读,分析了main函数中关键的方法 获取参数getargs和执行菜单命令prompt_and_wait。

    对于recovery模式,一般均采用第三方的方案,比如:在使用MTK平台时,我们这边一般会直接采用广升FOTA的服务商直接进行升级相关的工作。对于第三方的recovery代码,实际上也是参考android原生代码进行改动,核心原理不变,因此这里对recovery模式的代码研究还是采用 google 的原生recovery代码。

    android 启动时会通过组合键 判定是否进入recovery模式,也可以通过android的RecoverySystem来进入。recovery模式下还是会启动bootloader、kernel,最后会通过bootargs来判定,如果进入recovery模式则加载recovery专属的rc文件,进而进入到recovery模式。

    recovery模式主要是使用升级包进行升级,升级包解压后一般是这样

    包含的文件简要说明:

    1. boot.img:更新boot分区所需要的文件。这个boot.img主要包括kernel+ramdisk。
    2. system/  :内容在升级后会放在系统的system分区。主要用来更新系统的一些应用或则应用会用到的一些库
    3. recovery/ :中的recovery-from-boot.p是boot.img和recovery.img的补丁(patch),主要用来更新recovery分区,其中etc/目录下的install-recovery.sh是更新脚本。
    4. META-INF放的是更新包的签名文件和更新脚本,只有更新包的签名和设备签名匹配才能进行系统升级,包含三个关键文件。

     

    最后META-INF的几个文件解读如下所示:

    1. CERT.RSA:与签名文件相关联的签名程序块文件,它存储了用于签名JAR文件的公共签名。
    2. CERT.SF:这是JAR文件的签名文件,其中前缀CERT代表签名者。
    3. MANIFEST.MF:manifest文件定义了与包的组成结构相关的数据。
    4. update-binary:二进制文件,相当于脚本解释器,能够识别updater-script中描述的操作。
    5. updater-script:脚本文件,具体描述了更新过程。我们可以根据具体情况编写该脚本来适应我们的具体需求。
    6. metadata:描述设备信息及环境变量的元数据。主要包括一些编译选项,签名公钥,时间戳以及设备型号等。

    接下来我们从main函数启动开始分析,到如何传递参数,以及如何执行菜单命令 角度来逐步分析。

    1 main函数启动分析

    int main(int argc, char **argv) {
        time_t start = time(NULL);
    
        redirect_stdio(TEMPORARY_LOG_FILE);
        if (argc == 2 && strcmp(argv[1], "--adbd") == 0) {
            adb_main();//如果参数中有adb,作为adbd的daemon启动
            return 0;
        }
        //读取/etc/recovery.fstab文件,保存了recovery模式下分区情况(名称+参数)
        load_volume_table();
        ensure_path_mounted(LAST_LOG_FILE);
        rotate_last_logs(KEEP_LOG_COUNT);
        //获得启动参数(按照优先级,分别是recovery->misc->/cache/recovery/command中命令)
        get_args(&argc, &argv);
    
        const char *send_intent = NULL;
        const char *update_package = NULL;
        int wipe_data = 0, wipe_cache = 0, show_text = 0;
        bool just_exit = false;
        bool shutdown_after = false;
    
        int arg;
        //解析启动参数
        while ((arg = getopt_long(argc, argv, "", OPTIONS, NULL)) != -1) {
            switch (arg) {
            case 's': send_intent = optarg; break;
            case 'u': update_package = optarg; break; //升级系统
            case 'w': wipe_data = wipe_cache = 1; break; //擦出数据
            case 'c': wipe_cache = 1; break; //擦除cache
            case 't': show_text = 1; break;//指示升级时是否显示UI
            case 'x': just_exit = true; break; //退出
            case 'l': locale = optarg; break; //指定locale
            //...
            case '?':
                LOGE("Invalid command argument\n");
                continue;
            }
        }
        //...
    
        //Device很多函数是空函数,设计上留给厂商实现。
        Device* device = make_device();
        ui = device->GetUI();
        gCurrentUI = ui;
    
        ui->SetLocale(locale);
        ui->Init();
    
        int st_cur, st_max;
        if (stage != NULL && sscanf(stage, "%d/%d", &st_cur, &st_max) == 2) {
            ui->SetStage(st_cur, st_max);
        }
    
        ui->SetBackground(RecoveryUI::NONE);
        if (show_text) ui->ShowText(true);
        //SElinux相关
    
        device->StartRecovery();//空函数
    
        printf("Command:");
        for (arg = 0; arg < argc; arg++) {
            printf(" \"%s\"", argv[arg]);
        }
        printf("\n");
    
        if (update_package) {//预处理更新命令
            if (strncmp(update_package, "CACHE:", 6) == 0) {
                int len = strlen(update_package) + 10;
                char* modified_path = (char*)malloc(len);
                strlcpy(modified_path, "/cache/", len);
                strlcat(modified_path, update_package+6, len);
                printf("(replacing path \"%s\" with \"%s\")\n",
                       update_package, modified_path);
                update_package = modified_path;
            }
        }
        printf("\n");
    
        property_list(print_property, NULL);
        property_get("ro.build.display.id", recovery_version, "");
        printf("\n");
    
        int status = INSTALL_SUCCESS;
    
        if (update_package != NULL) {
            //如果更新系统
            status = install_package(update_package, &wipe_cache, TEMPORARY_INSTALL_FILE, true);
            if (status == INSTALL_SUCCESS && wipe_cache) {
                //更新成功,启动并擦出cache
                if (erase_volume("/cache")) {
                    LOGE("Cache wipe (requested by package) failed.");
                }
            }
            if (status != INSTALL_SUCCESS) {
                ui->Print("Installation aborted.\n");
                char buffer[PROPERTY_VALUE_MAX+1];
                property_get("ro.build.fingerprint", buffer, "");
                if (strstr(buffer, ":userdebug/") || strstr(buffer, ":eng/")) {
                    ui->ShowText(true);//屏幕上打印失败版本信息
                }
            }
        } else if (wipe_data) {//擦除数据
            if (device->WipeData()) status = INSTALL_ERROR;
            if (erase_volume("/data")) status = INSTALL_ERROR;
            if (wipe_cache && erase_volume("/cache")) status = INSTALL_ERROR;
            if (erase_persistent_partition() == -1 ) status = INSTALL_ERROR;
            if (status != INSTALL_SUCCESS) ui->Print("Data wipe failed.\n");
        } else if (wipe_cache) {//擦除cache
            if (wipe_cache && erase_volume("/cache")) status = INSTALL_ERROR;
            if (status != INSTALL_SUCCESS) ui->Print("Cache wipe failed.\n");
        } else if (!just_exit) {//只是退出
            status = INSTALL_NONE;  // No command specified
            ui->SetBackground(RecoveryUI::NO_COMMAND);
        }
    
        if (status == INSTALL_ERROR || status == INSTALL_CORRUPT) {
            copy_logs();
            //执行命令错误,屏幕上显示标志
            ui->SetBackground(RecoveryUI::ERROR);
        }
        Device::BuiltinAction after = shutdown_after ? Device::SHUTDOWN : Device::REBOOT;
        if (status != INSTALL_SUCCESS || ui->IsTextVisible()) {
            //进入菜单模式
            Device::BuiltinAction temp = prompt_and_wait(device, status);
            if (temp != Device::NO_ACTION) after = temp;
        }
        
        // Save logs and clean up before rebooting or shutting down.
        finish_recovery(send_intent);
        //根据after参数设置,关闭/重启系统
        switch (after) {
            case Device::SHUTDOWN:
                ui->Print("Shutting down...\n");
                property_set(ANDROID_RB_PROPERTY, "shutdown,");
                break;
    
            case Device::REBOOT_BOOTLOADER:
                ui->Print("Rebooting to bootloader...\n");
                property_set(ANDROID_RB_PROPERTY, "reboot,bootloader");
                break;
            default:
                ui->Print("Rebooting...\n");
                property_set(ANDROID_RB_PROPERTY, "reboot,");
                break;
        }
        sleep(5); // should reboot before this finishes
        return EXIT_SUCCESS;
    }
    

    main函数并不复杂,主要实现了几个关键功能:

    1. 加载recovery.fstab分区表
    2. 获取启动参数
    3. UI初始化 ( 厂商接口)
    4. 解析并执行相关命令(升级/擦除数据 /擦除cache/退出)
    5. 显示菜单(如果失败,显示失败的版本信息)
    6. 退出recovery,根据参数,关闭/重启系统

    2 如何传递参数

    2.1 关键结构体bootloader_message

    Bootloader和reovery模块以及主系统分区通信主要是通过misc来完成的,misc的数据结构是bootloader_message,定义如下:

    struct bootloader_message {
        char command[32];//bootloader 启动时读取改数据,决定是否进入recovery模式
        char status[32]; //由recovery或者bootloader进行更新,标识升级的结果;
        /* 由Android系统进行写入,recovery从中读取信息,以recovrery开头,
        后面是recovery中执行的命令,命令以\n分割 */
        char recovery[768];
    
        // The 'recovery' field used to be 1024 bytes.  It has only ever
        // been used to store the recovery command line, so 768 bytes
        // should be plenty.  We carve off the last 256 bytes to store the
        // stage string (for multistage packages) and possible future
        // expansion.
        char stage[32];
        char reserved[224];
    };

    command命令详细说明:

    1. 如果command的值是boot-recovery,则进入recovery模式
    2. 如果command的值是update-radia /update-hboot,则进入firmware模式,由bootloader更新
    3. 如果command的值是NULL,则进入主系统,正常启动。

    recovery命令详细说明:存放的是recovery模块启动时的参数。

    2.2 getargs获取参数(misc分区相关)

    代码如下:

    static void get_args(int *argc, char ***argv) {
        struct bootloader_message boot;
        memset(&boot, 0, sizeof(boot));
        //读取misc分区命令到boot变量中
        get_bootloader_message(&boot);  // this may fail, leaving a zeroed structure
        stage = strndup(boot.stage, sizeof(boot.stage));
        //...
        if (*argc <= 1) {//如果命令没有传递参数
            boot.recovery[sizeof(boot.recovery) - 1] = '\0';  // Ensure termination
            const char *arg = strtok(boot.recovery, "\n");
            //从misc分区中读取命令建立启动参数,这样argc和argv就会有新的值。
            if (arg != NULL && !strcmp(arg, "recovery")) {
                *argv = (char **) malloc(sizeof(char *) * MAX_ARGS);
                (*argv)[0] = strdup(arg);
                for (*argc = 1; *argc < MAX_ARGS; ++*argc) {
                    if ((arg = strtok(NULL, "\n")) == NULL) break;
                    (*argv)[*argc] = strdup(arg);
                }
            } else if (boot.recovery[0] != 0 && boot.recovery[0] != 255) {
            }
        }
    
        if (*argc <= 1) {//如果从misc分区中没有读到命令
            //COMMAND_FILE 为/cache/recovery/command
            FILE *fp = fopen_path(COMMAND_FILE, "r");
            if (fp != NULL) {
                char *token;
                char *argv0 = (*argv)[0];
                *argv = (char **) malloc(sizeof(char *) * MAX_ARGS);
                (*argv)[0] = argv0;  // use the same program name
    
                char buf[MAX_ARG_LENGTH];
                //使用读取的文件内容建立启动参数
                for (*argc = 1; *argc < MAX_ARGS; ++*argc) {
                    if (!fgets(buf, sizeof(buf), fp)) break;
                    token = strtok(buf, "\r\n");
                    if (token != NULL) {
                        (*argv)[*argc] = strdup(token);  // Strip newline.
                    } else {
                        --*argc;
                    }
                }
                check_and_fclose(fp, COMMAND_FILE);
            }
        }
        //把启动参数放到boot对象中
        strlcpy(boot.command, "boot-recovery", sizeof(boot.command));
        strlcpy(boot.recovery, "recovery\n", sizeof(boot.recovery));
        int i;
        for (i = 1; i < *argc; ++i) {
            strlcat(boot.recovery, (*argv)[i], sizeof(boot.recovery));
            strlcat(boot.recovery, "\n", sizeof(boot.recovery));
        }
        set_bootloader_message(&boot);
    }

    这里继续分析上面提到的关键点

    @1 get_bootloader_message的实现如下:

    int get_bootloader_message(struct bootloader_message *out) {
        Volume* v = volume_for_path("/misc");//打开misc分区
        //...
        if (strcmp(v->fs_type, "mtd") == 0) {//mtd格式
            return get_bootloader_message_mtd(out, v);
        } else if (strcmp(v->fs_type, "emmc") == 0) {//emmc格式
            return get_bootloader_message_block(out, v);
        }
        LOGE("unknown misc partition fs_type \"%s\"\n", v->fs_type);
        return -1;
    }

    该方法主要是从misc分区读取数据。

    @2 set_bootloader_message的实现如下:

    int set_bootloader_message(const struct bootloader_message *in) {
        Volume* v = volume_for_path("/misc");
        //...
        if (strcmp(v->fs_type, "mtd") == 0) {
            return set_bootloader_message_mtd(in, v);
        } else if (strcmp(v->fs_type, "emmc") == 0) {
            return set_bootloader_message_block(in, v);
        }
        LOGE("unknown misc partition fs_type \"%s\"\n", v->fs_type);
        return -1;
    }

    这里把参数回写到misc分区,这样做是为了防止升级过程中发生崩溃,重启仍然可以从misc分区读取到更新的命令,继续进行更新操作,这也是为什么getargs要从几个地方读取启动参数的原因。

    @3 finish_recovery函数

    如果recovery模式下正常退出,则会清理掉misc分区中的内容,关键代码内容如下:

    static void finish_recovery(const char *send_intent) {
        //...
        // Reset to normal system boot so recovery won't cycle indefinitely.
        struct bootloader_message boot;
        memset(&boot, 0, sizeof(boot));
        set_bootloader_message(&boot);
        //...
        sync();  // For good measure.
    }
    

    这里就是向misc分区中写入0。

    3 执行菜单命令

    执行菜单关键的函数是prompt_and_wait,这里打印屏幕菜单并接收用户输入,函数代码如下:

    static Device::BuiltinAction prompt_and_wait(Device* device, int status) {
        const char* const* headers = prepend_title(device->GetMenuHeaders());
        for (;;) {
            finish_recovery(NULL);
            //根据命令执行,修改UI背景
            switch (status) {
                case INSTALL_SUCCESS:
                case INSTALL_NONE:
                    ui->SetBackground(RecoveryUI::NO_COMMAND);
                    break;
    
                case INSTALL_ERROR:
                case INSTALL_CORRUPT:
                    ui->SetBackground(RecoveryUI::ERROR);
                    break;
            }
            ui->SetProgressType(RecoveryUI::EMPTY);
            //等待用户输入
            int chosen_item = get_menu_selection(headers, device->GetMenuItems(), 0, 0, device);
            //用户选择权 交给device对象处理
            Device::BuiltinAction chosen_action = device->InvokeMenuItem(chosen_item);
    
            int wipe_cache = 0;
            //处理菜单命令
            switch (chosen_action) {
                case Device::NO_ACTION:
                    break;
    
                case Device::REBOOT:
                case Device::SHUTDOWN:
                case Device::REBOOT_BOOTLOADER:
                    return chosen_action;
    
                case Device::WIPE_DATA:
                    wipe_data(ui->IsTextVisible(), device);
                    if (!ui->IsTextVisible()) return Device::NO_ACTION;
                    break;
    
                case Device::WIPE_CACHE:
                    ui->Print("\n-- Wiping cache...\n");
                    erase_volume("/cache");
                    ui->Print("Cache wipe complete.\n");
                    if (!ui->IsTextVisible()) return Device::NO_ACTION;
                    break;
    
                case Device::APPLY_EXT: {//sdcard卡上更新
                    ensure_path_mounted(SDCARD_ROOT);
                    char* path = browse_directory(SDCARD_ROOT, device);
                    if (path == NULL) {
                        ui->Print("\n-- No package file selected.\n", path);
                        break;
                    }
                    //...
                    break;
                }
                //...
                case Device::APPLY_ADB_SIDELOAD://启动adbd,也是卡刷入口
                    status = apply_from_adb(ui, &wipe_cache, TEMPORARY_INSTALL_FILE);
                    //...
                    break;
            }
        }
    }
    

    整个函数的逻辑是:在屏幕上打印菜单,之后等待用户输入(用户只能通过音量+ 音量-来上下选择,power键确认),用户输入后,根据用户输入的命令,做不同的处理,命令与处理的对应关系如下:

    命令处理方式
    REBOOT重启
    WIPE_DATA擦除data分区,这就是恢复出厂设置所进行的操作,清除手机上所有的用户数据,包括cache分区
    WIPE_CACHE仅擦出cache分区下的内容
    APPLY_EXT通过UI在sdcard上选择一个文件进行更新操作
    APPLY_CACHE同上,只是路径变成了cache
    APPLY_ADB_SIDELOAD启动adbd(注意:这里adbd只是一个mini版本),让用户通过adb连接来执行sideload命令上传,更新文件到/tmp/update.zip,然后再执行更新操作。
    展开全文
  • Recovery模式又是什么意思?手机怎么进入Recovery模式? 对于这些大家关心的问题,小编今天就在这里一次性给大家解答,文章有点长,还请您耐心仔细看哦! Recovery的字面意思是恢复、复原。 对于手机来说,...

    Recovery是用户想要刷机的过程中经常会遇到的一个词。

    那么什么是Recovery?Recovery模式又是什么意思?手机怎么进入Recovery模式?

    对于这些大家关心的问题,小编今天就在这里一次性给大家解答,文章有点长,还请您耐心仔细看哦!

    Recovery的字面意思是恢复、复原。

    对于手机来说,Recovery就是安卓的手机提供的一种可以对手机内部的数据或系统进行修改的模式,有点像Windows操作系统下的DOS。在手机进入Recovery后,可以将手机恢复到出厂设置、升级手机的系统、对手机进行刷机等等。

     

    手机怎么进入Recovery模式?

    不同的安卓手机进入Recovery模式的情况略有不同,主要有以下几种:

    1、将手机关机后,同时按住音量上键和电源键,按住3秒,即可进入 Recovery模式;

    2、将手机关机后,同时按住音量下键和电源键,按住3秒,即可进入 Recovery模式;

    3、将手机关机后,同时按住音量上键、Home键和电源键 ,待手机震动后松开电源键(音量+、HOME键继续保持按住)才能进入。

    如果以上方法都不行,请上网搜索自己的机型,查找具体办法。

    进入Recovery模式后,手机上的显示类似下图(不同的手机差别很大,有些手机的recovery模式还是中文的):

    Recovery模式英文翻译

    在手机进入Recovery模式后,使用音量上下键,可以移动光标,按电源键表示确认。目前大多数的手机Recovery都是英文,那么这些英文具体是什么意思呢?下面给出翻译:

     

    主界面

    reboot system now:

    重启手机(刷机完毕选择此项就能重新启动系统)

    apply SDcard:update.zip:

    安装手机内存卡中的update.zip升级包(一般卡刷包的名字就是这个,选择这项实际上就是卡刷升级)

    wipe data/factory reset:

    清除用户数据并恢复出厂设置(刷机前必须执行的选项)

    wipe cache partition:

    清除系统缓存(刷机前需要执行这个。系统出问题也可尝试此选项,一般能够解决)

    install zip from SDcard:

    安装手机SD卡上的升级包(可以执行任意名称的zip升级包,不限制升级包名称)

    backup and restore:

    备份和还原系统(作用和原理如同电脑上的Ghost一键备份和还原,进入备份还原的二级菜单,见下方)

    mounts and storage:

    挂载和存储选项(进入挂载和存储选项二级菜单,见下方)

    advanced:

    高级设置(进入高级设置二级菜单,见下方)

     

    备份还原

    Backup:备份当前系统

    Restore:还原上一个系统

    Advanced Restore:高级还原选项(用户可以选择之前备份的系统,然后进行恢复)

     

    挂载和存储选项

    mount /system:挂载system文件夹(基本用不到)

    mount /data:挂载data文件夹(基本用不到)

    unmount /cache:取消cache文件夹挂载(基本用不到)

    unmount /sdcard:取消内存卡挂载(基本用不到)

    mount /sd-ext:挂载内存卡Ext分区(基本用不到)

    format boot:格式化boot(刷机前最好执行一下)

    format system:格式化system(刷机前最好执行一下)

    format data:格式化data(刷机前最好执行一下)

    format cache:格式化cache(刷机前最好执行一下)

    format sdcard:格式化手机SD卡(小心!会清除手机SD上的所有数据!!)

    format sd-ext:格式化内存卡Ext分区(小心!会清除手机SD上的Ext分区数据!!)

    mount USB storage:开启Recovery模式下的USB大容量存储功能(也就是说可以在Recovery下对内存卡进行读写操作)

     

    高级设置

    Reboot Recovery:重启Recovery(重启手机并再次进入Recovery)

    Wipe Dalvik Cache:清空虚拟机缓存

     

    什么是双清?

    经常在刷机之前会说到“双清”,那么什么是双清呢?

    实际上就是执行上面所说的wipe data/factory reset和wipe cache partition这两项。如果你忘记了手机的锁屏密码,就可以进入recovery模式执行双清的操作,双清之后,密码就没有了,当然,手机上的所有个人数据,比如通讯录、下载的APP、照片、视频等等也都会删除,所以大家一定要谨慎!!

     

    Recovery模式怎么刷机?

    recovery模式刷机,就是卡刷,卡刷的过程比较简单:

    一般是先将卡刷包复制到手机内存的根目录下(命名为update.zip),再执行apply SDcard:update.zip的操作;

    或者是将卡刷包放在手机SD卡的根目录下(命名为*.zip),再执行install zip from SDcard的操作。

     

    需要注意的是,目前不少手机(比如OPPO的手机),在进入recovery模式的时候需要输入账号密码,这个密码不是锁屏密码,而是手机的账号锁,如果忘了账户锁的话,通过recovery模式是无法解锁的。

     

    另外,想要进入recovery模式刷机,手机必须是正常能开机的。如果手机已经无法开机,就不能进入recovery模式刷机了,这时候就需要一种更加底层的刷机方式:线刷。

    手机怎么线刷呢,大家可以百度搜索“线刷宝”!

    展开全文
  • 如何进入Recovery模式

    2015-05-31 20:24:14
    如何进入Recovery模式 安卓手机进入Recovery模式方法大全
  • 为了方便客户日后的固件升级,本周研究了一下android的recovery模式。网上有不少这类的资料,但都比较繁杂,没有一个系统的介绍与认识,在这里将网上所找到的和自己通过查阅代码所掌握的东西整理出来,给大家一个...
  • 手机刷机root是基础,而recovery则是刷机的必要条件,跑跑车这里介绍了三星多款手机进入recovery模式的方法,以及进入download模式的方法,也就是通常所说的挖煤模式。recovery模式是工程模式,主要用于卡刷,而挖煤...
  • 偶尔会遇到Ubuntu无法正常启动的情况,这时候需修改某些文件让系统正常启动,如果直接进入 recovery 模式,默认是文件权限只读,无法修改文件。这时我们需要进入recovery 的单用户模式,获得修改文件的权限。1、重启...
  • Recovery 模式刷机

    2018-07-02 15:05:03
    Recovery 模式刷机 1. 准备 T 卡 外部存储卡也叫SD卡,TF卡,T卡 2. 差分包拷贝到存储卡 其中差分包命名为update.zip,可以直接复制,也可以使用push命令 adb push Z:\8.1\op67\update.zip /storage/F8DE...
  • Recovery模式详解

    2011-10-11 09:55:28
    非常全面的介绍详解android Recovery模式,以及相关的OTA升级,update.zip制作,和刷机基础。
  • android recovery模式

    2014-03-25 16:51:58
    Bootloader 会根据某些判定条件(比如按某个特殊键)决定是否进入 recovery模式Recovery模式会装载recovery 分区,该分区包含recovery.img。recovery.img包含了标准内核(和boot.img中的内核相同)以及recovery...
  • Android Recovery模式

    2014-04-24 15:14:15
    http://www.blogjava.net/MEYE/articles/357171.html Android Recovery模式 http://blogold.chinaunix.net/u/14459/showart_1911144.html ...Android Recovery模式 ...Android利用Recovery模式,进行恢复出厂
  • Android Recovery 模式

    2014-03-14 14:04:00
    Android Recovery模式 http://blogold.chinaunix.net/u/14459/showart_1911144.html Android Recovery模式 Recovery简介 Android利用Recovery模式,进行恢复出厂设置,OTA升级,patch升级及firmware升级。 升级...
  • 通过按下某个按键,使android进入recovery模式,是很好的参考资料
  • 所有安卓手机进入Recovery模式的方法 Recovery模式是手机系统的一个工程模式作用是恢复和活除用户进入这个 模式之后可以对当前系统的一些数据进行活除 恢复出厂设置备份还原系统 等操作 1进入Recovery模式前请先确认...
  • Android系统升级 Recovery模式(01)Recovery模式启动 Android系统升级 Recovery模式(02)Recovery升级过程 Android系统升级 Recovery模式(03)update-binary模块 本模块分享的内容:Recovery升级过程 本章...
  • 安卓手机Recovery 模式刷机教程 发布时间2012-10-07 18:45 作者电脑百事网原创 来源 801 次阅读 安卓系统相信现在已经没有人陌生了对于安卓系统的一些高级功能一般用户很少 全面了解下面本文于大家分享下很全的...
  • Android Recovery模式解析

    千次阅读 2014-03-25 17:26:50
    Android Recovery模式 http://blogold.chinaunix.net/u/14459/showart_1911144.html Android Recovery模式 Recovery简介 Android利用Recovery模式,进行恢复出厂设置,OTA升级,patch升级及firmware升级。 ...
  • 在某些操作之后,系统会自动重启并进入到Recovery模式,用户按组合键开机(HOME+POWER),也可进入Recovery模式。该模式提供如下功能: 1、擦除用户数据 恢复系统到出厂模式,即擦除用户数据和缓存数据。 2、系统...
  • Android系统Recovery模式的工作原理,摘录自网页
  • 1、重启服务器,在选择内核界面使用上下箭头移动 2、选择内核并按“e” 3、找到下面这行 ...5、使用“ctrl + x” 来重启服务器就可以了,重启后就会进入到recovery模式 6、退出单用户命令 exec /sbin/init ...
  • RK3188(radxa rock )recovery模式升级-附件资源
  • recovery模式差分(增量)升级小结

    千次阅读 2019-10-23 17:50:22
    最近在做recovery模式下的升级,简单的总结一下。 先说说recovery模式,他是个升级小系统,有单独的kernel,通过特定的系统命令就可以进入到此系统中,选择进入正常系统的kernel还是recovery系统的kernel,决定在于...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,987
精华内容 24,794
关键字:

recovery模式