android OTA升级之后,apk崩溃无法启动

VIPandroid OTA升级之后,apk崩溃无法启动
也就是说,我们这个高低版本是fingerprint相同的情况,这个问题追述到jenkins编译,启动job时会初始化一个BUILD_NUMBER值,这个值正好跟Android的build系统的名称重复,这就导致Android build系统那一套拼接时间戳的值不会走,因为jenkins一启动就会定义该值,而我们jenkins服务器迁移过,这个值又会从1开始累计,导致前后版本都是16,从而导致fingerprint一致。问题背景:系统版本从低版本升级到高版本后,apk崩溃启动失败。硬件平台:QCS6125。
开通可读全文 ·1.3k 人阅读
最低0.47元/天 解锁文章

硬件平台:QCS6125

软件平台:Android 11

  问题背景:系统版本从低版本升级到高版本后,apk崩溃启动失败。启动失败的activity为apk新增加的组件,报错的信息为:

ActivityNotFoundException: Unable to find explicit activity class {com.yuanfudao.android.megrez.system.settings/com.yuanfudao.android.megrez.launcher.upgrade.activity.AutoUpgradeActivity}; have you declared this activity in your AndroidManifest.xml? - sentry - megrez-app-s2-launcher

表面意思是找不到这个新添加的activity,但是从系统升级之后的apk源文件dump信息看,apk文件是升级成功的,而且如果不是最新的话就不会启动这个新添加的activity,怀疑是此apk的数据缓存未更新,导致系统不识别新增的组件;

  1、在PKMS和PackageParser、PackageCacher等类加日志,发现在复现问题的场景下,data分区下apk对应的cache缓存是不更新的,日志线索:

18:33:04.661990  1402  1402 D PackageManager: Keeping known cache f440076f74442ad4fdc9b67da03a644a795c4079

这行日志之所以打印出来,从代码上下文来看,就是升级之后系统fingerprint的hash值较之前旧版本无变化所致,正常情况下,Android每个版本都会对应唯一的fingerprint,不会有高低版本的fingerprint 哈希值一样的情况,即都会打印上述日志的else情况:

08:05:39.665153  1241  1241 D PackageManager: Destroying unknown cache e0ba64a1887994e81e808eab35d295e97ea17523

这样的话系统应用在data分区创建的cache目录就会被删除而从新创建,那新增的组件就会解析成功并写入新的缓存文件,就不会报错;

缓存目录:/data/system/package_cache/指纹哈希值/

也就是说,我们这个高低版本是fingerprint相同的情况,这个问题追述到jenkins编译,启动job时会初始化一个BUILD_NUMBER值,这个值正好跟Android的build系统的名称重复,这就导致Android build系统那一套拼接时间戳的值不会走,因为jenkins一启动就会定义该值,而我们jenkins服务器迁移过,这个值又会从1开始累计,导致前后版本都是16,从而导致fingerprint一致。

2、还有一种情况是,这个问题并不是必现,比如A、B、C从低到高依次三个版本,B、C的fingerprint一致,那么1说的情况就是A->B->C必现更新失败,如果直接刷B,升级C却没有问题,那么这个原因是什么呢?这种情况理论上并不会删除cache跟目录,通过加日志,跟代码,发现fingerprint只是第一道关卡,后边即使cache目录不重建,apk也会逐个比对apk源文件和当前cache文件的时间戳先后,如果源文件更新则更新cache,因此这种情况就解释了为什么fingerprint一致,但也会apk更新成功的问题。

添加调试日志的相关改动:

涉及三个FW的文件:

PackageManagerService.java、PackageCacher.java、PackageParser2.java

具体改动如下:

diff --git a/services/core/java/com/android/server/pm/PackageMan
VIP Android RescueParty救援模式:系统启动崩溃的自动修复机制详解 在移动操作系统领域,系统稳定性是核心指标之一。Android系统通过一套名为RescueParty的自动化恢复机制,专门处理因关键系统组件连续崩溃导致的启动失败问题。其工作原理基于对system_server、netd等核心进程的监控,当在设定时间窗口内崩溃次数超过阈值时,会触发分级恢复策略。这项技术的核心价值在于最大程度避免用户数据丢失,从禁用问题应用到重置权限、清除缓存,最终仅在必要时执行恢复出厂设置。对于系统开发者和应用开发者而言,理解RescueParty的触发条件与调试方法,能有效规避开发过程中的 开通可读全文·565 阅读·5 点赞·9 收藏 阅读全文

相关推荐

Android RescueParty机制解析:系统崩溃自救与数据保护

在移动操作系统领域,系统稳定性与数据保护是核心挑战。Android系统通过引入一套名为RescueParty的自我修复机制,从系统层面解决了设备因连续崩溃可能导致的“变砖”风险。其工作原理基于对系统服务器和关键应用崩溃的实时监控,当崩溃次数在特定时间窗口内达到预设阈值时,会触发渐进式救援流程。该机制的技术价值在于,它能在无需用户干预的情况下,自动尝试从重启进程、清除缓存到最终引导恢复出厂设置等逐级修复手段,极大地提升了设备的可用性和用户数据的安全性。这一设计尤其适用于系统OTA更新失败、核心应用缺陷或缓存损

weixin_30340617的博客 489

Android系统预置APK完整指南:从原理到企业级实践

在Android系统定制与ROM开发中,系统分区结构和应用管理机制是核心技术基础。Android系统通过PackageManagerService自动扫描系统分区中的应用,实现应用的预置与权限管理。这项技术的核心价值在于实现对设备软件生态的深度控制,广泛应用于手机厂商预装、运营商定制服务和企业专用设备部署等场景。其中,平台签名和SELinux策略是确保应用安全稳定运行的关键环节。本文聚焦于Android系统预置APK的完整流程,详细解析了通过Android.bp文件进行应用集成的具体方法,并提供了企业级实践

weixin_32308101的博客 317

RK3568 Android 12预置APK三种模式全解析:不可卸载、可卸载与永久删除

在Android系统定制中,预置APK是一项基础却又容易踩坑的操作。其本质是将应用放入系统镜像的特定分区,由PackageManagerService在开机时扫描注册。根据分区属性与权限模型的不同,预置方式可分为不可卸载的系统应用、可卸载的预置应用以及彻底移除三种模式。理解system、vendor、product等只读分区与data分区的差异,掌握签名策略、priv-app权限白名单及Android 12的包可见性约束,是保障系统稳定性与功能完整性的关键。在工业平板、收银机等单一用途设备上,合理的预置方案

weixin_34212762的博客 439

OTA升级时,清空launcher3数据OTA升级时,清空launcher3数据.zip

OTA升级时,清空launcher3数据OTA升级时,清空launcher3数据.zip

避坑指南:ANSYS流固耦合计算中System Coupling数据传递设置与常见报错解决

本文深入解析ANSYS Workbench中System Coupling模块在双向流固耦合(FSI)计算中的应用,详细讲解数据传递机制、典型报错解决方案及高阶调试技巧。通过实际案例展示如何优化耦合步长、处理大变形问题,并提升并行计算效率,帮助工程师有效规避常见技术陷阱。

weixin_29213525的博客 711

使用cubeMX生成USB HID设备

本文主要介绍如何使用stm32开发板和cubeMX生成HID设备,供参考。

专注音频,高效工作,快乐生活! 965

医药行业SAP序列号管理深度解析:如何满足GMP合规要求

本文深度解析了医药行业如何利用SAP序列号管理构建满足GMP合规要求的数字化追溯体系。文章详细阐述了SAP序列号在实现从生产到患者全流程“一物一码”精准追溯中的核心作用,并探讨了其与质量管理、冷链监控等系统的关键集成配置,为医药企业应对严格监管、保障产品质量与安全提供了切实可行的技术方案。

backprop5master的博客 649

ClearML中文文档实战:从安装到第一个实验的保姆级教程

本文提供ClearML从零开始的实战指南,涵盖核心组件理解、Python SDK安装、服务器配置及首个自动化实验的完整流程。通过改造PyTorch训练脚本的实例,详细演示了如何利用ClearML自动记录实验参数、指标与模型,实现机器学习实验的可复现性与高效管理,并简要介绍了进阶的自动化工作流。

weixin_29216049的博客 392

第4章 部署负载均衡 Keepalived + HAProxy

本章在所有 Master 节点部署 Keepalived + HAProxy,为 kube-apiserver 提供高可用入口。Keepalived 实现 VIP(192.168.3.59)漂移,HAProxy 轮询转发请求至三个 Master 的 6443 端口(监听 6444 避免冲突)。健康检查脚本连续 5 次失败则停止 Keepalived,触发 VIP 自动切换。本章还包含配置详解、日常运维和问题排查。

幸福街--linux技术分享 118

数据分享:中国历年省、市、县行政区划shp(1949~2023年共计75年)

中华人民共和国县级以上行政区沿革》(三册,1949-1983年)“The Atlas of Changes of Administrative Regions of China”;《中华人民共和国行政区划沿革地图集》The yearly publications of “The Administrative Regions”, 1985-2014;每年的出版行政区划简册(1985-2014年)行政区划网:www.xzqh.org。行政区划网:www.xzqh.org。

J_Giser的博客 3661

基于 YOLOv26 的食品包装缺陷检测系统:智能视觉质检方案

本文提出了一种基于YOLOv26深度学习的食品包装缺陷智能检测系统。该系统能够自动识别多种常见包装缺陷,包括密封不良、破损、污染、标签错误等8类问题。相比传统人工检测方法,该系统具有高精度、多类别分类、实时推理等优势。文章详细介绍了系统架构,包含数据采集、预处理、YOLOv26检测模型和后处理四个核心模块,并提供了完整的环境配置和数据处理代码实现。该系统为食品包装行业提供了一种高效、准确的智能视觉质检解决方案。

一键难忘的博客 673

【MERRA-2数据集】M2I1NXASM (5.12.4) 和 M2I1NXINT (5.12.4)概述

M2I1NXASM (5.12.4) 和 M2I1NXINT (5.12.4)概述

WW、forever的博客 677

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: android 调试UI 按钮无法点击事件问题
下一篇: android 排查sensor异常问题

双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —
凯文的内存
博客等级 码龄18年 5259粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值