android13#setupwizard

💡 原文中文,约38700字,阅读约需92分钟。
📝

内容提要

本文介绍了Android系统中引导程序的设置过程,包括默认引导程序和其源代码,各部分的设置和功能,以及整个流程的剖析和相关代码和日志剖析。

🔎

延伸解读

引导程序优先级与启动顺序

在Android启动过程中,系统通过Intent的优先级决定哪个Home应用被启动。默认的SDK Setup优先级为3,Google SetupWizard优先级为5,而FallbackHome优先级为-1000。优先级高的应用会优先被解析,因此工厂重置后SetupWizard会首先启动。但FallbackHome因声明了directBootAware,在直接启动阶段(用户未解锁时)即使优先级低也会被启动,确保系统有基本界面。

直接启动感知与FallbackHome的作用

Android支持直接启动(Direct Boot)模式,在此模式下只有声明了directBootAware的组件可以运行。FallbackHome在AndroidManifest中设置了directBootAware为true,因此能在用户解锁前启动,作为临时Home界面。而普通的Launcher(如SearchLauncher)未声明此属性,在直接启动阶段会被过滤掉。当用户解锁后,FallbackHome会检查是否有真正的Home应用可用,若有则自行结束,切换到正常Launcher。

设备配置状态的监控与系统属性设置

系统通过Settings.Global.DEVICE_PROVISIONED标志判断设备是否已完成配置。在ActivityManagerService的systemReady方法中,会调用watchDeviceProvisioning检查该标志:若已配置,则直接设置系统属性ro.device_provisioned为1;否则注册ContentObserver监听该设置的变化。一旦配置完成,观察者会设置系统属性并注销自身。这确保了系统属性能及时反映设备配置状态,供其他组件使用。

引导程序的自禁用机制与配置流程

引导程序在完成配置后,会通过removeSelf方法将自身组件设置为禁用状态,这样下次启动时系统就不会再解析到该引导程序,从而启动正常的Home应用。配置流程包括:preProvision禁用状态栏,doProvision配置Wi-Fi、键盘、显示、电话、位置和ADB等设置,postProvision恢复状态栏并标记设备已配置。整个过程在onCreate中根据DEVICE_PROVISIONED标志决定是否执行,若已配置则直接移除自身。

❓

Q&A

Android引导程序的默认活动类是什么?

Android引导程序的默认活动类是DefaultActivity。

引导程序的优先级是如何设置的?

引导程序的优先级设置为3。

在引导程序的onCreate方法中会执行哪些检查?

在onCreate方法中会检查设备是否已配置,未配置则执行预配置、配置和后配置。

引导程序的doProvision方法中配置了哪些设置?

doProvision方法中配置了Wi-Fi、键盘、显示、电话、位置和ADB等设置。

引导程序的postProvision方法有什么作用?

postProvision方法恢复状态栏操作并标记设备为已配置。

FallbackHome在什么情况下会被激活?

FallbackHome作为后备主屏幕在特定条件下被激活。

🏷️

标签

➡️

继续阅读