Home | History | Annotate | Download | only in articles
      1 page.title=Inicializao direta
      2 page.keywords=preview,sdk,direct boot
      3 page.tags=androidn
      4 page.image=images/cards/card-nyc_2x.jpg
      5 
      6 @jd:body
      7 
      8 <div id="tb-wrapper">
      9 <div id="tb">
     10   <h2>Neste documento</h2>
     11   <ol>
     12     <li><a href="#run">Solicitar acesso para executar durante a inicializao direta</a></li>
     13     <li><a href="#access">Acesso ao armazenamento criptografado do dispositivo</a></li>
     14     <li><a href="#notification">Receber notificao quando o usurio desbloquear</a></li>
     15     <li><a href="#migrating">Migrar dados existentes</a></li>
     16     <li><a href="#testing">Testar seu aplicativo com reconhecimento de criptografia</a></li>
     17   </ol>
     18 </div>
     19 </div>
     20 
     21 <p>O Android N  executado em um modo seguro de <i>inicializao direta</i>
     22 quando o dispositivo  ligado, mas o usurio no o
     23 desbloqueia. Para isso, o sistema oferece dois locais de armazenamento para dados:</p>
     24 
     25 <ul>
     26 <li><i>O armazenamento criptografado de credenciais</i>, que  o local de armazenamento padro
     27 e  disponibilizado apenas depois que o usurio desbloqueia o dispositivo.</li>
     28 <li><i>O armazenamento criptografado do dispositivo</i>, que  um local de armazenamento disponibilizado
     29 durante o modo de inicializao direta e depois que o usurio desbloqueia o dispositivo.</li>
     30 </ul>
     31 
     32 <p>Por padro, aplicativos no so executados no modo de inicializao direta.
     33 Se seu aplicativo precisa executar aes durante esse modo, voc pode registrar os
     34 componentes que devem ser executados. Alguns casos comuns
     35 para aplicativos que precisam ser executados no modo de inicializao direta:</p>
     36 
     37 <ul>
     38 <li>Aplicativos com notificaes programadas, como aplicativos de
     39 despertador.</li>
     40 <li>Aplicativos que fornecem notificaes importantes ao usurio, como aplicativos de SMS.</li>
     41 <li>Aplicativos que fornecem servios de acessibilidade, como o Talkback.</li>
     42 </ul>
     43 
     44 <p>Se seu aplicativo precisar acessar dados enquanto estiver no modo de inicializao direta, use
     45 o armazenamento criptografado do dispositivo. O armazenamento criptografado do dispositivo contm dados
     46 criptografados com uma chave que s  disponibilizada depois que o dispositivo realizou
     47 uma inicializao verificada com sucesso.</p>
     48 
     49 <p>Para dados que devem ser criptografados com uma chave associada s credenciais
     50 do usurio, como um PIN ou uma senha, use o armazenamento criptografado de credenciais.
     51 Esse armazenamento s  disponibilizado depois que o usurio
     52 desbloquear o dispositivo com sucesso e at que ele reinicie o dispositivo novamente. Se o
     53 usurio ativar a tela de bloqueio aps desbloquear o dispositivo, isso no bloquear
     54 o armazenamento criptografado de credenciais.</p>
     55 
     56 <h2 id="run">Solicitar acesso para executar durante a inicializao direta</h2>
     57 
     58 <p>Aplicativos devem registrar seus componentes com o sistema antes de
     59 poderem ser executados no modo de inicializao direta ou acessar o armazenamento criptografado
     60 do dispositivo. Os aplicativos so registrados com o sistema ao marcar os componentes como
     61 <i>tendo reconhecimento de criptografia</i>. Para marcar seu componente como tendo reconhecimento de criptografia, defina o atributo
     62 <code>android:directBootAware</code> como true no manifesto.<p>
     63 
     64 <p>Componentes com reconhecimento de criptografia podem se registrar para receber uma mensagem de transmisso
     65 <code>LOCKED_BOOT_COMPLETED</code> do
     66 sistema quando o dispositivo  reiniciado. Nesse momento, o armazenamento criptografado do
     67 dispositivo  disponibilizado e pode executar tarefas
     68 necessrias durante o modo de inicializao, como o acionamento de um alarme programado.</p>
     69 
     70 <p>O snippet de cdigo a seguir  um exemplo de como registrar um
     71 {@link android.content.BroadcastReceiver} como tendo reconhecimento de criptografia e adicionar um
     72 filtro de inteno para <code>LOCKED_BOOT_COMPLETED</code> no manifesto do aplicativo:</p>
     73 
     74 <pre>
     75 &lt;receiver
     76   android:directBootAware="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>Quando o usurio desbloquear o dispositivo, todos os componentes podero acessar o armazenamento
     85 criptografado do dispositivo e o armazenamento criptografado de credenciais.</p>
     86 
     87 <h2 id="access">Acesso ao armazenamento criptografado do dispositivo</h2>
     88 
     89 <p>Para acessar o armazenamento criptografado do dispositivo, crie uma segunda instncia de
     90 {@link android.content.Context} chamando
     91 <code>Context.createDeviceProtectedStorageContext()</code>. Todas as chamadas da API
     92 de armazenamento que usam esse contexto acessam o armazenamento criptografado do dispositivo. O
     93 exemplo a seguir acessa o armazenamento criptografado do dispositivo e abre um
     94 arquivo de dados existente do aplicativo:</p>
     95 
     96 <pre>
     97 Context directBootContext = appContext.createDeviceProtectedStorageContext();
     98 // Access appDataFilename that lives in device encrypted storage
     99 FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
    100 // Use inStream to read content...
    101 </pre>
    102 
    103 <p>Use o armazenamento criptografado do dispositivo somente para
    104 informaes que precisem ser acessadas durante o modo de inicializao direta.
    105 No use o armazenamento criptografado do dispositivo como um repositrio criptografado para fins gerais.
    106 Para informaes particulares do usurio ou dados criptografados que no so necessrios durante
    107 o modo de inicializao direta, use o armazenamento criptografado de credenciais.</p>
    108 
    109 <h2 id="notification">Receber notificao quando o usurio desbloquear</h2>
    110 
    111 <p>Quando o usurio desbloquear o dispositivo aps a reinicializao, seu aplicativo poder voltar
    112 a acessar o armazenamento criptografado de credenciais e usar servios regulares do sistema que
    113 dependem das credenciais do usurio.</p>
    114 
    115 <p>Para receber uma notificao quando o usurio desbloquear o dispositivo aps uma reinicializao,
    116 registre um {@link android.content.BroadcastReceiver} do componente em execuo
    117 para ouvir a mensagem <code>ACTION_USER_UNLOCKED</code>. Voc tambm pode
    118 receber a mensagem {@link android.content.Intent#ACTION_BOOT_COMPLETED
    119 ACTION_BOOT_COMPLETED} existente, que agora indica que o dispositivo foi inicializado e que
    120 o usurio o desbloqueou.</p>
    121 
    122 <p>Voc pode enviar uma consulta diretamente se o usurio desbloquear o dispositivo chamando
    123 <code>UserManager.isUserUnlocked()</code>.</p>
    124 
    125 <h2 id="migrating">Migrar dados existentes</h2>
    126 
    127 <p>Se um usurio atualizar o dispositivo para usar o modo de inicializao direta, voc poder ter dados
    128 existentes que precisem ser migrados para o armazenamento criptografado do dispositivo. Use
    129 <code>Context.moveSharedPreferencesFrom()</code> e
    130 <code>Context.moveDatabaseFrom()</code> para migrar dados de preferncias e do banco de
    131 dados entre o armazenamento criptografado de credenciais e o armazenamento criptografado do dispositivo.</p>
    132 
    133 <p>Tenha bom senso ao decidir quais dados migrar do armazenamento
    134 criptografado de credenciais para o armazenamento criptografado do dispositivo. No migre
    135 informaes particulares do usurio, como senhas ou tokens de autorizao, para o
    136 armazenamento criptografado do dispositivo. Em alguns casos, pode ser necessrio gerenciar
    137 conjuntos separados de dados nos dois repositrios criptografados.</p>
    138 
    139 <h2 id="testing">Testar seu aplicativo com reconhecimento de criptografia</h2>
    140 
    141 <p>Teste seu aplicativo com reconhecimento de criptografia usando o novo modo de inicializao direta. Existem duas
    142 maneiras de ativar a inicializao direta.</p>
    143 
    144 <p class="caution"><strong>Cuidado:</strong> ao ativar a inicializao direta,
    145 voc apaga todos os dados do usurio no dispositivo.</p>
    146 
    147 <p>Em dispositivos compatveis com o Android N instalado, ative a
    148 inicializao direta seguindo um destes procedimentos:</p>
    149 
    150 <ul>
    151 <li>No dispositivo, ative <b>Developer options</b>, se ainda no tiver feito isso,
    152 acessando <b>Settings &gt; About phone</b> e tocando em <b>Build number</b>
    153 sete vezes. Quando a tela de opes do desenvolvedor for disponibilizada, acesse
    154 <b>Settings &gt; Developer options</b> e selecione
    155 <b>Convert to file encryption</b>.</li>
    156 <li>Use os seguintes comandos de shell adb para ativar o modo de inicializao direta:
    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>Um modo de inicializao direta emulado tambm est disponvel, caso voc precise trocar
    165 de modo nos dispositivos de teste. O modo emulado s deve ser usado durante
    166 o desenvolvimento e pode causar perda de dados. Para ativar o modo de inicializao direta,
    167 defina um padro de bloqueio no dispositivo, escolha "No thanks", caso seja solicitada
    168 uma tela de inicializao segura ao definir esse padro, e, em seguida, use o
    169 seguinte comando de shell adb:</p>
    170 
    171 <pre class="no-pretty-print">
    172 $ adb shell sm set-emulate-fbe true
    173 </pre>
    174 
    175 <p>Para desativar o modo de inicializao direta emulado, use o seguinte comando:</p>
    176 
    177 <pre class="no-pretty-print">
    178 $ adb shell sm set-emulate-fbe false
    179 </pre>
    180 
    181 <p>O uso desses comandos faz com que o dispositivo seja reinicializado.</p>
    182