1.前言
之前Android9的时候公司自己写了一个简单的OTA在线升级,调用Recovery升级系统。后来Android12的时候想使用AB升级,发现我这套代码AB升级完成了之后,重启却无法切到B,所以造成升级一直是失败的。后来想着要不还是把AB关掉直接用Recovery升级。
这时候才发现调用Recovery的时候user版本却报No Command。
一直百思不得其解。后来查了一下发现很多人也有这个问题。但是有解决方案的都是需要会员才能看的,然后自己看了一下Recovery发现其实就只需要修改几句代码就可以让Recovery显示出来。
2.修改
其实本意就是把Recovery检测user版本的位置给他拿掉。
diff --git a/bootable/recovery/recovery.cpp b/bootable/recovery/recovery.cpp
 old mode 100644
 new mode 100755
 index 07b14c8..ad31342
 --- a/bootable/recovery/recovery.cpp
 +++ b/bootable/recovery/recovery.cpp
 @@ -842,11 +842,11 @@ Device::BuiltinAction start_recovery(Device* device, const std::vector<std::stri
      // If this is an eng or userdebug build, automatically turn on the text display if no command
      // is specified. Note that this should be called before setting the background to avoid
      // flickering the background image.
 -    if (IsRoDebuggable()) {
 +    //if (IsRoDebuggable()) {
        ui->ShowText(true);
 -    }
 +    //}
      status = INSTALL_NONE;  // No command specified
 -    ui->SetBackground(RecoveryUI::NO_COMMAND);
 +    //ui->SetBackground(RecoveryUI::NO_COMMAND);
    }
修改过后就可以正常看到recovery菜单了,并且升级正常。