当前位置: 首页 > news >正文

Android系统卡启动问题排查

Android系统启动正常来说会涉及到如下几个过程:

  1. 引导加载程序(Bootloader)
  2. Linux内核(Kernel),负责硬件抽象、内存管理、进程管理、网络堆栈等
  3. init进程 init进程读取init.rc配置文件,用于启动各种守护进程和服务,它是Android系统的第一个用户级进程
  4. Zygote进程,Zygote是一个特殊的Java虚拟机进程,它预加载核心类库,并在需要时通过进程fork机制快速启动应用程序
  5. System Server,由Zygote启动的System Server进程是Android系统的核心服务进程,它启动并管理各类系统服务,如Activity Manager、Package Manager、Window Manager等。

实践中,如果把android进行了容器化处理。容器化处理之后,1、2两个步骤其实在宿主机上执行了,系统启动直接从第三步开始。

最近我处理了几个系统卡启动的问题,这里做一点归纳总结:

netpolicy

netpolicy 的策略配置在 /data/system/netpolicy.xml 。

restrictBackground=“true”

当restrictBackground设置为false时,系统允许后台应用自由使用网络。这是默认行为,适用于不需要特别限制网络使用的情况。

当restrictBackground设置为true时,系统会限制后台应用的网络使用。这意味着在后台运行的应用程序可能无法使用网络,除非它们被列入允许的例外名单。一些应用可能在后台无法正常接收数据或推送通知。

我遇到的问题是restrictBackground设置为true时,系统会先调用 com.android.server.connectivity.Tethering.untetherAll,修改UsbTethering的状态。而 UsbDeviceManager 这个对象其实没有初始化。这个行为是在system server进程中执行的。所以造成了system server进程崩溃。

*** FATAL EXCEPTION IN SYSTEM PROCESS: NetworkPolicyFATAL EXCEPTION IN SYSTEM PROCESS: NetworkPolicy
java.lang.IllegalStateExceptionat com.android.internal.util.Preconditions.checkState(Preconditions.java:169)at com.android.internal.util.Preconditions.checkState(Preconditions.java:182)at com.android.server.usb.UsbService.setCurrentFunctions(UsbService.java:465)at android.hardware.usb.UsbManager.setCurrentFunctions(UsbManager.java:703)at com.android.server.connectivity.Tethering.setUsbTethering(Tethering.java:968)at com.android.server.connectivity.Tethering.enableTetheringInternal(Tethering.java:406)at com.android.server.connectivity.Tethering.stopTethering(Tethering.java:390)at com.android.server.connectivity.Tethering.untetherAll(Tethering.java:520)at com.android.server.ConnectivityService$5.onRestrictBackgroundChanged(ConnectivityService.java:1850)at com.android.server.net.NetworkPolicyManagerService.dispatchRestrictBackgroundChanged(NetworkPolicyManagerService.java:4422)

system server进程崩溃之后,它关联的一些system进程也会相继被杀。然后就卡启动了。
这个崩溃点其实挺有意思的,在这个情况下:

  1. netpolicy的命令有时候可以使用,有时候不能使用。
adb shell dumpsys netpolicy
adb shell cmd netpolicy set restrict-background true
adb shell cmd netpolicy set restrict-background false
  1. netd是起来了,还没初始化完,又被杀掉了。

所以这种场景下,ping的时候会报错找不到域名(dns服务没就绪),直接ping ip会报错网络不可达。

  1. iptable设置了是无效的(短暂有效)

netd在启动的时候会通过 iptables-restore、ip6tables-restore ,设置一些策略,如果在这个场景下手动设置一些iptable的规则,会被iptables-restore中的默认设备覆盖掉。

iptables -L
iptables -D bw_data_saver 1
iptables -I bw_data_saver 1 -j RETURN

PackageManagerService

PackageManagerService在多用户环境中需要管理每个用户的应用配置,而/data/system/users/0.xml文件是用来存储主用户(用户ID为0)的配置数据。因此,PackageManagerService在运行时可能会读取或修改这个文件,以获取或更新用户的应用配置和相关信息。

System zygote died with exception
java.lang.RuntimeException: There must be exactly one installer; found []at com.android.server.pm.PackageManagerService.getRequiredInstallerLPr(PackageManagerService.java:3456)at com.android.server.pm.PackageManagerService.<init>(PackageManagerService.java:3041)at com.android.server.pm.PackageManagerService.main(PackageManagerService.java:2317)at com.android.server.SystemServer.startBootstrapServices(SystemServer.java:591)at com.android.server.SystemServer.run(SystemServer.java:391)at com.android.server.SystemServer.main(SystemServer.java:269)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:464)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:787)

上面这个错误,发射在 /data/system/users/0.xml 中,0.xml文件被破坏了,获取不到主用户的配置信息,会导致PackageManagerService启动失败。
这个操作也是在 SystemServer 中的,通用会导致 SystemServer 在进入“崩溃->重启”的循环中。

总结

总的来说,上面两个例子的权限都应该是600,即只有文件的所有者(system)有读写权限。但是我们开放了su的权限,用户/用户使用的软件其实是有权限可以修改这个文件的。后续可以增加SELinux的策略,来规避这些文件被修改导致的系统故障。

相关文章:

Android系统卡启动问题排查

Android系统启动正常来说会涉及到如下几个过程&#xff1a; 引导加载程序&#xff08;Bootloader&#xff09;Linux内核&#xff08;Kernel&#xff09;&#xff0c;负责硬件抽象、内存管理、进程管理、网络堆栈等init进程 init进程读取init.rc配置文件&#xff0c;用于启动各…...

STP(生成树协议)

STP的基本概念 概述 STP是一个用于局域网中消除环路的协议。运行该协议的设备通过彼此交互信息而发现网络中的环路&#xff0c;并对某些接口进行阻塞以消除环路。STP在网络中运行后会持续监控网络的状态&#xff0c;当网络出现拓扑变更时&#xff0c;STP能够感知并且进行自动…...

【前端面试】随机、结构赋值、博弈题

解构赋值&#xff08;Destructuring Assignment&#xff09;是 JavaScript ES6 引入的一项非常有用的特性&#xff0c;它允许我们快速地从数组或对象中提取值&#xff0c;并将它们赋给变量。这种方式使得代码更加简洁、易读&#xff0c;并且能够减少重复的访问和赋值操作。 1.…...

Volta——开箱即用的Node.js 版本管理工具

Volta volta 是一个较新的 Node.js 版本管理器&#xff0c;旨在简化 Node.js 和其他工具的安装和管理&#xff0c;在 2019 年出世&#xff0c;仍在积极开发中。Volta 采用了与 nvm 不同的方法&#xff1a;它不是管理 Node.js 的多个版本&#xff0c;而是管理项目及其依赖项。当…...

ubuntu 磁盘空间满,找不到占用文件的目录

解决方法&#xff1a; 检查磁盘空间&#xff1a; 执行 df -h 查看各分区磁盘使用情况。 查找大文件或目录&#xff1a; 执行 du -sh /* 2>/dev/null 查找根目录下的大文件或目录&#xff0c;再逐一进入子目录使用相同命令查找。 清理缓存和临时文件&#xff1a; 清理 /t…...

1. 机器学习基本知识(5)——练习题(参考答案)

20.&#x1f517;本章代码笔记&#x1f4d3;链接&#xff08;需要&#x1fa9c;&#xff09;&#xff1a;&#xff08;01_the_machine_learning_landscape.ipynb - Colab (google.com)&#xff09; 如果你不想通过上面的官方网址下载本章的笔记&#xff0c;还可以在本篇博文的…...

spark-sql 备忘录

wordcount sc.textFile("../data/data.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(__).collect 读取json 文件 并通过sql 执行 join 查询 public static void main(String[] args) {SparkSession session SparkSession.builder().master(&qu…...

基于softmax回归的多分类

基于softmax回归的多分类任务是机器学习领域中的一种常见应用。softmax回归,又称多项逻辑回归或多类逻辑回归,是逻辑回归在多分类问题上的推广。以下是对基于softmax回归的多分类任务的详细解释: 一、softmax回归的原理 softmax回归的核心思想是通过softmax函数将输入数据…...

bs4基本运用

1. bs4基本使用 1.1. 简介 bs4的全称为 BeautifulSoup。和lxml一样&#xff0c;是一个html的解析器&#xff0c;主要功能也是解析数据和提取数据 。 本模块作为了解模块&#xff0c;实际开发中很少用这个模块去解析数据&#xff0c;大家可能会想为什么这个模块会逐渐被淘汰&…...

MySQL 时区参数 time_zone 详解

文章目录 前言1. 时区参数影响2. 如何设置3. 字段类型选择 前言 MySQL 时区参数 time_zone 有什么用&#xff1f;修改它有什么影响&#xff1f;如何设置该参数&#xff0c;本篇文章会详细介绍。 1. 时区参数影响 time_zone 参数影响着 MySQL 系统函数还有字段的 DEFAULT CUR…...

Redis - 消息队列 Stream

一、概述 消息队列 定义 消息队列模型&#xff1a;一种分布式系统中的消息传递方案&#xff0c;由消息队列、生产者和消费者组成消息队列&#xff1a;负责存储和管理消息的中间件&#xff0c;也称为消息代理&#xff08;Message Broker&#xff09;生产者&#xff1a;负责 产…...

Docker:国内加速源

阿里云docker加速云&#xff1a; sudo tee /etc/docker/daemon.json <<EOF { “registry-mirrors”: [“https://euf11uji.mirror.aliyuncs.com”] } EOFhttps://docker.mozhu.dev/ sudo tee /etc/docker/daemon.json <<EOF {"registry-mirrors": [&qu…...

Android Studio更改项目使用的JDK

一、吐槽 过去&#xff0c;在安卓项目中配置JDK和Gradle的过程非常直观&#xff0c;只需要进入Android Studio的File菜单中的Project Structure即可进行设置&#xff0c;十分方便。 原本可以在这修改JDK: 但大家都知道&#xff0c;Android Studio的狗屎性能&#xff0c;再加…...

ubuntu+ros新手笔记(四):gazebo无法加载

以下为ChatGPT 的解决方案&#xff0c;对我来说是可行的&#xff01;&#xff01; 我按照第2步操作就解决辣&#xff01;&#xff01; 我的提问&#xff1a; 在ubuntu 22.04 和ros2 humble环境下&#xff0c;gazebo加载不了 ChatGPT 回答&#xff1a; 在 Ubuntu 22.04 和 …...

vue季度选择器(antd2.0 版本无此控件,单独写一个)

vue季度选择器 效果显示 效果显示 <template><div><a-popoverplacement"bottom"overlayClassName"season-picker"trigger"click"v-model"showSeason"><template #content><div class"season-picker-b…...

C/C++代码性能优化技巧的书籍及资料

使用C/C开发的场景&#xff0c;大多对代码的执行的速度&#xff0c;实时性有较高的要求&#xff0c;像嵌入式系统的开发&#xff0c;资源还受限。在算力存储空间有限的MCU上写出简洁又高效的代码实际是一种艺术。软件工程师在代码设计上的这种差距&#xff0c;会反映在产品的性…...

通俗易懂的 Nginx 反向代理 配置

通俗易懂的 Nginx 反向代理 配置 首先 root 与 alias 的区别 root 是直接拼接 root location location /i/ {root /data/w3; }当请求 /i/top.gif &#xff0c;/data/w3/i/top.gif 会被返回。 alias 是用 alias 替换 location location /i/ {alias /data/w3/images/; }当请…...

docker设置容器自动启动

说起开机自动启动应该很多人都遇到过&#xff0c;我们公司做的系统很多的中间件都没有设置开机自动启动然后中间修改问题又设置了一些临时生效的文件&#xff0c;开始的时候大家都不以为意&#xff0c;知道公司陆续有人离职入职管理交接一塌糊涂&#xff0c;项目成了历史遗留问…...

蓝桥杯刷题——day1

蓝桥杯刷题——day1 题目一题干题目解析代码 题目二题干题目解析代码 题目一 题干 给定一个字符串 s &#xff0c;验证 s 是否是 回文串 &#xff0c;只考虑字母和数字字符&#xff0c;可以忽略字母的大小写。本题中&#xff0c;将空字符串定义为有效的 回文串 。 题目链接&a…...

Leetcode 面试150题 399.除法求值

系列博客目录 文章目录 系列博客目录题目思路代码 题目 链接 思路 广度优先搜索 我们可以将整个问题建模成一张图&#xff1a;给定图中的一些点&#xff08;点即变量&#xff09;&#xff0c;以及某些边的权值&#xff08;权值即两个变量的比值&#xff09;&#xff0c;试…...

一键切换模型:OpenClaw同时管理多个SecGPT-14B实例

一键切换模型&#xff1a;OpenClaw同时管理多个SecGPT-14B实例 1. 为什么需要管理多个模型实例 去年我在搭建本地AI安全分析系统时&#xff0c;遇到了一个典型困境&#xff1a;当SecGPT-14B模型需要版本升级时&#xff0c;整个服务必须停机。更糟的是&#xff0c;有次模型推理…...

S-UI Windows版实战指南:从部署到精通的全方位解决方案

S-UI Windows版实战指南&#xff1a;从部署到精通的全方位解决方案 为什么选择S-UI&#xff1f;解决Windows代理管理的三大痛点 你是否也曾遇到这些问题&#xff1a;在Windows服务器上部署代理面板时&#xff0c;面对复杂的命令行操作望而却步&#xff1f;尝试多种工具后仍无法…...

XCP或者CCP标定,A2L标定文件,基于map文件自动更新A2L的地址和结构体变量的地址 源...

XCP或者CCP标定&#xff0c;A2L标定文件&#xff0c;基于map文件自动更新A2L的地址和结构体变量的地址 源码基于C&#xff03;需要开发&#xff0c;编译器为VS2022搞汽车电子的兄弟应该都遇到过这样的问题——辛辛苦苦标定的A2L文件&#xff0c;程序稍微改两行代码&#xff0c;…...

镜像视界|大模型+空间智能:公安视频系统迈入“目标持续掌控时代”——融合多视角三角测量、动态三维重构与行为认知引擎的无感定位体系

&#x1f4d8; 镜像视界&#xff5c;大模型空间智能&#xff1a;公安视频系统迈入“目标持续掌控时代”——融合多视角三角测量、动态三维重构与行为认知引擎的无感定位体系一、时代转折&#xff1a;公安视频系统进入“大模型时代”近年来&#xff0c;以大模型为代表的新一代人…...

Claude Code开源第一人,竟是华人辍学博士!CC之父回应:纯手误

51万行Claude Code代码全网裸奔&#xff0c;背后泄密第一人竟是他。就在刚刚&#xff0c;CC之父回应来了&#xff1a;是人&#xff0c;不是Bun。爆出Claude Code源码第一人&#xff0c;竟被全网扒出来了&#xff01;3月31日凌晨4点23分&#xff0c;安全研究员Chaofan Shou在X上…...

基于双边相关变换与TDOA技术的Matlab角度估计方法:TCT-DOA的原理与实现

基于Matlab的TCT-DOA角度估计 双边相关变换&#xff08;TCT&#xff09;是一种信号处理技术&#xff0c;用于测量两个信号之间的相似性 它通过计算两个信号在不同时间滞后下的互相关&#xff0c;可以捕捉信号的时变特性 TDOA是通过测量信号在两个或多个接收器上的到达时间差来确…...

事件驱动:为AI原生应用领域注入新活力

事件驱动&#xff1a;为AI原生应用领域注入新活力关键词&#xff1a;事件驱动、AI原生应用、事件流、实时响应、异步架构、微服务、事件溯源摘要&#xff1a;本文将带你走进「事件驱动」与「AI原生应用」的交叉领域&#xff0c;通过生活案例、技术原理解析和实战代码&#xff0…...

告别‘一视同仁’:用HAN(异质图注意力网络)搞定电影推荐里的‘导演偏好’与‘演员偏好’

异构图注意力网络在电影推荐中的实战&#xff1a;如何让算法读懂导演偏好与演员偏好 想象这样一个场景&#xff1a;你刚看完詹姆斯卡梅隆执导的《终结者》&#xff0c;流媒体平台紧接着推荐了同样由施瓦辛格主演的《终结者2》和卡梅隆的另一部作品《泰坦尼克号》。虽然这三部电…...

Open UI5 源代码解析之780:Label.js

源代码仓库: https://github.com/SAP/openui5 源代码位置:src\sap.m\src\sap\m\Label.js sap.m.Label 文件深度解析与项目作用说明 一、文件定位与整体职责 Label.js 位于 sap.m 组件库中,是一个非常基础却影响面极广的控件实现文件。它定义了 sap.m.Label 的完整行为,…...

解决Python文件路径超长问题:Windows系统下的终极指南

解决Python文件路径超长问题&#xff1a;Windows系统下的终极指南 在Windows平台上开发Python应用时&#xff0c;文件路径长度限制是个令人头疼的"历史遗留问题"。记得第一次接手一个大型Python项目时&#xff0c;我花了整整两天时间才搞明白为什么某些文件总是无法读…...