Android的directBootAware
属性允许应用在设备启动时,甚至在用户解锁之前运行。然而,这种功能并非没有限制,主要包括以下几点:
主要限制
- 数据访问限制:在Direct Boot模式下,应用无法访问凭据加密存储空间(CE存储空间),该空间包含需要用户解锁才能访问的数据。应用只能访问设备加密存储空间(DE存储空间),该空间在设备启动时即可访问。
- 性能影响:虽然
directBootAware
本身不会直接影响设备性能,但如果应用在设备启动时执行大量操作,可能会对性能产生一定影响。 - 兼容性限制:并非所有Android版本都支持Direct Boot模式。例如,Android 13完全移除了对FDE加密机制的支持,这可能间接影响到Direct Boot模式的可用性。
- 应用启动顺序:在Android 7.0中,为了支持Direct Boot模式,系统在启动Launcher之前会先启动一个FallbackHome,这可能会导致启动Launcher的流程变慢。
安全和隐私考虑
- 数据加密:Direct Boot模式确保了在设备未解锁时,敏感数据(如用户凭证)仍然受到保护,因为这些数据存储在CE存储空间中,只有在用户解锁后才能访问。
- 用户解锁后的行为:一旦用户解锁设备,所有应用都可以访问CE存储空间,这意味着应用可以立即获取到用户解锁后的状态。
如何正确使用
- 注册组件:应用需要在AndroidManifest.xml中将组件标记为
directBootAware="true"
,以便在设备启动时接收ACTION_LOCKED_BOOT_COMPLETED
广播消息。 - 访问设备加密存储空间:应用应使用
Context.createDeviceProtectedStorageContext()
来访问DE存储空间,确保在Direct Boot模式下可以执行必要的操作。
通过了解directBootAware
属性的限制和正确使用方法,开发者可以更好地利用这一功能,同时确保应用的安全性和性能。