Android OTA静默升级

Android静默升级的菜鸟教程 前言 目前已知的实现方式: 获取su,通过pm命令实现静默安装 通过辅助功能实现静默安装(有弹窗,只是不需要手动点击安装) root,覆盖安装,将应用下载到system下后重启系统 通过pm install实现静默安装,需要系统签名 需要知道 1.不是root过的手机就一定能通过Runtime.getRuntime().exec(“su”);代码获取root权限。虽然通过su或adb root可以切换到root,但是在代码中不同,在源码中有如下判断。 if (myuid != AID_ROOT 阅读详情


1. 方案选择

获取升级信息,有两种大方向可供选择:Push(服务端向服务器端推送更新)和Query(客户端主动查询)两种方案。Query实现比较简单,灵活;push需要长连接支持,以及全部设备id等信息,实现相对复杂。基于目前的需求和实际情况,决定采用客户端查询更新方式。

2. 整体框架

 

图1. 升级示意图

 

图2. 升级时序图

升级系统的示意图及时序图如上。主要流程上,大部分工作是集中在客户端的。

3. 客户端实现

3.1 客户端查询更新

客户端需要在一个合适的时机查询是否有新的升级包可用。基于目前的使用case,评估师基本会在眼镜使用完成之后,即关闭眼镜;需要再次使用的时候,再重新开机。眼睛上的app会随系统启动自启动。所以可以考虑在系统启动时(注册监听系统启动广播),或者是app启动时,向服务器查询是否有新的升级包。

另外,考虑到有可能眼镜连续长时间处于开机状态,在这种case下,可能没有机会触发查询更新包操作。所以可以考虑在后台service中运行一个定时任务,每隔固定间隔(比如24h)检查是否需要向服务端查询更新包信息。同时,鉴于眼镜在查询间隔周期内(比如24h)可能被开关多次,触发多次向服务器请求查询更新的操作。为避免过于冗余的请求,可在客户端进行标记,记录上次查询更新的时间,app启动时,首先检测在本次查询周期内(比如,与上次查询是否间隔超过24h),是否已经向服务器进行过查询。若在本周起内已经进行过查询,则本次启动不再请求服务器进行升级查询。

3.2 客户端下载更新包

下载可基于http实现,目前也比较成熟,相对基于tcp实现,开发效率会更高;可选支持断点续传(初期考虑app体积较小,简单期起见,也可以暂不支持)。

3.3 客户端安装升级包——静默安装

与普通手机上的app升级和安装不同,眼镜没有提供直接的UI交互,所以无法执行标准的app安装流程(期间需要任务干预,授权安装)。因为,目前眼镜上的app升级,需要采取静默升级方式。这种方式的实现需要满足一定条件:1)需要有root权限;2)系统级应用或者使用系统签名的应用。目前我们的眼镜和其上运行的app是满足这个条件的。满足以上条件的前提下,在代码中通过调用“pm install - xxx”命令来实现静默安装。

静默安装过程中,当前应用会退出,所以需要有自启动机制,确保升级完成之后,应用能够再次启动。这要借助于广播,监听PACKAGE_REPLACED广播。监听到该广播之后,执行启动app的操作。

以上功能需要在一个独立的service中,否则无法触发自启动。

3.3.1 静默升级实测结果

1)google加强了root权限的控制,只允许root和shell用户执行“su”命令,所以在app没有获取到系统签名,真正升级为系统应用的情况下,试验了多种方案,也不能在代码中成功升级root权限。关键代码:

process = Runtime.getRuntime().exec("su");

执行不成功,接下来尝试执行后续命令,会报:EPIPE: bad pipe错误。根本原因是当前进程没有权限执行su命令,没有能够成功获取root权限。

2)这样看,只能想办法获取看见系统的签名文件,对我们的应用进行系统签名,以获取系统权限。

3.4 客户端安装升级包——手机端app触发眼镜app更新(optional)

目前这只是一个想法,眼镜的升级可以通过手机端控制app来触发眼镜app更新,以及展示更新进度等。需要额外的开发工作进行眼镜和手机之间的通信,不过也能提供更好的用户体验。

3.5 客户端框图

 

图3.客户端框图

Service负责对更新的管理,执行,以及安装更新包之后,监听广播,重启app。其中的timer可选,用来在眼镜开机运行期间,每隔固定周期检测是否需要执行更新(应对眼镜长期开机,以及在一个周期之内已经检测或执行过升级的case)。

 

图4. 客户端时序图

3.6 升级监控应用打系统签名

首先,在应用程序manifest.xml文件根节点中加入属性:android:sharedUserId="android.uid.system"。

对apk进行系统签名,需要用到如下几个文件:platform.x509.pem、platform.pk8, 在Android系统源码的build/target/product/security/路径;signapk.jar,在系统源码的out/host/linux-x86/framework目录。

签名的命令如下:

java -jar signapk.jar platform.x509.pem platform.pk8 [source apk] [signed apk]

比如:

java -jar signapk.jar platform.x509.pem platform.pk8 otaservice-1.0.0.apk otaservice.apk

 

4. 服务端实现

4.1 查询升级包信息接口

方法

GET

参数

无(目前看不需要)

返回

{

    "VersionCode": "12", // int

    "VersionName": "1.2.0", // string

    "size": "56384217", // long

    "md5": "38b8c2c1093dd0fec383a9d9ac940515", // string

"url": "/ota_file/glasss.apk", //string

“updateMessage”: “Fix bug” // string

}

4. 2 安装包部署

建议服务端提供安装包自动部署功能,提供交互和管理界面,管理员只需选择上传安装包,配置基本参数,程序自动检测安装包其它信息(size,md5等),并进行记录,数据库或其它存储方式,以方便提供给客户端查询API。

5. 其它

5.1 增量升级

增量升级比较适合安装包较大的案例,比如rom升级。目前我们的应用size很小,增量升级得不偿失。不过可以考虑未来对增量升级的支持。主要考虑:利用工具生成差分包(服务端,可考虑自动实现);从差分包合成安装包(客户端,可能需要进行native编码)。

5.2 统计升级情况

对眼镜的升级情况进行统计,以获取升级数量,版本,升级状态(成功,失败)等信息,供后续分析。

5.3 部分推送更新

新版本app发布之后,可以选择性的只允许按照一定算法规则随机筛选出的特定比例的终端设备可以检测到更新,这个比例可以是阶梯增长的,比如1%,10%, 25%, 50%, 100%。功能可以有效降低新版本中出现严重缺陷所影响的终端数量。在小范围发布版本中如果统计到严重缺陷,则可以及时撤回,修复并发布新版本。参考google play以及其它应用市场的功能。

对于眼镜上并不在应用市场发布的app,如果要支持该功能,需要server自己实现。首先需要所有终端设备的唯一标识,比如device id;其次要有算法确保每次能够随机筛选出不完全相同的指定指定比例的设备作为“实验品”,确保假定新版本有缺陷的情况下,不是每次都是同一批设备被坑,并且,只有筛选出的设备可以get到版本更新信息。

5.4 断点续传

考虑到我们app目前的规模,升级的断点续传应该也并不必要。如要支持断点续传,需要客户端以及服务端协同。首先需要服务端支持Ranges属性。其余工作主要在客户端完成。在下载终端的时候,需要记录当前传输的Range。在重启传输后,向服务器请求指定的range内容,服务器通过Content-Ranges返回指定range的内容。

 

图5. 断点续传流程图

高通平台Android OTA升级全解析:从Full到Incremental的实战指南 本文深入解析了高通平台Android设备的OTA升级全流程,涵盖从Full OTA完整包到Incremental OTA增量包的实战制作方法。详细介绍了编译target_files、集成Modem等非AP分区、调用工具生成签名升级包,以及通过Recovery、ADB或系统应用进行升级的多种途径,并分享了签名安全、排错日志等进阶经验,为开发者构建稳定可靠的无线升级系统提供完整指南。 阅读详情

相关推荐

Android OTA升级底层原理与AB/Recovery双路径实战解析

Android OTA升级是移动设备固件更新的核心机制,其本质是基于分区管理、签名验证与引导控制的系统级协同过程。AB升级通过双slot切换实现无缝更新,依赖bootloader对ab_metadata的解析;Recovery升级则在独立精简环境中直接刷写物理分区,强调兼容性与安全性。技术价值体现在升级可靠性、回滚能力与带宽优化上,广泛应用于智能手机、IoT终端及车载系统等场景。本文深入update_engine调度逻辑、payload校验流程、差分patch原理及recovery签名验证链,覆盖从OTA包

weixin_29168813的博客 232

Android--静默升级

静默升级通常指的是在用户不知情的情况下,应用程序能够自动下载并安装更新。这种升级过程涉及到几个步骤:

yihanss的博客 3289

Android 系统级APP 升级方案 OTA全流程

坑:java.io.FileNotFoundException: /cache/recovery/uncrypt_file (Permission denied)把上述编译好的zip更新包放到指定目录(可通过网络下载方式),然后APP通过下述代码进行升级。完全升级(完整包)、增量升级模式(差异包),可以通过本地升级,也可以通过网络升级。量产固件是分开的,将会影响后面差异包升级,除非你不需要用差异升级。差异包只有差异内容,包大小比较小,主要用于。差异包制作需要特殊的编译进行手动制作。

zljdfaljsfd的博客 6124

android设备静默升级

还是一如既往的android开发板子,需求是静默升级。静默升级顾名思义,就是后台默默下载,在用户无感知的情况,完成APP的升级,虽说现在有热更新的技术,但是奈何需求与实际不相符合,并且必须得有用户参与,才有很大几率成功。所以还是硬着头皮去研究一波静默升级,好在android是root权限,基本的条件是有了。 现在基本思路是这样,第一,在应用启动的时候,获取版本号,然后启动下载,下载完成之后保存到指定的文件夹,这个想必对大多数搬砖工友来说,都不难,分享一个小的框架,简单易用。Ar...

文科程序猿 3518

OTA升级那些事-Recovery升级和AB升级

OTA升级方式有两种,整包OTA升级和差分包升级,我们这里讨论的是整包升级。借助第三方实现: OTA升级基本上被第三方公司垄断->艾拉比 和 广升 两家,那升级很简单直接用第三方。第三方后台创建产品项目账号,直接用第三方app。打包固件时候集成第三方ota 相关信息即可。自己实现OTA升级,利用各个Android芯片原厂的要求,自己打包编译整包、差分包。升级包放到自己服务器,自己下载到本地,然后调用系统接口或者按照系统要求进行升级操作Recovery升级和AB升级。对于Recovery。

十年饮冰,难凉热血 544

Android A/B分区OTA升级:应用层如何通过UpdateEngine调用实现无缝更新

在Android系统开发中,系统更新(OTA)是保障设备安全与功能迭代的核心机制。其原理是通过网络下载更新包,并在设备上安全地安装新版本系统。随着Android设备存储架构的演进,A/B分区(也称为无缝更新)技术成为提升更新可靠性与用户体验的关键。该技术通过维护两套独立的系统分区(Slot A/Slot B),使得更新过程在后台静默进行,用户仅在重启时完成切换,极大降低了更新失败导致设备变砖的风险。从技术价值看,这要求应用层与底层系统服务紧密协同。在工程实践中,Android框架通过Binder IPC机制

weixin_29597551的博客 273

安卓工控机 OTA 升级方案(SpringBoot+MQTT)

本文提出了一种针对第三方采购安卓工控机的OTA升级方案,采用SpringBoot服务端+MQTT通讯+工控机本地守护服务的架构设计。方案覆盖升级触发、包下载、安装、启动检测、失败回滚和状态监控全流程,重点解决工业环境中网络不稳定、业务连续性要求高等问题。

爱片闲串,爱钓鱼,爱中医,爱分享 839

Android OTA升级包下载模块:断点续传与校验的工程实践

断点续传是一种在网络中断后从已下载位置继续传输的技术,其核心原理依赖于HTTP Range请求头与ETag/Last-Modified的一致性校验,确保续传数据的完整性。在移动端OTA升级场景中,该技术能显著提升大文件下载的成功率与用户体验。结合流式读写与哈希校验,可有效避免内存溢出与文件损坏问题。本文围绕Android OTA在线升级中的升级包下载环节,详细拆解了从URL到可校验本地文件的分层设计、断点续传实现、完整性校验及后台存活策略,并提供了避坑清单与可观测性实践,帮助开发者构建稳定可靠的下载模块。

weixin_33925615的博客 231

up rom for android,GitHub - aystshen/Android-RomUpgrade: 这是一个负责 Android 系统 ota 升级的后台应用,开机后自动运行后台Serv...

Android 系统 OTA 升级应用一个负责 Android 系统 ota 升级的后台应用,开机后自动运行后台 Service,支持系统升级、应用升级,支持本地升级(tf卡、u盘)、在线升级(百度),支持推荐升级、静默升级。已知兼容版本:Android 5.1Android 6.0Android 7.1Android 8.1预览本地升级(tf卡、u盘)在线升级(百度)API此固件升级应用也对外提...

weixin_30269201的博客 303

Android中的软件的自动更新(包括静默更新,需Root权限)

Android中的软件的自动更新(包括静默更新,需Root权限),详细了解请移步:http://blog.youkuaiyun.com/zxc514257857/article/details/77504010

Android静默升级[源码]

静默升级是指在用户无感知的情况下自动完成应用的下载和安装更新。该过程包括获取版本信息、下载更新包、保存更新包以及安装更新等步骤。实现静默升级需要系统权限,且应用需为系统应用或具有ROOT权限。文章详细介绍了静默升级的实现步骤,包括使用开源库如Aria和AutoInstaller,以及具体的代码实现方法。此外,还提到了静默升级可能面临的安全风险和兼容性问题,并提供了解决依赖报错的方案。最后,文章鼓励开发者提升技术深度和广度,并分享了进阶学习资料。

Android 使用 PackageInstaller 实现静默安装,并通过 BroadcastReceiver 自动重启应用

在 Android 系统中,如果你的应用具有系统权限(如系统签名或安装在 /system/priv-app 目录),就可以使用实现 APK 的静默安装。安装完成后,我们通常希望应用能够自动重启,以便更新立即生效。监听安装事件捕获自定义安装完成事件 (自动启动自身应用使用安装 APK 的完整代码适用于 OTA 升级、企业设备更新、Kiosk 设备、医疗设备等定制系统。

自我记录贴 710

802.11ax 的OFDMA资源分配详解

802.11ax 引入的最重要的技术就是OFDMA。OFDMA中引入了RU(资源块)概念,也就是20Mhz/40Mhz/80Mhz/160Mhz的带宽可以切割成不同尺寸的RU,分配给不同的用户使用,这样就大大提高了频谱资源的利用率。 常见的RU尺寸有26/52/102/242/484/996,单位是子载波,每个子载波是78.125Khz,这样20Mhz的带宽可以划分为如下图所示的不同RU大小。 按照11ax规范的要求,上下行的数据传输都可以由AP来统一调度,这样上下行的OFDM...

weixin_43408952的博客 1万+

up rom for android,Android-RomUpgrade

Android 系统 OTA 升级应用一个负责 Android 系统 ota 升级的后台应用,开机后自动运行后台 Service,支持系统升级、应用升级,支持本地升级(tf卡、u盘)、在线升级(百度),支持推荐升级、静默升级。已知兼容版本:Android 5.1Android 6.0Android 7.1Android 8.1预览本地升级(tf卡、u盘)在线升级(百度)API此固件升级应用也对外提...

weixin_32185607的博客 308

STM8库函数开发手册(3) //UART1、内部EEPROM、FLASH操作库、IIC(硬、软)

STM8S 微控制器家族的通用同步异步收发器(UART1,UART2 或者UART3)提供了一种灵活的方法与使用工业标准NRZ 异步串行数据格式的外部设备之间进行全双工数据交换。STM8 的UART 提供范围的波特率选择,并且支持多处理器通讯。UART 也支持LIN(局部互联网)协议版本1.3,2.0,和2.1 以及在主模式下的J2602。 UART1 和UAR...

finedayforu的博客 2520

(王道计算机组成原理)第二章数据的表示和运算-第三节:运算方法和运算电路 1(基本运算部件)

本文主要介绍了计算机组成原理中的加法器和算术逻辑单元(ALU)的基本概念与实现原理。首先,文章详细讲解了一位全加器的工作原理,包括其输入输出、逻辑表达式及真值表。接着,介绍了并行加法器的两种类型:串行进位和并行进位的加法器,分析了它们的优缺点。随后,文章探讨了带标志位的加法器,说明了如何通过标志位生成逻辑来判断加法结果的状态。最后,文章阐述了ALU的功能及其实现原理,包括ALU的基本结构、控制信号的作用以及在实际考试中的图示表示。通过这些内容,读者可以全面了解加法器和ALU在计算机中的重要作用及其工作原理。

快乐江湖的博客 3837

android apk u盘升级_Android OTA升级(开源推荐)

这是一个负责 Android OTA 升级的后台应用,开机后自动运行后台 Service,支持系统升级和应用升级,支持本地升级(tf卡、u盘)和在线升级(百度),支持推荐升级和静默升级。已知兼容版本:Android 5.1Android 6.0Android 7.1Android 8.1预览本地升级(tf卡、u盘)image.png在线升级(百度)image.pngimage.pngAPI此固件升...

weixin_39638105的博客 1444

QMK键盘固件开发零基础教程(2025全新重制版)

《QMK键盘固件开发零基础教程(2025全新重制版)》是一套专为键盘爱好者和开发者设计的全面教程,旨在帮助用户从零基础快速掌握最新的QMK固件开发技术。教程基于2025年最新的QMK版本(0.19.8+),解决了旧版教程中的诸多问题,如概念不清、步骤缺失和代码过时等。新版教程提供了详细的图解、完整的项目源码以及从环境配置到高级功能开发的全流程指导。此外,教程还涵盖了2024年QMK生态的重大变革,包括键码系统的重构、编译工具链的更新以及Config文件格式的改变等。付费版教程额外提供独家内容,如新特性解析、

Despacito0o的博客 1121

Android静默安装全方案解析:系统签名、Root与辅助点击实践

静默安装是Android应用批量部署的核心技术,通过绕过系统交互界面实现APK后台自动安装。其原理基于系统权限分级,系统签名方案调用隐藏安装接口,Root方案执行shell命令,辅助点击方案模拟用户操作。技术价值在于大幅降低人工干预成本,提升OTA升级与设备管理效率。典型应用场景包括自助终端、工业手持设备、车载中控等无人值守环境。不同权限条件下需权衡稳定性与通用性,系统签名方案最可靠但需定制ROM,Root与辅助点击方案则适用于设备不可控场景。

weixin_29190651的博客 201

部署模型:Libtorch使用笔记【Pytorch的C++版本】【把用Pytorch训练好的模型打包保存为.pt格式,使用Libtorch去加载.pt格式模型,在C++工程中去用就好了】

A : Libtorch是pytorch的C++版本,现在的很多大型项目都是用C++写的,想使用训练好的模型,需要通过caffe等方式去集成,比较麻烦。这里pytorch官方提出了Libtorch,我们就可以把pytorch训练好的模型,打包起来,直接在C++工程中去用就好了,相比较caffe等,非常方便!虽然对于许多需要动态性和易迭代性的场景来说,Python是一种合适且首选的语言,但在同样的情况下,Python的这些特性恰恰是不利的。生产环境是一个需要低延迟和有严格部署要求的领域,一般选择C++。

u013250861的博客 2949

基于STM32设计的智能防盗单车锁_349

本设计基于STM32F103RCT6单片机,研制了一种适用于户外环境的智能防盗单车锁系统。系统集成了GPS定位模块、ADXL345加速度传感器、4G通信模块(Air780E)、OLED显示屏、继电器模拟锁控模块等硬件,通过姿态感知实现车辆异常移动检测,在锁车状态下自动触发蜂鸣器报警并通过短信与APP通知用户。

867

推荐优雅的OTA更新框架:ElegantOTA

是一个开源的Android Over-the-Air(OTA)更新库,由Ayush Sharma开发。它提供了一种优雅的方式来管理和执行应用程序的增量或完整更新,旨在简化Android应用的维护和升级流程。 ## 技术分析 ElegantOTA基于Android的Intent服务和服务绑定机制,能够在后台安静地下载更新包,并在适合的时候进行安装。它支持HTTP/HTTPS协议,可以与任何服务器...

gitblog_00077的博客 936

GD32F470移植LWIP协议,PHY芯片DP83848I

也就是说前24位是有规定的,其中48位MAC中的前几位也是有着对应的含义的。2、旧版LWIP(如1.4.1)存在DHCP状态机卡死问题,建议升级至2.1.3+。

m0_61973119的博客 1591

ota升级流程浅析(重点讲述虚拟A/B)

HAL 层的具体实现(通常由芯片厂如高通、联发科编写)会去修改小系统分区(如 misc 或 attributes 标志位),将 Slot B 标记为 bootable(可引导),并将其设为首选槽位(Active)。缺点:由于升级过程中高频读写 /data 分区并进行快照合并(Merge),在性能较差的低端机上,升级后的首次开机或合并期间,手机可能会有轻微的掉帧或发热。既保留了 A/B 升级的“后台静默”、“秒级重启”和“防砖自动回滚”能力,又不需要占用双倍的物理分区,帮手机释放了巨额的存储空间。

yangxiucheng520的博客 582

uniapp [全端兼容] - 最新详细实现拍摄视频录像并可播放预览视频,调起本机摄像头开启录像录制完毕后保存到本机临时存放,可对拍摄的视频进行压缩处理减少文件大小不损失画质,详解录制视频并读取播放!

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,录视频,拍视频,拍摄录制视频后上传服务器,调起摄像头录视频并可预览,录视频上传,录像,uniapp录制视频并上传,录制视频并保存到本地设备,如何本地保存并播放预览,提供给用户观看MP4视频录像并上传到后端服务器完整功能源码,视频压缩,mp4文件,删除视频,录像后怎么预览,临时视频文件怎么减少压缩大小,视频压缩及上传,自己录视频并生成可播放的文件,录视频并能打开查看,视频压缩后上传,本机相册,录完怎么预

🏆 前端领域优质创作者 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

android静默升级方案,Android实现静默安装的两种方法

前言一般情况下,Android系统安装apk会出现一个安装界面,用户可以点击确定或者取消来进行apk的安装。 但在实际的项目需求中,有一种需求,就是希望apk在后台安装(不出现安装界面的提示),这种安装方式称为静默安装。下面这篇文章就给大家介绍了两种方法来实现,下面来一起看看吧。1、root权限静默安装实现实现实际使用的是su pm install -r filePath命令。核心代码如下:pro...

weixin_42413624的博客 1744

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: Android h5全屏播放video
下一篇: python设计模式——工厂方法
hunter800421
博客等级 码龄22年 60粉丝 97原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值