• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=Режим Direct Boot
2page.keywords=preview,sdk,direct boot
3page.tags=androidn
4page.image=images/cards/card-nyc_2x.jpg
5
6@jd:body
7
8<div id="tb-wrapper">
9<div id="tb">
10  <h2>Содержание документа</h2>
11  <ol>
12    <li><a href="#run">Запрос доступа для запуска в режиме Direct Boot</a></li>
13    <li><a href="#access">Доступ к шифрованному хранилищу данных устройства</a></li>
14    <li><a href="#notification">Уведомление о разблокировке пользователем</a></li>
15    <li><a href="#migrating">Перенос имеющихся данных</a></li>
16    <li><a href="#testing">Тестирование приложения с поддержкой шифрования</a></li>
17  </ol>
18</div>
19</div>
20
21<p>Android N работает в защищенном режиме <i>Direct Boot,</i> когда
22устройство было включено, но не разблокировано пользователем.
23 Для поддержки такого режима работы в системе имеется два хранилища данных:</p>
24
25<ul>
26<li><i>Хранилище, зашифрованное на уровне учетных данных.</i>Это хранилище используется по умолчанию
27и доступно только тогда, когда пользователь разблокирует устройство.</li>
28<li><i>Хранилище, зашифрованное на уровне устройства.</i>Это хранилище доступно в режиме
29Direct Boot и тогда, когда пользователь разблокирует устройство.</li>
30</ul>
31
32<p>По умолчанию в режиме Direct Boot приложения не работают.
33Если вашему приложению требуется выполнять какие-то действия в режиме Direct Boot, вы можете зарегистрировать
34компоненты приложения, которые должны быть запущены в этом режиме. Некоторые распространенные примеры использования
35приложений, выполняющих операции в режиме Direct Boot:</p>
36
37<ul>
38<li>Приложения с уведомлениями по расписанию, например,
39будильники.</li>
40<li>Приложения, посылающие пользователю важные уведомления, например, приложения СМС.</li>
41<li>Приложения для лиц с ограниченными возможностями, например, Talkback.</li>
42</ul>
43
44<p>Если вашему приложению требуется доступ к данным в режиме Direct Boot, используйте
45шифрованное хранилище устройства. Шифрованное хранилище устройства содержит данные,
46зашифрованные с помощью ключа, доступного только после
47успешной подтвержденной загрузки устройства.</p>
48
49<p>Если данные следует шифровать с помощью ключа, связанного с учетными данными
50пользователя (например, с PIN-кодом или паролем), используйте хранилище, требующее ввода учетных данных.
51Такое хранилище доступно только после успешной
52разблокировки устройства пользователем и до тех пор, пока пользователь не перезапустит устройство. Если
53пользователь включает экран блокировки после разблокировки устройства, шифрованное хранилище,
54требующее ввода учетных данных, не блокируется.</p>
55
56<h2 id="run">Запрос доступа для запуска в режиме Direct Boot</h2>
57
58<p>Прежде
59чем работать в режиме Direct Boot или получать доступ к шифрованному
60хранилищу устройства, приложения должны зарегистрировать свои компоненты в системе. Приложения регистрируются в системе, помечая компоненты как
61<i>поддерживающие шифрование</i>. Чтобы пометить компонент как поддерживающий шифрование, нужно установить для атрибута
62<code>android:encryptionAware</code> в манифесте значение true.<p>
63
64<p>Компоненты, поддерживающие шифрование, можно регистрировать для получения
65<code>LOCKED_BOOT_COMPLETED</code> широковещательных сообщений от
66системы после перезапуска устройства. В этот момент шифрованное хранилище устройства
67доступно, и компонент может выполнять необходимые задачи в режиме
68Direct Boot, например, включать будильник по расписанию.</p>
69
70<p>В следующем фрагменте кода приведен пример регистрации компонента
71{@link android.content.BroadcastReceiver} как поддерживающего шифрование и добавления
72фильтра намерения <code>LOCKED_BOOT_COMPLETED</code> в манифест приложения:</p>
73
74<pre>
75&lt;receiever
76  android:encryptionAware="true" &gt;
77  ...
78  &lt;intent-filter&gt;
79    &lt;action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" /&gt;
80  &lt;/intent-filter&gt;
81&lt;/receiver&gt;
82</pre>
83
84<p>После разблокировки устройства пользователем все компоненты имеют доступ к шифрованному хранилищу устройства
85и к шифрованному хранилищу, требующему ввода учетных данных.</p>
86
87<h2 id="access">Доступ к шифрованному хранилищу данных устройства</h2>
88
89<p>Для получения доступа к шифрованному хранилищу устройства следует создать второй экземпляр
90{@link android.content.Context} посредством вызова
91<code>Context.createDeviceEncryptedStorageContext()</code>. Все вызовы API
92системы хранения данных с использованием этого контекста получают доступ к шифрованному хранилищу устройства. В
93следующем примере показано, как получить доступ к шифрованному хранилищу устройства и открыть существующий
94файл данных приложения:</p>
95
96<pre>
97Context directBootContext = Context.createDeviceEncryptedStorageContext();
98// Access appDataFilename that lives in device encrypted storage
99FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
100// Use inStream to read content...
101</pre>
102
103<p>Шифрованное хранилище устройства следует использовать только для
104информации, которая должна быть доступна в режиме Direct Boot.
105Шифрованное хранилище устройства не следует использовать в качестве шифрованного хранилища общего назначения.
106Для хранения данных пользователя или шифрованных данных, которые не требуются в режиме
107Direct Boot, следует использовать шифрованное хранилище, требующее ввода учетных данных.</p>
108
109<h2 id="notification">Уведомление о разблокировке пользователем</h2>
110
111<p>Когда после перезагрузки устройства пользователь разблокирует его, ваше приложение может переключиться на
112шифрованное хранилище, требующее ввода учетных данных, и использовать обычные системные службы,
113зависящие от учетных данных пользователя.</p>
114
115<p>Чтобы приложение получало уведомления о разблокировке устройства пользователем после перезагрузки,
116необходимо зарегистрировать {@link android.content.BroadcastReceiver} работающего компонента
117для отслеживания сообщения <code>ACTION_USER_UNLOCKED</code>. Также приложение может
118получать существующее сообщение {@link android.content.Intent#ACTION_BOOT_COMPLETED
119ACTION_BOOT_COMPLETED}, которое теперь указывает, что устройство загружено и разблокировано
120пользователем.</p>
121
122<p>Приложение может направлять запрос напрямую, если пользователь разблокирует устройство посредством вызова
123<code>UserManager.isUserUnlocked()</code>.</p>
124
125<h2 id="migrating">Перенос имеющихся данных</h2>
126
127<p>Если пользователь обновит свое устройство для использования режима Direct Boot, вашему приложению может потребоваться перенести
128имеющиеся данные в шифрованное хранилище устройства. Используйте
129<code>Context.migrateSharedPreferencesFrom()</code> и
130<code>Context.migrateDatabaseFrom()</code> для переноса данных о настройках и содержимого баз данных
131между шифрованным хранилищем, требующим ввода учетных данных, и шифрованным хранилищем устройства.</p>
132
133<p>Хорошо обдумайте, какие данные следует перенести из
134шифрованного хранилища, требующего ввода учетных данных, в шифрованное хранилище устройства. Не следует переносить в
135шифрованное хранилище устройства личные данные пользователя, такие как
136пароли или токены авторизации. В некоторых случаях вашему приложению может потребоваться работать
137с отдельными наборами данных в двух шифрованных хранилищах.</p>
138
139<h2 id="testing">Тестирование приложения с поддержкой шифрования</h2>
140
141<p>Протестируйте свое приложение с поддержкой шифрования в новом режиме Direct Boot. Существуют
142два способа включить режим Direct Boot.</p>
143
144<p class="caution"><strong>Внимание!</strong> При включении режима Direct Boot
145с устройства удаляются все данные пользователя.</p>
146
147<p>Чтобы включить режим
148Direct Boot на поддерживаемых устройствах с Android N, выполните одну из следующих последовательностей действий.</p>
149
150<ul>
151<li>Включите на устройстве параметры разработчика <b>Developer options</b>, если вы еще не сделали этого ранее. Для этого
152перейдите на экран <b>Settings &gt; About phone</b> и нажмите семь раз <b>Build number</b>.
153 Когда параметры разработчика станут доступны, откройте раздел
154<b>Settings &gt; Developer options</b> и выберите
155<b>Convert to file encryption</b>.</li>
156<li>Используйте следующие команды оболочки adb для включения режима Direct Boot:
157<pre class="no-pretty-print">
158$ adb reboot-bootloader
159$ fastboot --wipe-and-use-fbe
160</pre>
161</li>
162</ul>
163
164<p>Если вам требуется переключать
165режимы на тестовых устройствах, вы можете использовать эмуляцию режима Direct Boot. Режим эмуляции следует использовать только для целей
166разработки, в нем возможна потеря данных. Чтобы включить эмуляцию режима Direct Boot,
167установите режим блокировки устройства, выберите пункт "No thanks", если система предлагает открыть
168защищенный экран запуска при установке режима блокировки, а затем используйте
169следующую команду оболочки adb:</p>
170
171<pre class="no-pretty-print">
172$ adb shell sm set-emulate-fbe true
173</pre>
174
175<p>Для отключения эмуляции режима Direct Boot нужно использовать следующую команду:</p>
176
177<pre class="no-pretty-print">
178$ adb shell sm set-emulate-fbe false
179</pre>
180
181<p>При использовании этих команд устройство перезагружается.</p>
182