Android系统 —— Recovery子系统下自动检测U盘内升级包并进行升级

本文主要是介绍Android系统 —— Recovery子系统下自动检测U盘内升级包并进行升级,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. bootable/recovery/recovery.cpp

(1) 下面宏变量 USB_BLK_PATH 是U盘节点路径,使用时按实际情况修改。
(2) 函数 usb_mount_thread 中的 max_mount_cnt 变量规定了尝试挂载U盘的次数,每次循环使用2秒延迟,按照实际情况修改。
(3) 当检测到U盘内有名为 force_ota.zip 升级包文件,则执行升级过程。升级成功后,重启到主系统;否则,重启Recovery系统。

diff --git a/recovery.cpp b/recovery.cpp
--- a/recovery.cpp
+++ b/recovery.cppstatic constexpr const char* LAST_LOG_FILE = "/cache/recovery/last_log";static constexpr const char* LOCALE_FILE = "/cache/recovery/last_locale";#define UFS_DEV_SDCARD_BLK_PATH "/dev/block/mmcblk0p1"
+#define USB_BLK_PATH "dev/block/sda1"+std::string force_ota_path = "";static constexpr const char* CACHE_ROOT = "/cache";static Device::BuiltinAction prompt_and_wait(Device* device, int status) {status = ApplyFromAdb(device, false /* rescue_mode */, &reboot_action);} else {adb = false;
-          status = ApplyFromSdcard(device, ui);
+          status = ApplyFromSdcard(device, ui, force_ota_path);}ui->Print("\nInstall from %s completed with status %d.\n", adb ? "ADB" : "SD card", status);static void log_failure_code(ErrorCode code, const std::string& update_package)LOG(INFO) << log_content;}+static InstallResult installOtaPackage(std::string force_ota_path, Device* device)
+{
+  LOG(INFO) << "force_ota.zip found, updating ...";
+  ui->InterruptKey();
+  ui->SetBackground(RecoveryUI::NONE);
+  ui->ShowText(false);
+  return static_cast<InstallResult>(ApplyFromSdcard(device, ui, force_ota_path));
+}+static void* usb_mount_thread(void* device) {
+  const int max_mount_cnt = 10;
+  int* install_result = static_cast<int*>(malloc(sizeof(int))

这篇关于Android系统 —— Recovery子系统下自动检测U盘内升级包并进行升级的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885970

相关文章

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.