Home | History | Annotate | Download | only in articles
      1 page.title=Direct Boot
      2 page.keywords=pratinjau,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>Dalam dokumen ini</h2>
     11   <ol>
     12     <li><a href="#run">Meminta Akses untuk Berjalan Selama Direct Boot</a></li>
     13     <li><a href="#access">Mengakses Penyimpanan yang Dienkripsi dengan Perangkat</a></li>
     14     <li><a href="#notification">Mendapatkan Pemberitahuan saat Pengguna Membuka Kunci</a></li>
     15     <li><a href="#migrating">Migrasi Data yang Ada</a></li>
     16     <li><a href="#testing">Menguji Aplikasi Peka Enkripsi Anda</a></li>
     17   </ol>
     18 </div>
     19 </div>
     20 
     21 <p>Android N berjalan dalam mode <i>Direct Boot</i> yang aman
     22 bila perangkat telah dihidupkan namun pengguna tidak membuka
     23 kunci perangkat. Untuk mendukung hal ini, sistem menyediakan dua lokasi penyimpanan untuk data:</p>
     24 
     25 <ul>
     26 <li><i>Penyimpanan yang dienkripsi dengan kredensial</i>, yang merupakan lokasi penyimpanan default
     27 dan hanya tersedia setelah pengguna membuka kunci perangkat.</li>
     28 <li><i>Penyimpanan yang dienkripsi dengan perangkat</i>, yang merupakan lokasi penyimpanan yang tersedia
     29 selama mode Direct Boot dan setelah pengguna membuka kunci perangkat.</li>
     30 </ul>
     31 
     32 <p>Secara default, aplikasi tidak berjalan selama mode Direct Boot.
     33 Jika aplikasi Anda perlu melakukan tindakan selama mode Direct Boot, Anda bisa mendaftarkan
     34 komponen aplikasi yang harus dijalankan selama mode ini. Beberapa kasus penggunaan umum
     35 untuk aplikasi yang perlu dijalankan selama mode Direct Boot antara lain:</p>
     36 
     37 <ul>
     38 <li>Aplikasi yang telah menjadwalkan pemberitahuan, seperti aplikasi
     39 beker.</li>
     40 <li>Aplikasi yang menyediakan pemberitahuan pengguna yang penting, seperti aplikasi SMS.</li>
     41 <li>Aplikasi yang menyediakan layanan aksesibilitas, seperti TalkBack.</li>
     42 </ul>
     43 
     44 <p>Jika aplikasi Anda perlu mengakses data saat dijalankan dalam mode Direct Boot, gunakan
     45 penyimpanan yang dienkripsi dengan perangkat. Penyimpanan yang dienkripsi dengan perangkat berisi data
     46 yang dienkripsi dengan kunci yang hanya tersedia setelah perangkat melakukan
     47 booting yang berhasil diverifikasi.</p>
     48 
     49 <p>Untuk data yang harus dienkripsi dengan kunci yang dikaitkan dengan kredensial
     50 pengguna, seperti PIN atau kata sandi, gunakan penyimpanan yang dienkripsi dengan kredensial.
     51 Penyimpanan yang dienkripsi dengan kredensial hanya tersedia setelah pengguna berhasil
     52 membuka kunci perangkat, hingga saat pengguna menghidupkan ulang perangkat lagi. Jika
     53 pengguna mengaktifkan layar kunci setelah membuka kunci perangkat, hal ini tidak akan mengunci
     54 penyimpanan yang dienkripsi dengan kredensial.</p>
     55 
     56 <h2 id="run">Meminta Akses untuk Berjalan Selama Direct Boot</h2>
     57 
     58 <p>Aplikasi harus mendaftarkan komponennya pada sistem agar
     59 bisa berjalan selama mode Direct Boot atau mengakses
     60 penyimpanan yang dienkripsi dengan perangkat. Aplikasi mendaftar pada sistem dengan menandai komponen sebagai
     61 <i>peka enkripsi</i>. Untuk menandai komponen Anda sebagai peka enkripsi, setel atribut
     62 <code>android:directBootAware</code> ke true dalam manifes Anda.<p>
     63 
     64 <p>Komponen yang peka enkripsi bisa mendaftar untuk menerima pesan siaran
     65 <code>LOCKED_BOOT_COMPLETED</code> dari
     66 sistem bila perangkat telah dihidupkan ulang. Pada tahap ini
     67 penyimpanan yang dienkripsi dengan perangkat akan tersedia, dan komponen Anda bisa mengeksekusi tugas-tugas yang perlu
     68 dijalankan selama mode Direct Boot, seperti memicu alarm yang terjadwal.</p>
     69 
     70 <p>Cuplikan kode berikut adalah contoh cara mendaftarkan
     71 {@link android.content.BroadcastReceiver} sebagai peka enkripsi, dan menambahkan sebuah
     72 filter intent untuk <code>LOCKED_BOOT_COMPLETED</code>, dalam manifes aplikasi:</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>Setelah pengguna membuka kunci perangkat, semua komponen bisa mengakses
     85 penyimpanan yang dienkripsi dengan perangkat serta penyimpanan yang dienkripsi dengan kredensial.</p>
     86 
     87 <h2 id="access">Mengakses Penyimpanan yang Dienkripsi dengan Perangkat</h2>
     88 
     89 <p>Untuk mengakses penyimpanan yang dienkripsi dengan perangkat, buat instance
     90 {@link android.content.Context} kedua dengan memanggil
     91 <code>Context.createDeviceProtectedStorageContext()</code>. Semua panggilan
     92 API penyimpanan yang dibuat menggunakan konteks ini mengakses penyimpanan yang dienkripsi dengan perangkat. Contoh
     93 berikut mengakses penyimpanan yang dienkripsi dengan perangkat dan membuka file data aplikasi
     94 yang ada:</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>Gunakan penyimpanan yang dienkripsi dengan perangkat hanya untuk
    104 informasi yang harus bisa diakses selama mode Direct Boot.
    105 Jangan gunakan penyimpanan yang dienkripsi dengan perangkat sebagai penyimpanan terenkripsi serba guna.
    106 Untuk informasi pengguna yang bersifat pribadi, atau data terenkripsi yang tidak diperlukan selama
    107 mode Direct Boot, gunakan penyimpanan yang dienkripsi dengan kredensial.</p>
    108 
    109 <h2 id="notification">Mendapatkan Pemberitahuan saat Pengguna Membuka Kunci</h2>
    110 
    111 <p>Setelah pengguna membuka kunci perangkat setelah restart, aplikasi Anda bisa beralih untuk
    112 mengakses penyimpanan yang dienkripsi dengan kredensial dan menggunakan layanan sistem biasa yang
    113 bergantung pada kredensial pengguna.</p>
    114 
    115 <p>Agar diberi tahu bila pengguna membuka kunci perangkat setelah boot ulang,
    116 daftarkan {@link android.content.BroadcastReceiver} dari komponen yang berjalan
    117 untuk mendengarkan pesan <code>ACTION_USER_UNLOCKED</code>. Atau, Anda bisa
    118 menerima pesan {@link android.content.Intent#ACTION_BOOT_COMPLETED
    119 ACTION_BOOT_COMPLETED} yang ada, yang sekarang menunjukkan bahwa perangkat telah dihidupkan dan
    120 pengguna telah membuka kunci perangkat.</p>
    121 
    122 <p>Anda bisa langsung kueri apakah pengguna telah membuka kunci perangkat dengan memanggil
    123 <code>UserManager.isUserUnlocked()</code>.</p>
    124 
    125 <h2 id="migrating">Migrasi Data yang Ada</h2>
    126 
    127 <p>Jika pengguna memperbarui perangkat mereka untuk menggunakan mode Direct Boot,
    128 data Anda yang ada mungkin perlu dipindahkan ke penyimpanan yang dienkripsi dengan perangkat. Gunakan
    129 <code>Context.moveSharedPreferencesFrom()</code> dan
    130 <code>Context.moveDatabaseFrom()</code> untuk memindahkan data preferensi dan
    131 basis data antara penyimpanan yang dienkripsi dengan kredensial dan penyimpanan yang dienkripsi dengan perangkat.</p>
    132 
    133 <p>Pertimbangkan dengan baik saat memutuskan data apa yang akan dipindahkan dari
    134 penyimpanan yang dienkripsi dengan kredensial ke penyimpanan yang dienkripsi dengan perangkat. Anda sebaiknya tidak memindahkan
    135 informasi pengguna yang bersifat rahasia, seperti kata sandi atau token otorisasi, ke
    136 penyimpanan yang dienkripsi dengan perangkat. Dalam beberapa skenario, Anda mungkin perlu mengelola
    137 set data terpisah pada dua tempat penyimpanan yang dienkripsi.</p>
    138 
    139 <h2 id="testing">Menguji Aplikasi Peka Enkripsi Anda</h2>
    140 
    141 <p>Uji aplikasi peka enkripsi Anda menggunakan mode Direct Boot baru. Ada
    142 dua cara untuk mengaktifkan Direct Boot.</p>
    143 
    144 <p class="caution"><strong>Perhatian:</strong> Mengaktifkan Direct Boot
    145 akan menghapus semua data pengguna pada perangkat.</p>
    146 
    147 <p>Pada perangkat yang didukung dengan Android N terpasang, aktifkan
    148 Direct Boot dengan melakukan salah satu hal berikut:</p>
    149 
    150 <ul>
    151 <li>Pada perangkat, aktifkan <b>Developer options</b> jika Anda belum melakukannya dengan
    152 masuk ke <b>Settings &gt; About phone</b>, dan menyentuh <b>Build number</b>
    153 tujuh kali. Setelah layar Developer options terbuka, masuk ke
    154 <b>Settings &gt; Developer options</b> dan pilih
    155 <b>Convert to file encryption</b>.</li>
    156 <li>Gunakan perintah shell adb berikut untuk mengaktifkan mode 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>Mode emulasi Direct Boot juga tersedia, jika Anda perlu mengganti
    165 mode pada perangkat pengujian. Mode emulasi sebaiknya hanya digunakan selama
    166 pengembangan dan bisa menyebabkan kehilangan data. Untuk mengaktifkan mode emulasi Direct Boot,
    167 setel pola kunci pada perangkat, pilih "No thanks" jika ditanya mengenai
    168 layar start-up aman saat menetapkan pola kunci, kemudian gunakan
    169 perintah shell adb berikut:</p>
    170 
    171 <pre class="no-pretty-print">
    172 $ adb shell sm set-emulate-fbe true
    173 </pre>
    174 
    175 <p>Untuk menonaktifkan mode emulasi Direct Boot, gunakan perintah berikut:</p>
    176 
    177 <pre class="no-pretty-print">
    178 $ adb shell sm set-emulate-fbe false
    179 </pre>
    180 
    181 <p>Menggunakan perintah ini akan menyebabkan perangkat melakukan boot ulang.</p>
    182