The Android Developer Challenge is back! Submit your idea before December 2.

Fitur dan API Android 9

Android 9 (API level 28) memperkenalkan berbagai fitur dan kemampuan baru yang luar biasa bagi pengguna dan developer. Dokumen ini menyoroti hal-hal baru untuk developer.

Untuk mengetahui tentang API baru, baca laporan perbedaan API atau kunjungi referensi Android API. Pastikan juga memeriksa Perubahan Perilaku Android 9 untuk mengetahui tentang area pada aplikasi Anda yang mungkin terpengaruh oleh perubahan platform.

Pemosisian dalam ruangan dengan Wi-Fi RTT

RTT API baru mendukung pemosisian dalam ruangan di aplikasi Anda.

Android 9 menambahkan dukungan platform untuk protokol Wi-Fi IEEE 802.11mc—juga dikenal sebagai Wi-Fi Round-Trip-Time (RTT)—sehingga Anda bisa memanfaatkan pemosisian dalam ruangan di aplikasi Anda.

Pada perangkat yang menjalankan Android 9 dengan dukungan hardware, aplikasi Anda bisa menggunakan RTT API untuk mengukur jarak ke access points (AP) Wi-Fi berkemampuan RTT terdekat. Perangkat harus mengaktifkan layanan lokasi dan pemindaian Wi-Fi (dalam Settings > Location), dan aplikasi Anda harus memiliki izin ACCESS_FINE_LOCATION. Perangkat tidak perlu terhubung ke access point untuk menggunakan RTT. Untuk menjaga privasi, hanya ponsel yang bisa menentukan jarak ke access point; access point tidak memiliki informasi ini.

Bila perangkat Anda mengukur jarak ke 3 atau beberapa access point, Anda bisa menggunakan algoritme multilaterasi untuk memperkirakan posisi perangkat yang paling tepat berdasarkan pengukuran tersebut. Hasilnya biasanya akurat 1 hingga 2 meter.

Dengan tingkat keakuratan ini, Anda bisa build pengalaman baru seperti navigasi dalam bangunan dan layanan berbasis lokasi yang bagus seperti kontrol suara yang jelas (misalnya, "Hidupkan lampu ini"), dan informasi berbasis lokasi (seperti "Adakah penawaran spesial untuk produk ini?").

Dukungan cutout tampilan

Layar Opsi developer menunjukkan ukuran cutout yang berbeda

Menguji cutout tampilan dengan menggunakan emulator

Android 9 menawarkan dukungan bagi layar tepi-ke-tepi terbaru yang berisi cutout tampilan untuk kamera dan speaker. Class DisplayCutout memungkinkan Anda mengetahui lokasi dan bentuk area nonfungsional di mana isi tidak boleh ditampilkan. Untuk menentukan keberadaan dan penempatan area cutout ini, gunakan metode getDisplayCutout().

Atribut layout jendela baru, layoutInDisplayCutoutMode, memungkinkan aplikasi Anda untuk meletakkan isinya di sekitar cutout perangkat. Anda bisa menyetel atribut ini ke salah satu nilai berikut:

Anda bisa menyimulasikan cutout layar pada perangkat atau emulator apa pun yang menjalankan Android 9 dengan cara berikut:

  1. Aktifkan developer options.
  2. Di layar Developer options, scroll ke bawah ke bagian Drawing dan pilih Simulate a display with a cutout.
  3. Pilih ukuran cutout.

Catatan: Kami sarankan untuk menguji tampilan isi di sekitar area cutout menggunakan perangkat atau emulator yang menjalankan Android 9.

Notifikasi

Android 9 memperkenalkan beberapa penyempurnaan ke notifikasi, semuanya tersedia untuk developer yang menargetkan API level 28 dan di atasnya.

Notifikasi Messaging

MessagingStyle dengan foto terlampir.

Notifikasi Messaging

MessagingStyle dengan balasan dan percakapan.

Pengalaman messaging yang disempurnakan

Mulai Android 7.0 (API level 24), Anda bisa menambahkan aksi untuk membalas pesan atau memasukkan teks lain langsung dari notifikasi. Android 9 menyempurnakan fitur ini dengan penyempurnaan berikut:

  • Penyederhanaan dukungan untuk peserta percakapan: Class Person digunakan untuk mengidentifikasi orang-orang yang terlibat dalam percakapan, termasuk avatar dan URI mereka. Banyak API lain, seperti addMessage(), sekarang memanfaatkan class Person sebagai ganti CharSequence. Class Person juga mendukung pola desain Builder.

  • Dukungan gambar: Android 9 sekarang menampilkan gambar dalam Notifikasi Messaging di ponsel. Anda bisa menggunakan setData() pada pesan untuk menampilkan gambar. Cuplikan kode berikut menunjukkan cara membuat Person dan pesan yang berisi gambar.

Kotlin

// Create new Person.
val sender = Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build()
// Create image message.
val message = Message("Picture", time, sender)
        .setData("image/", imageUri)
val style = Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message)

Java

// Create new Person.
Person sender = new Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build();
// Create image message.
Message message = new Message("Picture", time, sender)
        .setData("image/", imageUri);
Notification.MessagingStyle style = new Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message);

  • Menyimpan balasan sebagai draf: Aplikasi Anda bisa mengambil kembali EXTRA_REMOTE_INPUT_DRAFT yang dikirim oleh sistem ketika pengguna secara tidak sengaja menutup notifikasi messaging. Anda bisa menggunakan tambahan ini untuk mengisi terlebih dahulu kolom teks di dalam aplikasi sehingga pengguna dapat menyelesaikan balasannya.

  • Mengidentifikasi bila suatu percakapan adalah percakapan grup: Anda bisa menggunakan setGroupConversation() dengan tujuan untuk mengidentifikasi percakapan sebagai percakapan grup atau nongrup.

  • Menyetel aksi semantik untuk sebuah intent: Metode setSemanticAction() memungkinkan Anda memberi makna semantik pada suatu aksi, seperti "mark as read," "delete," "reply," dan seterusnya.

  • SmartReply: Android 9 mendukung saran balasan yang sama yang tersedia di aplikasi messaging Anda. Gunakan RemoteInput.setChoices() untuk memberikan berbagai respons standar kepada pengguna.

Setelan saluran, siaran, dan Jangan Ganggu

Android 8.0 memperkenalkan Saluran Notifikasi, yang memungkinkan Anda membuat saluran yang dapat dikustomisasi pengguna untuk setiap jenis notifikasi yang ingin ditampilkan. Android 9 menyederhanakan setelan saluran notifikasi dengan perubahan ini:

  • Memblokir grup saluran: Pengguna kini bisa memblokir seluruh grup saluran dalam pengaturan notifikasi untuk suatu aplikasi. Anda bisa menggunakan metode isBlocked() untuk mengidentifikasi saat sebuah grup diblokir dan, berakibat, tidak mengirimkan notifikasi apa pun untuk saluran dalam grup tersebut.

    Selain itu, aplikasi Anda bisa meminta setelan grup saluran saat ini menggunakan metode getNotificationChannelGroup() baru.

  • Tipe intent siaran baru: Sistem Android sekarang mengirimkan intent siaran ketika status pemblokiran saluran notifikasi dan grup saluran berubah. Aplikasi yang memiliki saluran atau grup yang diblokir bisa mendengarkan intent ini dan bereaksi sesuai dengan keadaan. Untuk informasi selengkapnya tentang tindakan dan ekstra intent ini, lihat daftar konstanta terupdate dalam referensi NotificationManager. Untuk informasi tentang respons terhadap intent siaran, lihat Siaran.

  • NotificationManager.Policy memiliki tiga kategori prioritas Do-Not-Disturb baru:

  • NotificationManager.Policy juga memiliki tujuh konstanta Do-Not-Disturb baru yang bisa Anda gunakan untuk meminimalkan gangguan visual:

Dukungan multikamera dan update kamera

Pada perangkat yang menjalankan Android 9, Anda bisa mengakses streaming secara bersamaan dari dua atau beberapa kamera. Pada perangkat dengan kamera dual-depan atau dual-belakang, Anda bisa membuat fitur inovatif yang tidak mungkin dilakukan dengan hanya satu kamera saja, seperti zoom yang mulus, bokeh, dan stereo vision. API ini juga memungkinkan Anda memanggil streaming kamera logis atau tergabung yang bisa secara otomatis beralih di antara dua atau beberapa kamera.

Penyempurnaan lain pada kamera termasuk parameter Session tambahan yang membantu mengurangi penundaan selama pengambilan awal, dan surface sharing yang memungkinkan klien kamera menangani berbagai kasus penggunaan tanpa harus berhenti dan memulai streaming kamera. Kami juga menambahkan API untuk dukungan flash berbasis tampilan dan akses ke stempel waktu OIS untuk efek khusus dan stabilisasi gambar tingkat aplikasi.

Di Android 9, multi-camera API mendukung kamera monokrom untuk perangkat dengan kemampuan FULL atau LIMITED. Keluaran monokrom dicapai melalui format YUV_420_888 dengan Y sebagai grayscale, U (Cb) sebagai 128, dan V (Cr) sebagai 128.

Android 9 juga mengaktifkan dukungan untuk kamera UVC/USB eksternal pada perangkat yang didukung.

ImageDecoder untuk sumber daya dapat digambar dan bitmap

Android 9 memperkenalkan class ImageDecoder , yang menyediakan pendekatan modern untuk decoding gambar. Gunakan class ini sebagai ganti API BitmapFactory dan BitmapFactory.Options .

ImageDecoder memungkinkan Anda membuat Drawable atau Bitmap dari buffer byte, file, atau URI. Untuk mendekode gambar, panggil terlebih dahulu createSource() dengan sumber gambar yang dienkode. Kemudian, panggil decodeDrawable() atau decodeBitmap() dengan meneruskan objek ImageDecoder.Source untuk membuat Drawable] atau Bitmap. Untuk mengubah setelan default, berikan OnHeaderDecodedListener ke decodeDrawable() atau decodeBitmap(). ImageDecoder memanggil onHeaderDecoded() dengan lebar dan tinggi default gambar, setelah diketahui. Bila gambar yang dienkode adalah GIF atau WebP animasi, decodeDrawable() menampilkan Drawable yang merupakan instance dari class AnimatedImageDrawable .

Ada berbagai metode yang bisa Anda gunakan untuk menyetel properti gambar:

  • Untuk menskalakan gambar yang didekode ke ukuran yang tepat, berikan dimensi target ke dalam setTargetSize(). Anda juga bisa menskalakan gambar menggunakan ukuran contoh. Berikan ukuran contoh langsung ke setTargetSampleSize().
  • Untuk memangkas gambar dalam rentang gambar yang diskalakan, panggil setCrop().
  • Untuk membuat bitmap yang bisa berubah, berikan true ke setMutableRequired().

ImageDecoder juga memungkinkan Anda menambahkan efek yang rumit dan disesuaikan pada gambar seperti sudut membulat atau masker melingkar. Gunakan setPostProcessor() dengan instance class PostProcessor untuk menjalankan perintah gambar apa pun yang diinginkan.

Catatan: Ketika Anda melakukan pascaproses AnimatedImageDrawable, efek akan muncul di semua bingkai animasi.

Animasi

Android 9 memperkenalkan class AnimatedImageDrawable untuk menggambar dan menampilkan gambar animasi GIF dan WebP. AnimatedImageDrawable bekerja secara sama dengan AnimatedVectorDrawable dalam hal render thread yang mendorong animasi AnimatedImageDrawable. Render thread juga menggunakan thread pekerja untuk melakukan dekode, sehingga proses dekode tidak mengganggu operasi lain pada render thread. Implementasi ini memungkinkan aplikasi Anda menampilkan gambar animasi tanpa mengelola update atau mengganggu event lain pada UI thread aplikasi Anda.

Sebuah AnimatedImageDrawable bisa didekode menggunakan instance ImageDecoder. Cuplikan kode berikut menunjukkan cara menggunakan ImageDecoder untuk mendekode AnimatedImageDrawable Anda:

Kotlin

@Throws(IOException::class)
private fun decodeImage() {
    val decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(resources, R.drawable.my_drawable))

    // Prior to start(), the first frame is displayed.
    (decodedAnimation as? AnimatedImageDrawable)?.start()
}

Java

private void decodeImage() throws IOException {
    Drawable decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(getResources(), R.drawable.my_drawable));

    if (decodedAnimation instanceof AnimatedImageDrawable) {
        // Prior to start(), the first frame is displayed.
        ((AnimatedImageDrawable) decodedAnimation).start();
    }
}

ImageDecoder memiliki beberapa metode yang memungkinkan Anda untuk memodifikasi gambar lebih lanjut. Misalnya, Anda bisa menggunakan metode setPostProcessor() untuk memodifikasi tampilan gambar, seperti mengaplikasikan masker melingkar atau sudut membulat.

HDR VP9 Video, kompresi gambar HEIF, dan Media API

Android 9 menambahkan dukungan bawaan untuk High Dynamic Range (HDR) VP9 Profile 2, sehingga kini Anda bisa menghadirkan film berkemampuan HDR kepada pengguna YouTube, Play Movies, dan sumber lainnya pada perangkat berkemampuan HDR.

Android 9 menambahkan dukungan encoding gambar HEIF (heic) ke platform. Contoh gambar HEIF didukung dalam class MediaMuxer dan MediaExtractor HEIF meningkatkan kompresi untuk menghemat penyimpanan dan data jaringan. Dengan dukungan platform pada perangkat Android 9, kini mengirim dan menggunakan gambar HEIF dari server backend Anda bisa dilakukan dengan mudah. Setelah memastikan bahwa aplikasi Anda kompatibel dengan format data ini untuk dibagikan dan ditampilkan, cobalah HEIF sebagai format penyimpanan gambar di aplikasi Anda. Anda bisa melakukan konversi jpeg-ke-heic menggunakan ImageDecoder atau BitmapFactory untuk menghasilkan bitmap dari jpeg, dan Anda dapat menggunakan HeifWriter untuk menulis gambar HEIF dari buffer byte YUV, Surface, atau Bitmap.

Metrik media juga tersedia dari class AudioTrack, AudioRecord, dan MediaDrm.

Android 9 menambahkan metode ke class MediaDRM untuk mendapatkan metrik, tingkat HDCP, tingkat keamanan dan jumlah sesi, dan untuk menambahkan lebih banyak kontrol atas tingkat keamanan dan perhentian aman. Lihat Laporan Perbedaan API untuk detailnya.

Di Android 9, AAudio API menyertakan atribut AAudioStream untuk penggunaan, tipe konten, dan preset masukan. Dengan menggunakan atribut ini, Anda bisa membuat streaming yang disesuaikan untuk aplikasi camcorder atau VoIP. Anda juga bisa menyetel SessionID untuk menghubungkan streaming AAudio dengan submix yang dapat berisi efek. Gunakan AudioEffect API untuk mengontrol efeknya.

Android 9 menyertakan AudioEffect API untuk DynamicsProcessing. Dengan class ini Anda bisa build efek audio berbasis saluran yang terdiri dari beberapa tahap dari berbagai jenis termasuk equalization, kompresi multifrekuensi, dan limiter. Jumlah frekuensi dan tahapan aktif bisa dikonfigurasi, dan sebagian besar parameter dapat dikontrol secara real time.

Sensitivitas biaya data di JobScheduler

Mulai Android 9, JobScheduler bisa menggunakan sinyal status jaringan yang disediakan oleh operator untuk meningkatkan penanganan tugas yang terkait dengan jaringan.

Tugas bisa menyatakan perkiraan ukuran data, pemuatan dini sinyal, dan menentukan persyaratan jaringan secara detail. JobScheduler kemudian mengelola tugas sesuai dengan status jaringan. Misalnya, ketika sinyal jaringan menandakan bahwa jaringan sedang padat, JobScheduler mungkin menunda permintaan jaringan berukuran besar. Bila berada pada jaringan tidak dibatasi, JobScheduler bisa menjalankan tugas prefetch untuk meningkatkan pengalaman pengguna, seperti dengan memuat awal judul utama.

Ketika menambahkan tugas, pastikan menggunakan setEstimatedNetworkBytes(), setPrefetch(), dan setRequiredNetwork() pada saat yang tepat untuk membantu JobScheduler menangani pekerjaan dengan benar. Ketika tugas Anda dijalankan, pastikan untuk menggunakan objek Network yang ditunjukkan oleh JobParameters.getNetwork(). Jika tidak, Anda secara tidak langsung menggunakan jaringan default perangkat yang mungkin tidak memenuhi persyaratan Anda, menyebabkan penggunaan data yang tidak diinginkan.

Neural Networks API 1.1

Neural Networks API diperkenalkan di Android 8.1 (API level 27) untuk mempercepat machine learning pada perangkat di Android. Android 9 memperluas dan meningkatkan API, menambahkan dukungan untuk sembilan operasi baru:

Masalah yang dikenal: Ketika memberikan tensor ANEURALNETWORKS_TENSOR_QUANT8_ASYMM ke operasi ANEURALNETWORKS_PAD , yang tersedia di Android 9 dan yang lebih tinggi, keluaran dari NNAPI mungkin tidak cocok dengan keluaran dari framework machine learning tingkat tinggi, seperti TensorFlow Lite. Anda sebaiknya hanya memberikan ANEURALNETWORKS_TENSOR_FLOAT32 sampai masalahnya teratasi.

Selain itu, API ini juga memperkenalkan fungsi baru, ANeuralNetworksModel_relaxComputationFloat32toFloat16(), yang memungkinkan Anda menentukan apakah akan menghitung ANEURALNETWORKS_TENSOR_FLOAT32 dengan kisaran dan presisi serendah format floating-point IEEE 754 16-bit.

Framework IsiOtomatis

Android 9 memperkenalkan beberapa penyempurnaan yang bisa diterapkan layanan IsiOtomatis untuk semakin meningkatkan pengalaman pengguna saat mengisi formulir. Untuk mempelajari lebih lanjut tentang cara menggunakan fitur IsiOtomatis di aplikasi Anda, lihat panduan Framework IsiOtomatis.

Penyempurnaan keamanan

Android 9 memperkenalkan sejumlah fitur keamanan, yang dirangkum dalam bagian berikut:

Android Protected Confirmation

Perangkat yang didukung yang menjalankan Android 9 atau yang lebih tinggi memberi Anda kemampuan untuk menggunakan Android Protected Confirmation. Saat menggunakan alur kerja ini, aplikasi Anda menampilkan peringatan ke pengguna, meminta mereka untuk menyetujui pernyataan singkat. Pernyataan ini memungkinkan aplikasi untuk menegaskan bahwa pengguna ingin menyelesaikan transaksi yang sensitif, misalnya melakukan pembayaran.

Jika pengguna menerima pernyataan tersebut, Android Keystore akan menerima dan menyimpan tanda tangan kriptografik yang dilindungi oleh kode autentikasi pesan hash berkunci (HMAC). Setelah Android Keystore mengonfirmasi validitas pesan, aplikasi Anda bisa menggunakan kunci yang dihasilkan dari trustedConfirmationRequired di trusted execution environment (TEE) untuk menandatangani pesan yang diterima pengguna. Tanda tangan tersebut menunjukkan, dengan keyakinan sangat tinggi, bahwa pengguna telah melihat pernyataan tersebut dan telah menyetujuinya.

Perhatian: Android Protected Confirmation tidak menyediakan saluran informasi aman untuk pengguna. Aplikasi Anda tidak bisa menganggap bahwa ada jaminan kerahasiaan selain yang ditawarkan oleh platform Android. Secara khusus, jangan gunakan alur kerja ini untuk menampilkan informasi sensitif yang biasanya tidak akan Anda tampilkan pada perangkat pengguna.

Untuk panduan tentang menambahkan dukungan bagi Android Protected Confirmation, lihat panduan Android Protected Confirmation .

Dialog autentikasi biometrik terpadu

Di Android 9, sistem menyediakan dialog autentikasi biometrik atas nama aplikasi Anda. Fungsionalitas ini menghasilkan penampilan, cara kerja, dan penempatan yang terstandardisasi untuk dialog, yang lebih memberikan keyakinan kepada pengguna bahwa mereka melakukan autentikasi terhadap pemeriksa kredensial biometrik yang tepercaya.

Bila aplikasi Anda menggunakan FingerprintManager untuk menampilkan dialog autentikasi sidik jari kepada pengguna, beralihlah menggunakan BiometricPrompt sebagai gantinya. BiometricPrompt bergantung pada sistem untuk menampilkan dialog autentikasi. Ia juga mengubah perilakunya untuk menyesuaikan dengan tipe autentikasi biometrik yang telah dipilih pengguna.

Catatan: Sebelum menggunakan BiometricPrompt di aplikasi, terlebih dahulu Anda harus menggunakan metode hasSystemFeature() untuk memastikan bahwa perangkat mendukung FEATURE_FINGERPRINT, FEATURE_IRIS, atau FEATURE_FACE. Jika perangkat tidak mendukung autentikasi biometrik, Anda bisa melakukan fallback untuk memverifikasi PIN, pola, atau sandi pengguna dengan menggunakan metode createConfirmDeviceCredentialIntent() .

Modul keamanan hardware

Perangkat didukung yang menjalankan Android 9 atau yang lebih tinggi telah terinstal bisa memiliki StrongBox Keymaster, suatu implementasi Keymaster HAL yang berada dalam modul keamanan hardware. Modul ini berisi hal-hal berikut:

  • CPU-nya sendiri.
  • Penyimpanan aman.
  • Generator nomor-acak yang sesungguhnya.
  • Mekanisme tambahan untuk meredam gangguan package dan sideloading aplikasi yang tidak diizinkan.

Saat memeriksa kunci yang disimpan dalam StrongBox Keymaster, sistem akan menyokong integritas kunci dengan Trusted Execution Environment (TEE).

Untuk mempelajari lebih lanjut tentang penggunaan Strongbox Keymaster, lihat Modul Keamanan Hardware.

Impor kunci aman ke dalam Keystore

Android 9 menyediakan keamanan dekripsi kunci tambahan dengan menambahkan kemampuan untuk mengimpor kunci dienkripsi secara aman ke dalam Keystore dengan menggunakan format kunci yang dienkode dengan ASN.1‑. Keymaster kemudian mendekripsi kunci dalam Keystore, sehingga isi kunci tidak pernah muncul sebagai teks biasa dalam memori host perangkat.

Catatan: Fitur ini hanya didukung pada perangkat yang dilengkapi dengan Keymaster 4 atau yang lebih tinggi.

Pelajari lebih lanjut tentang cara Mengimpor kunci dienkripsi secara lebih aman.

Skema tanda tangan APK dengan rotasi kunci

Android 9 menambahkan dukungan untuk APK Signature Scheme v3. Skema ini memiliki opsi untuk menyertakan record bukti rotasi dalam blok penandatangannya bagi setiap sertifikat penandatanganan. Kemampuan ini memungkinkan aplikasi Anda ditandatangani dengan sertifikat penandatanganan baru dengan menautkan sertifikat penandatanganan sebelumnya milik file APK tersebut ke sertifikat penandatanganan yang kini digunakan untuk menandatanganinya.

Catatan: Perangkat yang menjalankan Android 8.1 (API level 27) atau yang lebih rendah tidak mendukung perubahan sertifikat penandatanganan. Bila minSdkVersion aplikasi Anda 27 atau yang lebih rendah, gunakan sertifikat penandatanganan lama untuk menandatangani aplikasi di samping tanda tangan baru.

Pelajari lebih lanjut tentang cara merotasi kunci menggunakan apksigner.

Opsi untuk mengizinkan dekripsi kunci hanya pada perangkat yang tidak terkunci

Android 9 memperkenalkan flag unlockedDeviceRequired. Opsi ini menentukan apakah Keystore mengharuskan layar untuk dibuka kuncinya sebelum mengizinkan dekripsi data yang disimpan atau sedang berjalan menggunakan kunci yang ditetapkan. Tipe-tipe kunci ini sangat cocok untuk mengenkripsi data sensitif untuk disimpan di disk, seperti data kesehatan atau perusahaan. Flag menyediakan jaminan yang lebih tinggi kepada pengguna bahwa data tidak dapat didekripsi saat perangkat terkunci bila ponsel mereka hilang atau dicuri.

Catatan: Ketika flag unlockedDeviceRequired diaktifkan, enkripsi dan verifikasi tanda tangan masih bisa terjadi kapan saja. Flag mencegah data hanya dekripsi saat perangkat dibuka kuncinya.

Untuk menjaga keamanan kunci dari dekripsi saat perangkat terkunci, aktifkan flag dengan meneruskan true ke metode setUnlockedDeviceRequired() . Setelah melakukan langkah ini, ketika layar pengguna terkunci, setiap upaya untuk mendekripsi atau menandatangani data menggunakan kunci ini akan gagal. Perangkat yang dikunci memerlukan PIN, sandi, sidik jari, atau beberapa faktor tepercaya lainnya sebelum bisa diakses.

Dukungan enkripsi lama

Perangkat Android 9 yang dilengkapi dengan Keymaster 4 mendukung Triple Data Encryption Algorithm, atau Triple DES. Jika aplikasi Anda berinteroperasi dengan sistem lama yang membutuhkan Triple DES, gunakan jenis cipher ini saat mengenkripsi kredensial yang sensitif.

Untuk mempelajari lebih lanjut tentang cara membuat aplikasi Anda agar lebih aman, lihat Keamanan untuk Developer Android.

Backup Android

Android 9 menambahkan fungsionalitas dan opsi developer baru yang terkait dengan backup dan restore. Detail tentang perubahan ini bisa dilihat di bagian berikut.

Backup enkripsi sisi-klien

Android 9 menambahkan dukungan untuk mengenkripsi backup Android dengan rahasia sisi-klien. Dukungan ini diaktifkan secara otomatis bila persyaratan berikut terpenuhi:

Bila langkah privasi ini diaktifkan, PIN, pola, atau sandi perangkat diperlukan untuk mengembalikan data dari backup yang dibuat perangkat pengguna. Untuk mempelajari lebih lanjut tentang teknologi di balik fitur ini, lihat dokumen resmi Google Cloud Key Vault Service.

Menetapkan persyaratan perangkat yang diperlukan untuk melakukan backup

Bila data aplikasi Anda berisi informasi atau preferensi sensitif, Android 9 memberikan Anda kemampuan untuk menetapkan persyaratan perangkat di mana data aplikasi Anda dimasukkan dalam backup pengguna, seperti ketika enkripsi sisi-klien diaktifkan atau transfer perangkat-ke-perangkat lokal sedang berlangsung.

Untuk mempelajari lebih lanjut tentang melakukan backup data di perangkat Android, lihat Ringkasan Backup Data.

Aksesibilitas

Android 9 menghadirkan penyempurnaan bagi framework aksesibilitas yang mempermudah Anda dalam memberikan pengalaman yang lebih baik kepada pengguna aplikasi.

Semantik navigasi

Atribut yang ditambahkan di Android 9 memudahkan Anda untuk menentukan bagaimana layanan aksesibilitas, terutama pembaca layar, menuju dari satu bagian layar ke bagian yang lain. Atribut ini bisa membantu pengguna yang mengalami gangguan penglihatan untuk dengan cepat membaca teks di UI aplikasi Anda dan memungkinkan mereka membuat pilihan.

Misalnya, dalam aplikasi belanja, pembaca layar bisa membantu pengguna menuju langsung dari satu kategori transaksi ke kategori berikutnya, tanpa pembaca layar harus membaca semua item dalam kategori sebelum beralih ke kategori berikutnya.

Judul panel aksesibilitas

Di Android 8.1 (API level 27) dan lebih rendah, layanan aksesibilitas tidak selalu bisa menentukan kapan panel tertentu dari layar diupdate, seperti ketika suatu aktivitas menggantikan satu fragmen dengan fragmen yang lain. Panel terdiri dari elemen UI yang dikelompokkan secara logis dan berhubungan secara visual yang biasanya terdiri dari sebuah fragmen.

Di Android 9, Anda bisa memberikan judul panel aksesibilitas, atau judul yang dapat diidentifikasi secara individual, untuk panel ini. Bila sebuah panel memiliki judul panel aksesibilitas, layanan aksesibilitas akan menerima informasi lebih terperinci ketika panel berubah. Kemampuan ini memungkinkan layanan memberikan informasi yang lebih terperinci kepada pengguna tentang apa yang berubah dalam UI.

Untuk menentukan judul panel, gunakan atribut android:accessibilityPaneTitle . Anda juga bisa mengupdate judul panel UI yang digantikan saat waktu proses menggunakan setAccessibilityPaneTitle(). Misalnya, Anda bisa memberikan judul untuk area konten suatu objek Fragment.

Navigasi berbasis heading

Bila aplikasi Anda menampilkan konten tekstual yang menyertakan heading logis, setel atribut android:accessibilityHeading ke true untuk instance View yang mewakili heading tersebut. Dengan menambahkan heading ini, Anda mengizinkan layanan aksesibilitas untuk membantu pengguna menuju langsung dari satu heading ke heading berikutnya. Semua layanan aksesibilitas bisa menggunakan kemampuan ini untuk meningkatkan pengalaman navigasi UI pengguna.

Navigasi grup dan keluaran

Pembaca layar biasanya menggunakan atribut android:focusable untuk menentukan kapan mereka harus membaca ViewGroup, atau kumpulan objek View, sebagai satu kesatuan. Dengan begitu, pengguna bisa memahami bahwa tampilan tersebut terkait secara logis satu sama lain.

Di Android 8.1 dan yang lebih rendah, Anda harus menandai setiap objek View dalam ViewGroup sebagai non-focusable dan ViewGroup sebagai focusable. Pengaturan ini menyebabkan beberapa instance View ditandai sebagai focusable sehingga membuat navigasi keyboard menjadi lebih rumit.

Mulai Android 9, Anda bisa menggunakan atribut android:screenReaderFocusable sebagai pengganti atribut android:focusable dalam situasi ketika membuat objek View focusable menyebabkan konsekuensi yang tidak diharapkan. Pembaca layar menempatkan fokus pada semua elemen yang telah menyetel baik android:screenReaderFocusable atau android:focusable ke true.

Tindakan kemudahan

Android 9 menambahkan dukungan untuk melakukan tindakan kemudahan atas nama pengguna:

Interaksi dengan tooltip
Fitur yang ditambahkan dalam framework aksesibilitas memberi Anda akses ke tooltip di UI aplikasi. Gunakan getTooltipText() untuk membaca teks tooltip, dan gunakan ACTION_SHOW_TOOLTIP serta ACTION_HIDE_TOOLTIP untuk menginstruksikan instance View agar menampilkan atau menyembunyikan tooltip.
Menambahkan tindakan global
Android 9 memperkenalkan dukungan untuk dua tindakan perangkat tambahan di class AccessibilityService . Layanan Anda bisa membantu pengguna mengunci perangkat dan mengambil screenshot menggunakan tindakan GLOBAL_ACTION_LOCK_SCREEN dan GLOBAL_ACTION_TAKE_SCREENSHOT.

Detail perubahan jendela

Android 9 mempermudah pelacakan update jendela aplikasi saat aplikasi menggambar ulang beberapa jendela secara bersamaan. Ketika sebuah event TYPE_WINDOWS_CHANGED terjadi, gunakan API getWindowChanges() untuk menentukan bagaimana jendela berubah. Pada waktu update multijendela, setiap jendela menghasilkan kumpulan event-nya sendiri. Metode getSource()) menampilkan tampilan root jendela yang terkait dengan setiap event.

Bila suatu aplikasi telah menetapkan judul panel aksesibilitas untuk objek View, layanan Anda bisa mengenali kapan UI aplikasi diupdate. Ketika sebuah event TYPE_WINDOW_STATE_CHANGED terjadi, gunakan tipe yang ditunjukkan oleh getContentChangeTypes() untuk menentukan bagaimana jendela berubah. Misalnya, framework bisa mendeteksi ketika panel memiliki judul baru, atau ketika panel menghilang.

Rotasi

Untuk mencegah rotasi yang tidak disengaja, kami menambahkan mode yang menahan orientasi saat ini bahkan jika posisi perangkat berubah. Pengguna bisa memicu rotasi secara manual ketika diperlukan dengan menekan tombol di bilah sistem.

Dampak kompatibilitas bagi aplikasi sangat minim dalam banyak kasus. Namun, bila aplikasi Anda memiliki perilaku rotasi yang disesuaikan atau menggunakan setelan orientasi layar yang tidak biasa, Anda mungkin mengalami masalah yang tidak diketahui sebelumnya, ketika preferensi rotasi pengguna selalu disetel ke potret. Kami anjurkan Anda untuk melihat perilaku rotasi di semua aktivitas utama aplikasi dan memastikan bahwa semua setelan orientasi layar memberikan pengalaman yang optimal.

Untuk detail selengkapnya, lihat perubahan perilaku yang terkait.

Mode rotasi baru memungkinkan pengguna memicu rotasi secara manual saat diperlukan menggunakan tombol di bilah sistem.

Teks

Android 9 menghadirkan fitur terkait teks berikut ke dalam platform:

  • Precomputed Text: Class PrecomputedText meningkatkan kinerja rendering teks dengan mengizinkan Anda terlebih dahulu menghitung dan meng-cache informasi yang diperlukan. Ini juga memungkinkan aplikasi Anda untuk melakukan layout teks di luar thread utama.

  • Magnifier: Class Magnifier adalah widget platform yang menyediakan magnifier API, yang memungkinkan pengalaman fitur magnifier yang konsisten di semua aplikasi.

  • Smart Linkify: Android 9 meningkatkan class TextClassifier, dengan memanfaatkan machine learning untuk mengidentifikasi beberapa entitas dalam teks yang dipilih dan menyarankan tindakan. Misalnya, TextClassifier bisa mengaktifkan aplikasi Anda untuk mendeteksi bahwa pengguna telah memilih nomor ponsel. Aplikasi Anda kemudian bisa menyarankan bahwa pengguna melakukan panggilan ponsel menggunakan nomor tersebut. Fitur-fitur dalam TextClassifier menggantikan fungsionalitas class Linkify.

  • Text Layout: Beberapa atribut dan metode praktis mempermudah penerapan desain UI Anda. Untuk detailnya, lihat dokumentasi referensi bagi TextView.

Konversi dini ART untuk file DEX

Pada perangkat yang menjalankan Android 9 atau yang lebih tinggi, compiler awal Waktu Proses Android (ART) semakin mengoptimalkan file Dalvik Executable format (DEX) yang dikompresi dengan mengonversi file DEX dalam package aplikasi menjadi representasi yang lebih ringkas. Perubahan ini memungkinkan aplikasi Anda untuk mulai dengan lebih cepat dan menggunakan lebih sedikit ruang disk dan RAM.

Peningkatan ini sangat menguntungkan perangkat low-end dengan kecepatan I/O disk yang lebih lambat.

Pelacakan sistem di perangkat

Android 9 mengizinkan Anda merekam aktivitas sistem dari perangkat, kemudian membagikan laporan rekaman ini dengan tim pengembangan Anda. Laporan ini mendukung berbagai format, termasuk HTML.

Dengan mengumpulkan rekaman aktivitas ini, Anda bisa mengambil data waktu yang terkait dengan proses dan thread aplikasi serta melihat tipe status perangkat global yang signifikan lainnya.

Catatan: Anda tidak perlu memperlengkapi kode untuk merekam aktivitas, tetapi hal ini bisa membantu Anda melihat bagian kode aplikasi mana yang mungkin berkontribusi terhadap thread menggantung atau kelambanan UI.

Untuk mempelajari lebih lanjut tentang fitur ini, lihat Melakukan pelacakan sistem di perangkat.