Android 9 (level API 28) memperkenalkan fitur dan kemampuan baru yang hebat bagi pengguna dan developer. Dokumen ini merangkum apa saja yang baru untuk developer.
Untuk mempelajari API baru, baca laporan perbedaan API atau buka Referensi API Android. Pastikan juga untuk melihat Perubahan Perilaku Android 9 untuk mempelajari area mana saja 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.](https://developer.android.com/static/images/about/versions/pie/rtt-nav.png?authuser=6&hl=id)
Android 9 menambahkan dukungan platform untuk protokol Wi-Fi IEEE 802.11-2016—juga dikenal sebagai Wi-Fi Round-Trip-Time (RTT)—sehingga Anda dapat memanfaatkan posisi dalam ruangan di aplikasi.
Pada perangkat yang menjalankan Android 9 dengan dukungan hardware, aplikasi Anda dapat menggunakan RTT API untuk mengukur jarak ke titik akses (AP) Wi-Fi berkemampuan RTT terdekat. Perangkat harus
mengaktifkan layanan lokasi dan pemindaian Wi-Fi (di bagian
Setelan > Lokasi), serta aplikasi Anda harus memiliki
izin
ACCESS_FINE_LOCATION
. Perangkat tidak perlu terhubung ke titik akses (AP) untuk menggunakan RTT.
Untuk menjaga privasi, hanya ponsel yang dapat menentukan jarak ke
titik akses; titik akses tidak memiliki informasi ini.
Jika perangkat Anda mengukur jarak ke 3 titik akses atau lebih, Anda dapat menggunakan algoritma multinanti untuk memperkirakan posisi perangkat yang paling sesuai dengan pengukuran tersebut. Hasilnya biasanya akurat 1 hingga 2 meter.
Dengan akurasi ini, Anda dapat membuat pengalaman baru, seperti navigasi dalam gedung dan layanan berbasis lokasi yang mendetail, seperti kontrol suara yang jelas (misalnya, "Turn on this light") dan informasi berbasis lokasi (seperti "Apakah ada penawaran spesial untuk produk ini?").
Lihat WiFi RTT API yang digunakan di aplikasi demo Android WifiRttScan.
Untuk informasi lebih lanjut, lihat Lokasi Wi-Fi: ranging dengan RTT.
Dukungan potongan layar
![Layar opsi developer yang menunjukkan ukuran potongan yang berbeda](https://developer.android.com/static/images/about/versions/pie/emulator-devoptions-cutout_2x.png?authuser=6&hl=id)
Menguji potongan tampilan dengan menggunakan emulator
Android 9 menawarkan dukungan untuk layar tepi-ke-tepi terbaru
yang berisi potongan layar untuk kamera dan speaker. Class
DisplayCutout
memungkinkan Anda mengetahui lokasi dan bentuk area non-fungsional tempat
konten tidak boleh ditampilkan. Untuk menentukan keberadaan dan penempatan
area potongan ini, gunakan
metode
getDisplayCutout()
.
Atribut tata letak jendela baru,
layoutInDisplayCutoutMode
,
memungkinkan aplikasi Anda menata kontennya di sekitar potongan perangkat. Anda dapat menetapkan
atribut ini ke salah satu nilai berikut:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
Anda dapat menyimulasikan potongan layar di perangkat atau emulator apa pun yang menjalankan Android 9 dengan cara berikut:
- Aktifkan opsi developer.
- Di layar Developer options, scroll ke bawah ke bagian Drawing, lalu pilih Simulate a display with a berguna.
- Pilih ukuran potongan.
Notifikasi
Android 9 memperkenalkan beberapa peningkatan pada notifikasi, yang semuanya tersedia bagi developer yang menargetkan API level 28 dan yang lebih baru.
![Notifikasi pesan](https://developer.android.com/static/images/about/versions/pie/p-messaging.jpg?authuser=6&hl=id)
MessagingStyle dengan foto terlampir.
![Notifikasi pesan](https://developer.android.com/static/images/about/versions/pie/p-replies.jpg?authuser=6&hl=id)
MessagingStyle dengan balasan dan percakapan.
Untuk kode contoh yang menggunakan notifikasi, termasuk fitur Android 9, lihat Contoh Orang.
Pengalaman pesan yang lebih baik
Mulai Android 7.0 (API level 24), Anda dapat menambahkan tindakan untuk membalas pesan atau memasukkan teks lain langsung dari notifikasi. Android 9 meningkatkan fitur ini dengan peningkatan berikut:
Dukungan yang disederhanakan untuk peserta percakapan: Class
Person
digunakan untuk mengidentifikasi orang yang terlibat dalam percakapan, termasuk avatar dan URI mereka. Banyak API lain, sepertiaddMessage()
, kini memanfaatkan classPerson
, bukanCharSequence
. ClassPerson
juga mendukung pola desain Builder.Dukungan untuk gambar: Android 9 kini menampilkan gambar dalam Notifikasi Pesan di ponsel. Anda dapat menggunakan
setData()
pada pesan untuk menampilkan gambar. Cuplikan kode berikut menunjukkan cara membuatPerson
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);
Simpan balasan sebagai draf: Aplikasi Anda dapat mengambil
EXTRA_REMOTE_INPUT_DRAFT
yang dikirim oleh sistem saat pengguna tidak sengaja menutup notifikasi pesan. Anda dapat menggunakan tambahan ini untuk mengisi otomatis kolom teks di aplikasi sehingga pengguna dapat menyelesaikan balasan.Mengidentifikasi apakah percakapan adalah percakapan grup: Anda dapat menggunakan
setGroupConversation()
untuk mengidentifikasi percakapan dengan sengaja sebagai percakapan grup atau nongrup.Menetapkan tindakan semantik untuk sebuah intent: Metode
setSemanticAction()
memungkinkan Anda memberikan makna semantik pada suatu tindakan, seperti "tandai telah dibaca", "hapus", "balas", dan seterusnya.SmartReply: Android 9 mendukung saran balasan yang sama dengan yang tersedia di aplikasi pesan Anda. Gunakan
RemoteInput.setChoices()
untuk memberikan array respons standar kepada pengguna.
Setelan channel, siaran, dan mode Jangan Ganggu
Android 8.0 memperkenalkan Saluran Notifikasi, yang memungkinkan Anda membuat saluran yang dapat disesuaikan pengguna untuk setiap jenis notifikasi yang ingin ditampilkan. Android 9 menyederhanakan setelan saluran notifikasi dengan perubahan ini:
Memblokir grup saluran: Pengguna kini dapat memblokir seluruh grup saluran dalam setelan notifikasi untuk aplikasi. Anda dapat menggunakan metode
isBlocked()
untuk mengidentifikasi kapan sebuah grup diblokir dan, akibatnya, tidak mengirim notifikasi apa pun untuk saluran dalam grup tersebut.Selain itu, aplikasi Anda dapat membuat kueri untuk setelan grup saluran saat ini menggunakan metode
getNotificationChannelGroup()
baru.Jenis intent siaran baru: Sistem Android kini mengirimkan intent siaran saat status pemblokiran saluran notifikasi dan grup saluran berubah. Aplikasi yang memiliki saluran atau grup yang diblokir dapat memproses intent ini dan bereaksi sebagaimana mestinya. Untuk mengetahui informasi selengkapnya tentang tindakan dan tambahan intent ini, lihat daftar konstanta yang diperbarui dalam referensi
NotificationManager
. Untuk informasi tentang cara menanggapi intent siaran, lihat Siaran.NotificationManager.Policy
memiliki tiga kategori prioritas Jangan Ganggu baru:PRIORITY_CATEGORY_ALARMS
memprioritaskan alarm.PRIORITY_CATEGORY_MEDIA
memprioritaskan suara dari sumber media, seperti media dan navigasi suara.PRIORITY_CATEGORY_SYSTEM
memprioritaskan suara sistem.
NotificationManager.Policy
juga memiliki tujuh konstanta Do-Not-Disturb baru yang dapat Anda gunakan untuk menekan gangguan visual:SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
mencegah notifikasi meluncurkan aktivitas layar penuh.SUPPRESSED_EFFECT_LIGHTS
memblokir lampu notifikasi.SUPPRESSED_EFFECT_PEEK
mencegah notifikasi agar tidak muncul sebentar ke tampilan ("mengintip").SUPPRESSED_EFFECT_STATUS_BAR
mencegah notifikasi muncul di status bar di perangkat yang mendukung status bar.SUPPRESSED_EFFECT_BADGE
memblokir badge di perangkat yang mendukung badge. Untuk mengetahui informasi selengkapnya, lihat artikel Mengubah badge notifikasi.SUPPRESSED_EFFECT_AMBIENT
memblokir notifikasi di perangkat yang mendukung tampilan standby.SUPPRESSED_EFFECT_NOTIFICATION_LIST
mencegah notifikasi agar tidak muncul dalam tampilan daftar di perangkat yang mendukung tampilan daftar, seperti menu notifikasi atau layar kunci.
Dukungan multikamera dan update kamera
Pada perangkat yang menjalankan Android 9, Anda dapat mengakses streaming secara bersamaan dari dua atau beberapa kamera fisik. Di perangkat dengan kamera dual-depan atau dual-back, Anda dapat membuat fitur inovatif yang tidak mungkin dilakukan hanya dengan satu kamera, seperti zoom yang lancar, bokeh, dan stereo vision. API ini juga memungkinkan Anda memanggil streaming kamera logis atau gabungan yang secara otomatis beralih antara dua kamera atau lebih.
Peningkatan lain pada kamera mencakup parameter Sesi tambahan yang membantu mengurangi penundaan selama pengambilan awal, dan fitur berbagi platform yang memungkinkan klien kamera menangani berbagai kasus penggunaan tanpa perlu berhenti dan memulai streaming kamera. Kami juga telah 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
.
Output monokrom dicapai melalui
format YUV_420_888
dengan Y sebagai hitam putih, U (Cb) sebagai 128, dan V (Cr) sebagai 128.
Android 9 juga memungkinkan dukungan untuk kamera USB/UVC eksternal pada perangkat yang didukung.
ImageDecoder untuk drawable dan bitmap
Android 9 memperkenalkan class
ImageDecoder
, yang menyediakan pendekatan modern untuk mendekode gambar. Gunakan class ini,
bukan BitmapFactory
dan
BitmapFactory.Options
API.
ImageDecoder
memungkinkan Anda membuat
Drawable
atau
Bitmap
dari buffering byte, file,
atau URI. Untuk mendekode gambar, panggil
createSource()
terlebih dahulu dengan sumber gambar yang dienkode. Kemudian, panggil
decodeDrawable()
atau decodeBitmap()
dengan meneruskan objek ImageDecoder.Source
untuk membuat Drawable
atau Bitmap
. Untuk mengubah
setelan default, teruskan OnHeaderDecodedListener
ke
decodeDrawable()
atau decodeBitmap()
. ImageDecoder
memanggil
onHeaderDecoded()
dengan lebar dan tinggi default gambar, setelah diketahui.
Jika gambar yang dienkode adalah GIF atau WebP animasi, decodeDrawable()
akan menampilkan
Drawable
yang merupakan instance
class
AnimatedImageDrawable
.
Ada berbagai metode yang bisa Anda gunakan untuk menyetel properti gambar:
- Untuk menskalakan gambar yang didekode ke ukuran yang tepat, teruskan dimensi target ke dalam
setTargetSize()
. Anda juga bisa menskalakan gambar menggunakan ukuran contoh. Teruskan ukuran sampel langsung kesetTargetSampleSize()
. - Untuk memangkas gambar dalam rentang gambar yang diskalakan, panggil
setCrop()
. - Untuk membuat bitmap yang dapat berubah, teruskan
true
kesetMutableRequired()
.
ImageDecoder
juga memungkinkan Anda menambahkan efek yang disesuaikan dan rumit pada gambar
seperti sudut membulat atau
mask lingkaran. Gunakan
setPostProcessor()
dengan instance class
PostProcessor
untuk menjalankan perintah gambar apa pun yang Anda inginkan.
Animasi
Android 9 memperkenalkan class
AnimatedImageDrawable
untuk menggambar dan menampilkan gambar animasi GIF dan WebP.
AnimatedImageDrawable
memiliki cara kerja yang mirip dengan
AnimatedVectorDrawable
di mana thread render mendorong animasi AnimatedImageDrawable
.
Thread render juga menggunakan thread pekerja untuk mendekode, sehingga decoding tidak
mengganggu operasi lain pada thread render. Implementasi ini memungkinkan
aplikasi Anda menampilkan gambar animasi tanpa mengelola update atau
mengganggu peristiwa lain di UI thread aplikasi Anda.
AnimatedImageDrawable
dapat 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 mengubah gambar lebih lanjut.
Misalnya, Anda dapat menggunakan metode
setPostProcessor()
untuk mengubah tampilan gambar, seperti menerapkan mask lingkaran atau
sudut membulat.
HDR VP9 Video, kompresi gambar HEIF, dan Media API
Android 9 menyediakan dukungan bawaan untuk High Dynamic Range (HDR) VP9 Profile 2, sehingga Anda dapat menayangkan film berkemampuan HDR kepada pengguna dari YouTube, Play Film, dan sumber lainnya pada perangkat yang mendukung HDR.
Android 9 juga menambahkan dukungan untuk mengenkode gambar menggunakan format File
Gambar Efisiensi Tinggi (HEIF
atau HEIC), yang meningkatkan kompresi dan mengurangi ruang penyimpanan serta penggunaan
data jaringan. Contoh gambar HEIF didukung dalam class
MediaMuxer
dan
MediaExtractor
. Dengan dukungan platform pada perangkat Android 9, Anda dapat dengan mudah mengirim dan
memanfaatkan image HEIF dari server backend. Setelah memastikan bahwa aplikasi
Anda kompatibel dengan format data ini untuk dibagikan dan ditampilkan, cobalah HEIF
sebagai format penyimpanan gambar di aplikasi Anda. Anda dapat melakukan konversi jpeg-ke-heic
menggunakan ImageDecoder
atau
BitmapFactory
(yang memperoleh
bitmap dari file JPEG). Anda kemudian dapat menggunakan
HeifWriter
untuk menulis gambar HEIF
dari buffer byte YUV, atau instance
Surface
atau
Bitmap
.
Metrik media juga tersedia dari class
AudioTrack
,
AudioRecord
,
dan MediaDrm
.
Android 9 memperkenalkan metode pada
class MediaDRM
untuk mendapatkan metrik, tingkat HDCP, tingkat keamanan, dan jumlah sesi, serta untuk menambahkan lebih banyak kontrol atas
tingkat keamanan dan perhentian yang aman. Lihat laporan Perbedaan
API untuk mengetahui detailnya.
Di Android 9, AAudio API menambahkan
dukungan untuk beberapa atribut AAudioStream tambahan, termasuk penggunaan, jenis
konten, dan preset input. Dengan atribut ini, Anda dapat membuat streaming yang
disesuaikan untuk aplikasi VoIP atau perekam video. Anda juga dapat menetapkan ID sesi untuk
mengaitkan streaming AAudio dengan submix yang dapat menyertakan efek. Gunakan
AudioEffect
API untuk mengontrol
efek.
Android 9 memperkenalkan
AudioEffect
API untuk
pemrosesan dinamis.
Dengan class ini, Anda dapat membuat efek audio berbasis saluran—termasuk
ekualisasi, kompresi multi-band, dan pembatas—di beberapa tahap. Jumlah
band dan stage aktif dapat dikonfigurasi, dan sebagian besar parameter dapat
dikontrol secara real time.
Sensitivitas biaya data di JobScheduler
Mulai Android 9, JobScheduler
dapat menggunakan sinyal status jaringan yang disediakan oleh operator untuk meningkatkan penanganan
tugas terkait jaringan.
Tugas dapat menyatakan estimasi ukuran data, pengambilan data sinyal, dan menentukan
persyaratan jaringan yang mendetail. JobScheduler
kemudian mengelola tugas sesuai dengan
status jaringan. Misalnya, saat sinyal jaringan menandakan bahwa jaringan sedang padat,
JobScheduler
mungkin menunda permintaan jaringan yang besar. Jika berada di
jaringan tidak berbayar, JobScheduler
dapat menjalankan tugas pengambilan data untuk
meningkatkan pengalaman pengguna, misalnya dengan mengambil data judul.
Saat menambahkan tugas, pastikan untuk menggunakan setEstimatedNetworkBytes()
,
setPrefetch()
,
dan setRequiredNetwork()
jika sesuai untuk membantu
JobScheduler
menangani pekerjaan dengan benar. Saat tugas dijalankan,
pastikan untuk menggunakan objek Network
yang ditampilkan oleh
JobParameters.getNetwork()
.
Jika tidak, Anda secara tidak langsung menggunakan jaringan default perangkat yang
mungkin tidak memenuhi persyaratan Anda, sehingga 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 di perangkat di Android. Android 9 memperluas dan meningkatkan API, menambahkan dukungan untuk sembilan operasi baru:
- Operasi matematis yang menangani setiap elemen:
- Operasi array:
Masalah umum: Saat meneruskan
tensor
ANEURALNETWORKS_TENSOR_QUANT8_ASYMM
ke
operasi
ANEURALNETWORKS_PAD
, yang tersedia di Android 9 dan yang lebih tinggi,
output dari NNAPI mungkin tidak cocok dengan output dari framework machine
learning dengan level lebih tinggi, seperti
TensorFlow Lite. Sebaiknya Anda hanya meneruskan
ANEURALNETWORKS_TENSOR_FLOAT32
sampai masalah teratasi.
Selain itu, API ini juga memperkenalkan fungsi baru,
ANeuralNetworksModel_relaxComputationFloat32toFloat16()
,
yang memungkinkan Anda menentukan apakah akan menghitung
ANEURALNETWORKS_TENSOR_FLOAT32
dengan rentang dan presisi yang serendah format floating point 16-bit IEEE 754.
Framework isi otomatis
Android 9 memperkenalkan beberapa peningkatan yang dapat diterapkan oleh layanan isi otomatis untuk lebih meningkatkan pengalaman pengguna saat mengisi formulir. Untuk mempelajari lebih lanjut cara menggunakan fitur isi otomatis di aplikasi, lihat panduan Framework Isi Otomatis.
Penyempurnaan keamanan
Android 9 memperkenalkan sejumlah fitur keamanan, yang diringkas dalam bagian berikut:
Konfirmasi Dilindungi oleh Android
Perangkat yang didukung dan menjalankan Android 9 atau yang lebih tinggi memberi Anda kemampuan untuk menggunakan Konfirmasi Dilindungi oleh Android. Saat menggunakan alur kerja ini, aplikasi Anda akan menampilkan prompt kepada pengguna untuk meminta mereka menyetujui pernyataan singkat. Pernyataan ini memungkinkan aplikasi untuk menegaskan bahwa pengguna ingin menyelesaikan transaksi yang sensitif, seperti melakukan pembayaran.
Jika pengguna menyetujui pernyataan tersebut, Android Keystore akan menerima dan menyimpan
tanda tangan kriptografi yang dilindungi oleh kode autentikasi pesan hash (HMAC) dengan kunci. Setelah Android Keystore mengonfirmasi validitas pesan, aplikasi Anda
dapat 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: Konfirmasi Dilindungi oleh Android tidak menyediakan saluran informasi yang aman bagi pengguna. Aplikasi Anda tidak boleh berasumsi 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 di perangkat pengguna.
Untuk panduan cara menambahkan dukungan untuk Konfirmasi Dilindungi oleh Android, lihat panduan Konfirmasi Dilindungi Android.
Dialog autentikasi biometrik terpadu
Di Android 9, sistem menyediakan dialog autentikasi biometrik atas nama aplikasi Anda. Fungsi ini membuat tampilan, nuansa, dan penempatan standar untuk dialog, sehingga pengguna lebih yakin bahwa mereka melakukan autentikasi terhadap pemeriksa kredensial biometrik tepercaya.
Jika aplikasi Anda menggunakan
FingerprintManager
untuk menampilkan dialog autentikasi sidik jari kepada pengguna, beralihlah untuk menggunakan
BiometricPrompt
. BiometricPrompt
mengandalkan sistem untuk menampilkan dialog
autentikasi. Metode ini juga mengubah perilakunya agar beradaptasi dengan jenis autentikasi
biometrik yang telah dipilih pengguna.
Modul keamanan hardware
Perangkat yang didukung dan menjalankan Android 9 atau yang lebih baru dapat memiliki StrongBox Keymaster, suatu implementasi Keymaster HAL yang berada di modul keamanan hardware. Modul ini berisi hal-hal berikut:
- CPU-nya sendiri.
- Penyimpanan aman.
- Generator angka-acak sebenarnya.
- Mekanisme tambahan untuk mencegah modifikasi paket dan sideload aplikasi tanpa izin.
Saat memeriksa kunci yang disimpan di StrongBox Keymaster, sistem akan mendukung integritas kunci dengan Trusted Execution Environment (TEE).
Untuk mempelajari lebih lanjut cara menggunakan Strongbox Keymaster, lihat Modul Keamanan Hardware.
Impor kunci yang aman ke Keystore
Android 9 memberikan keamanan dekripsi kunci tambahan dengan menambahkan kemampuan untuk mengimpor kunci terenkripsi dengan aman ke Keystore menggunakan format kunci yang dienkode ASN.1. Keymaster kemudian mendekripsi kunci dalam Keystore, sehingga isi kunci tidak pernah muncul sebagai teks biasa dalam memori host perangkat.
Pelajari lebih lanjut cara Mengimpor kunci terenkripsi dengan lebih aman.
Skema tanda tangan APK dengan rotasi kunci
Android 9 menambahkan dukungan untuk APK Signature Scheme v3. Skema ini memiliki opsi untuk menyertakan data bukti rotasi dalam blok penandatanganannya untuk setiap sertifikat penandatanganan. Kemampuan ini memungkinkan aplikasi Anda ditandatangani dengan sertifikat penandatanganan baru dengan menautkan sertifikat penandatanganan sebelumnya milik file APK tersebut ke sertifikat yang kini digunakan untuk menandatanganinya.
Pelajari lebih lanjut cara merotasi kunci menggunakan
apksigner
.
Opsi untuk mengizinkan dekripsi kunci hanya di perangkat yang tidak terkunci
Android 9 memperkenalkan flag unlockedDeviceRequired
. Opsi ini menentukan
apakah Keystore mengharuskan layar dibuka kuncinya sebelum mengizinkan
dekripsi data yang sedang berlangsung atau yang disimpan menggunakan kunci yang ditentukan. Jenis kunci ini sangat cocok untuk mengenkripsi data sensitif untuk disimpan di disk, seperti data kesehatan atau perusahaan. Tanda ini memberi pengguna jaminan yang lebih tinggi bahwa
data tidak dapat didekripsi saat perangkat terkunci jika ponsel mereka hilang
atau dicuri.
Untuk menjaga keamanan kunci dari dekripsi saat perangkat terkunci, aktifkan flag
dengan meneruskan true
ke metode
setUnlockedDeviceRequired()
. Setelah menyelesaikan langkah ini, saat layar pengguna terkunci, setiap
upaya untuk mendekripsi atau menandatangani data menggunakan kunci ini akan gagal. Perangkat yang terkunci memerlukan PIN, sandi, sidik jari, atau faktor tepercaya lainnya agar dapat diakses.
Dukungan enkripsi lama
Perangkat Android 9 yang disertakan dengan Keymaster 4 mendukung Triple Data Encryption Algorithm, atau Triple DES. Jika aplikasi Anda memiliki interoperabilitas dengan sistem lama yang memerlukan Triple DES, gunakan jenis cipher ini saat mengenkripsi kredensial sensitif.
Untuk mempelajari lebih lanjut cara membuat aplikasi Anda lebih aman, lihat Keamanan untuk Developer Android.
Penghentian WPS
Wi-Fi Protected Setup (WPS) tidak digunakan lagi karena alasan keamanan.
Cadangan Android
Android 9 menambahkan fungsi dan opsi developer baru yang terkait dengan pencadangan dan pemulihan. Detail tentang perubahan ini ditampilkan di bagian berikut.
Cadangan enkripsi sisi klien
Android 9 menambahkan dukungan untuk mengenkripsi cadangan Android dengan rahasia sisi klien. Dukungan ini diaktifkan secara otomatis saat kondisi berikut terpenuhi:
- Pengguna telah mengaktifkan pencadangan menggunakan Android 9 atau yang lebih tinggi.
- Pengguna telah menyetel kunci layar untuk perangkat yang memerlukan PIN, pola, atau sandi untuk membuka kunci.
Jika langkah privasi ini diaktifkan, PIN, pola, atau sandi perangkat diperlukan untuk memulihkan data dari cadangan yang dibuat oleh perangkat pengguna. Untuk mempelajari lebih lanjut teknologi di balik fitur ini, lihat laporan resmi Layanan Google Cloud Key Vault.
Menetapkan kondisi perangkat yang diperlukan untuk pencadangan
Jika data aplikasi Anda menyertakan informasi atau preferensi sensitif, Android 9 akan memberi Anda kemampuan untuk menentukan kondisi perangkat yang mana data aplikasi Anda disertakan dalam cadangan pengguna, seperti saat enkripsi sisi klien diaktifkan atau transfer lokal perangkat ke perangkat dilakukan.
Untuk mempelajari lebih lanjut cara mencadangkan data di perangkat Android, lihat Ringkasan Pencadangan Data.
Aksesibilitas
Android 9 memperkenalkan peningkatan pada framework aksesibilitas yang mempermudah Anda dalam memberikan pengalaman yang lebih baik kepada pengguna aplikasi Anda.
Semantik navigasi
Atribut yang ditambahkan di Android 9 memudahkan Anda menentukan cara layanan aksesibilitas, terutama pembaca layar, menavigasi dari satu bagian layar ke bagian lain. Atribut ini dapat membantu pengguna yang memiliki gangguan penglihatan untuk dengan cepat menelusuri teks di UI aplikasi Anda dan memungkinkan mereka membuat pilihan.
Misalnya, dalam aplikasi belanja, pembaca layar dapat membantu pengguna membuka langsung dari satu kategori transaksi ke transaksi 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 yang lebih rendah, layanan aksesibilitas tidak selalu dapat menentukan kapan panel tertentu pada layar diupdate, seperti saat suatu aktivitas menggantikan satu fragmen dengan fragmen lain. Panel terdiri dari elemen UI yang dikelompokkan secara logis dan terkait secara visual yang biasanya terdiri dari fragmen.
Di Android 9, Anda dapat memberikan judul panel aksesibilitas, atau judul yang dapat diidentifikasi secara individual, untuk panel ini. Jika panel memiliki judul panel aksesibilitas, layanan aksesibilitas akan menerima informasi yang lebih mendetail saat panel berubah. Kemampuan ini memungkinkan layanan memberikan informasi yang lebih terperinci kepada pengguna tentang apa yang berubah di UI.
Untuk menentukan judul panel, gunakan
atribut
android:accessibilityPaneTitle
. Anda juga dapat memperbarui judul panel UI yang diganti saat
runtime menggunakan setAccessibilityPaneTitle()
.
Misalnya, Anda dapat memberikan judul untuk area konten
objek Fragment
.
Navigasi berbasis judul
Jika aplikasi Anda menampilkan konten tekstual yang menyertakan judul logis, tetapkan
atribut android:accessibilityHeading
ke true
untuk instance
View
yang mewakili judul tersebut. Dengan
menambahkan judul ini, Anda memungkinkan layanan aksesibilitas untuk membantu pengguna menavigasi
langsung dari satu judul ke judul berikutnya. Semua layanan aksesibilitas dapat menggunakan
kemampuan ini untuk meningkatkan pengalaman navigasi UI pengguna.
Navigasi dan output grup
Pembaca layar biasanya menggunakan
atribut android:focusable
untuk
menentukan kapan mereka harus membaca
ViewGroup
, atau kumpulan
objek View
, sebagai satu unit. Dengan begitu,
pengguna dapat memahami bahwa penayangan tersebut terkait secara logis satu sama lain.
Di Android 8.1 dan yang lebih lama, Anda harus menandai setiap objek View
dalam
ViewGroup
sebagai tidak dapat difokuskan dan ViewGroup
sebagai dapat difokuskan. Pengaturan
ini menyebabkan beberapa instance View
ditandai sebagai dapat difokuskan sehingga
navigasi keyboard menjadi lebih rumit.
Mulai Android 9, Anda dapat menggunakan
atribut android:screenReaderFocusable
sebagai pengganti atribut android:focusable
dalam situasi ketika
membuat objek View
dapat difokuskan memiliki konsekuensi yang tidak diinginkan. Pembaca layar
menempatkan fokus pada semua elemen yang telah menetapkan android:screenReaderFocusable
atau android:focusable
ke true
.
Tindakan praktis
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 gunakanACTION_SHOW_TOOLTIP
danACTION_HIDE_TOOLTIP
untuk menginstruksikan instanceView
agar dapat menampilkan atau menyembunyikan tooltip. - Tindakan global ditambahkan
- Android 9 memperkenalkan dukungan untuk dua tindakan perangkat tambahan di
class
AccessibilityService
. Layanan Anda dapat membantu pengguna mengunci perangkat dan mengambil screenshot menggunakan tindakanGLOBAL_ACTION_LOCK_SCREEN
danGLOBAL_ACTION_TAKE_SCREENSHOT
.
Detail perubahan jendela
Android 9 mempermudah pelacakan update jendela aplikasi saat aplikasi
menggambar ulang beberapa jendela secara bersamaan. Saat peristiwa
TYPE_WINDOWS_CHANGED
terjadi, gunakan
getWindowChanges()
API untuk menentukan cara jendela berubah. Selama update multi-aplikasi, setiap
jendela menghasilkan kumpulan peristiwanya sendiri.
Metode getSource()
menampilkan tampilan root jendela yang terkait dengan setiap peristiwa.
Jika aplikasi telah menentukan judul panel aksesibilitas untuk
objek View
-nya, layanan Anda dapat mengenali
kapan UI aplikasi diupdate. Saat peristiwa
TYPE_WINDOW_STATE_CHANGED
terjadi, gunakan jenis yang ditampilkan oleh
getContentChangeTypes()
untuk menentukan cara jendela berubah. Misalnya, framework dapat
mendeteksi ketika panel memiliki judul baru, atau ketika panel menghilang.
Rotasi
Untuk menghilangkan rotasi yang tidak disengaja, kami telah menambahkan mode yang menyematkan orientasi saat ini meskipun posisi perangkat berubah. Pengguna dapat memicu rotasi secara manual saat diperlukan dengan menekan tombol di kolom sistem.
Dampak kompatibilitas bagi aplikasi sangat minim dalam banyak kasus. Namun, jika aplikasi Anda memiliki perilaku rotasi yang disesuaikan atau menggunakan setelan orientasi layar yang tidak biasa, Anda mungkin akan mengalami masalah yang tidak diketahui sebelumnya, saat preferensi rotasi pengguna selalu disetel ke potret. Sebaiknya lihat perilaku rotasi di semua aktivitas utama aplikasi Anda dan pastikan semua setelan orientasi layar tetap memberikan pengalaman yang optimal.
Untuk detail selengkapnya, lihat perubahan perilaku terkait.
![Perangkat seluler yang berputar menampilkan mode rotasi baru yang memungkinkan pengguna memicu rotasi secara manual](https://developer.android.com/static/images/about/versions/pie/rotate-changes.gif?authuser=6&hl=id)
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 platform:
Teks Prakomputasi: Class
PrecomputedText
meningkatkan performa rendering teks dengan memungkinkan Anda menghitung dan meng-cache informasi yang diperlukan terlebih dahulu. Hal ini juga memungkinkan aplikasi Anda melakukan tata letak teks di luar thread utama.Kaca Pembesar: Class
Magnifier
adalah widget platform yang menyediakan API kaca pembesar, yang memungkinkan pengalaman fitur kaca pembesar yang konsisten di semua aplikasi.Smart Linkify: Android 9 meningkatkan class
TextClassifier
, yang memanfaatkan machine learning untuk mengidentifikasi beberapa entity dalam teks yang dipilih dan menyarankan tindakan. Misalnya,TextClassifier
dapat mengaktifkan aplikasi Anda untuk mendeteksi bahwa pengguna telah memilih nomor telepon. Aplikasi Anda kemudian dapat menyarankan agar pengguna melakukan panggilan telepon menggunakan nomor tersebut. Fitur dalamTextClassifier
menggantikan fungsi classLinkify
.Tata Letak Teks: Beberapa metode dan atribut yang praktis memudahkan implementasi desain UI Anda. Untuk mengetahui detailnya, lihat dokumentasi referensi untuk
TextView
.
Konversi file DEX terlebih dahulu ART
Pada perangkat yang menjalankan Android 9 atau yang lebih baru, compiler terlebih dahulu Android runtime (ART) akan mengoptimalkan lebih lanjut file format Dalvik Executable (DEX) yang dikompresi dengan mengonversi file DEX dalam paket aplikasi menjadi representasi yang lebih ringkas. Perubahan ini memungkinkan aplikasi Anda dimulai dengan lebih cepat serta menggunakan lebih sedikit ruang disk dan RAM.
Peningkatan ini sangat menguntungkan perangkat kelas bawah dengan kecepatan I/O disk yang lebih lambat.
Pelacakan sistem di perangkat
Android 9 memungkinkan Anda merekam aktivitas sistem dari perangkat, lalu membagikan laporan rekaman ini kepada tim pengembangan Anda. Laporan ini mendukung beberapa format, termasuk HTML.
Dengan mengumpulkan rekaman aktivitas ini, Anda dapat mengambil data waktu yang terkait dengan proses dan thread aplikasi serta melihat jenis status perangkat yang signifikan secara global lainnya.
Untuk mempelajari alat ini lebih lanjut, lihat Melakukan pelacakan sistem di perangkat.