网站建设的互动性,青岛博采网络,wordpress 地址 html代码,室内效果图制作Android系统启动正常来说会涉及到如下几个过程#xff1a;
引导加载程序#xff08;Bootloader#xff09;Linux内核#xff08;Kernel#xff09;#xff0c;负责硬件抽象、内存管理、进程管理、网络堆栈等init进程 init进程读取init.rc配置文件#xff0c;用于启动各…Android系统启动正常来说会涉及到如下几个过程
引导加载程序BootloaderLinux内核Kernel负责硬件抽象、内存管理、进程管理、网络堆栈等init进程 init进程读取init.rc配置文件用于启动各种守护进程和服务它是Android系统的第一个用户级进程Zygote进程Zygote是一个特殊的Java虚拟机进程它预加载核心类库并在需要时通过进程fork机制快速启动应用程序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进程也会相继被杀。然后就卡启动了。 这个崩溃点其实挺有意思的在这个情况下
netpolicy的命令有时候可以使用有时候不能使用。
adb shell dumpsys netpolicy
adb shell cmd netpolicy set restrict-background true
adb shell cmd netpolicy set restrict-background falsenetd是起来了还没初始化完又被杀掉了。
所以这种场景下ping的时候会报错找不到域名dns服务没就绪直接ping ip会报错网络不可达。
iptable设置了是无效的短暂有效
netd在启动的时候会通过 iptables-restore、ip6tables-restore 设置一些策略如果在这个场景下手动设置一些iptable的规则会被iptables-restore中的默认设备覆盖掉。
iptables -L
iptables -D bw_data_saver 1
iptables -I bw_data_saver 1 -j RETURNPackageManagerService
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的策略来规避这些文件被修改导致的系统故障。