项目场景:
Android 10系统,车载项目,在胎压界面反复请求胎压实时数据系统进入Android Recovery
问题描述
车机使用中突然进入Android Recovery界面类似电脑蓝屏,瞬间项目组鸡飞狗跳,驱动说是系统中间件问题,系统中间件说是app问题,app又说肯定是驱动问题……都是一头雾水加上毫无头绪,推来推去最后问题还是甩给了我……问题如下图
"Can't load Android system. Your data may be corrupt. If you continue to get this message,
you may need to perform a factory data reset and erase all user data stored on this device."
然后下面出现两行菜单:
"Try again"
"Factory data reset"
点击 Try again 可以正常进入系统。
原因分析:
拿到这种问题第一时间还是借助万能的网络,一通搜索发现这是 Android 8.0以后系统的一个自救措施,当内置的persistent类型的app频繁crash时,就启动这个自救功能。
从 /data/system/dropbox取到的内容也可以看到很多crash的文件
查看日志看到其中一款persistent类型service app有很多crash log,打开crash log可以看到报错的位置:
这个service app的AndroidManifest.xml中加了android:persistent=“true”,当这个service app crash后自动又马上拉起服务,频繁crash又频繁拉起成了一个死循环,最终导致系统进入了Android Recovery 模式
解决方案:
从上面的原因分析中的截图知道问题是我解析胎压时出现数组越界,解决方案一目了然。