Developing for Direct Boot

来源:互联网 发布:帝国cms 7.2 编辑:程序博客网 时间:2024/04/28 15:23

原文地址:http://android-developers.blogspot.com/2016/04/developing-for-direct-boot.html


        从Android N开始,在用户解锁设备前,设备可以在第一时间进入新的模式(Direct Boot)。在这种模式下,操作系统是正常运行的,但对应用私有数据的访问会受到限制,并且只有升级到 Direct Boot award 的应用可以运行。


Direct Boot 适合我的应用吗?

并不是所有的应用都应该运行在 Direct Boot 模式的,所以在编写你的代码前,先检查一下你的应用是否符合以下几种情况:

  • 定时发出警报的应用,如闹钟
  • 提供重要且及时通知的应用,如短信
  • 为其他应用或系统提供服务的应用,如后台服务
但是请记住,这并不是一个详尽的列表,我们期待着发现其他可以受益于Direct Boot模式的应用。


让你的应用成为Direct Boot award

为了让你的应用可以运行在锁定状态下,你必须在manifest中显式标记组件为Direct Boot award

<activity|provider|receiver|service ...       android:directBootAware=”true”> 

你可以从应用中选出需要标记为Direct Boot award的组件作为一个子集,但如果你用的是自定义的application类,当所有组件被标记为Direct Boot award时,你的应用会被默认的标记为Direct Boot award

对那些需要在操作系统进入Direct Boot模式就开始运行的应用,我们提供了一个新的Intent.ACTION_LOCKED_BOOT_COMPLETED广播。在用户解锁设备后,所有的应用仍会收到Intent.ACTION_BOOT_COMPLETED广播。
使用设备受保护的储存区

为了在用户提供解锁应用私有数据的签名前运行应用,所有的Android N设备为数据提供了两个储存区:

  • Credential protected storage,这是所有应用的默认存储区域,只有在用户解锁设备后才能使用
  • Device protected storage,这是新的储存区域。当设备启动后,可以在任何时刻访问这个储存区域,包括在Direct Boot模式中
应用中被标记为Direct Boot award的组件运行在Direct Boot模式时,它们请求数据时必须依赖Device protected storage。在用户解锁设备后,它们仍然可以访Credential protected storage

为了访问Device protected storage,你需要为所有文件相关的APIs创建并使用间接的Context对象

Context deviceProtectedContext = context.createDeviceProtectedStorageContext();   deviceProtectedContext.openFileInput( ... )

当你的应用升级到Direct Boot award版本,你可能需要把一些以前保存的设置参数或者数据库迁移到Device protected storage中去。在访问这些设置和数据之前,你应该使用Context.moveSharedPreferencesFrom()和Context.moveDatabaseFrom(),这样即使数据是从旧版本或其他设备中备份和恢复的,应用也可以继续正常工作。

注意事项

你应该小心考虑在Device protected storage中储存什么数据。这些数据应该是能让应用运行在Direct Boot模式的最小数据集。例如,在消息应用中,你可以用小区域存储一个仅能访问新消息数量的访问令牌。所有敏感的私人信息,例如完整的信息历史记录和读写访问令牌,仍应该存放在Credential protected storage中。

另一个要注意的是,在Direct Boot模式中,应用只能访问其他的Direct Boot award应用和组件。如果你的应用依赖于外部Services和Activities时,请确保妥善处理外部Services和Activities不可用的情况。Intent filters会默认匹配当前状态下(锁定/解锁)可用的组件。这里有两个新的标识可以明确的告诉Package Manager哪些组件是可用的:

  • PackageManager.MATCH_DIRECT_BOOT_AWARE
  • PackageManager.MATCH_DIRECT_BOOT_UNAWARE
下一步干什么?

在Android N设备发布之前,你可以用Android N Preview builds测试你的应用。在Nexus 5X 和 Nexus 6P上,你可以通过Settings > Developer options > Convert to file encryption清除所有用户数据并使你的设备完全运行在Direct Boot模式。或者,你可以重启并进入Bootloader,然后发出以下命令:

 $ adb reboot-bootloader   $ fastboot --wipe-and-use-fbe  
警告:这两种方法都会使你的设备恢复出厂设置并删除所有的用户数据。

此外,你可以用虚拟Direct Boot模式。如果出现提示安全启动屏幕时请选择“No thanks”,然后用下面的adb shell命令启动/关闭虚拟Direct Boot模式:

 $ adb shell sm set-emulate-fbe true   $ adb shell sm set-emulate-fbe false  

请注意,使用这些命令会使你的设备重启。你应该只在测试设备上使用虚拟Direct Boot模式,因为这有可能导致数据丢失。

0 0
原创粉丝点击