Android 9 (API level 28) memperkenalkan banyak perubahan pada sistem Android.
Perubahan perilaku berikut berlaku khusus untuk aplikasi yang menargetkan
Level API 28 atau yang lebih tinggi. Aplikasi yang menetapkan targetSdkVersion
ke level API 28 atau
lebih tinggi harus memodifikasi
aplikasi mereka untuk mendukung perilaku ini dengan benar, jika memungkinkan pada aplikasi.
Untuk perubahan yang memengaruhi semua aplikasi yang berjalan di Android 9, apa pun API yang digunakan tingkat yang mereka targetkan, lihat Perubahan perilaku: semua aplikasi.
Layanan latar depan
Aplikasi yang menargetkan Android 9 atau yang lebih tinggi dan menggunakan layanan latar depan harus meminta
FOREGROUND_SERVICE
izin akses. Ini adalah izin normal,
sehingga sistem secara otomatis memberikannya ke aplikasi yang meminta.
Jika aplikasi yang menargetkan Android 9 atau yang lebih tinggi mencoba membuat layanan latar depan tanpa
meminta FOREGROUND_SERVICE
,
sistem akan menampilkan SecurityException
.
Perubahan privasi
Jika aplikasi Anda menargetkan Android 9, Anda harus mempertahankan perubahan perilaku dengan mempertimbangkannya. Update pada informasi DNS dan seri perangkat ini meningkatkan privasi pengguna.
Penghentian penggunaan nomor seri build
Di Android 9, Build.SERIAL
adalah
selalu disetel ke "UNKNOWN"
untuk melindungi privasi.
Jika aplikasi Anda perlu mengakses nomor seri hardware perangkat, Anda harus
sebagai gantinya, minta
READ_PHONE_STATE
lalu panggil
getSerial()
.
Privasi DNS
Aplikasi yang menargetkan Android 9 harus menerima API DNS pribadi. Secara khusus, kita akan membuat aplikasi harus memastikan bahwa, jika resolver sistem melakukan DNS-over-TLS, menggunakan DNS terenkripsi ke nama {i>host<i} yang sama dengan sistem, atau dinonaktifkan karena mendukung resolver sistem.
Perubahan keamanan framework
Android 9 menyertakan beberapa perubahan perilaku yang meningkatkan keamanan aplikasi, namun perubahan ini hanya berlaku jika aplikasi Anda menargetkan level API 28 atau lebih tinggi.
TLS jaringan diaktifkan secara default
Jika aplikasi Anda menargetkan Android 9 atau yang lebih tinggi,
isCleartextTrafficPermitted()
menampilkan false
secara default. Jika aplikasi Anda perlu
mengaktifkan cleartext untuk
domain tertentu, Anda harus secara eksplisit menetapkan cleartextTrafficPermitted
ke true
untuk domain tersebut dalam Keamanan Jaringan
Konfigurasi.
Direktori data berbasis web dipisahkan menurut proses
Untuk meningkatkan stabilitas aplikasi dan integritas data di Android 9, aplikasi tidak boleh
membagikan satu data WebView
direktori di antara
banyak proses. Biasanya,
direktori data tersebut menyimpan cookie, cache HTTP, dan data persisten
penyimpanan sementara yang
terkait dengan penjelajahan web.
Pada umumnya, aplikasi Anda harus menggunakan class dari
paket android.webkit
, seperti
sebagai WebView
dan
CookieManager
, hanya dalam satu
{i>checkout<i}. Misalnya, Anda harus
memindahkan semua
Objek Activity
yang menggunakan WebView
ke dalam proses yang sama. Anda dapat menerapkan "hanya satu proses" secara lebih ketat aturan
dengan memanggil
disableWebView()
inci
proses lain aplikasi Anda. Panggilan ini mencegah WebView
diinisialisasi
dalam proses lain itu secara tidak sengaja, bahkan jika dipanggil dari {i>dependen<i}
library.
Jika aplikasi Anda harus menggunakan instance
WebView
di lebih dari satu proses,
Anda harus menetapkan akhiran direktori data yang unik untuk setiap proses, menggunakan
WebView.setDataDirectorySuffix()
, sebelum menggunakan instance WebView
tertentu dalam proses tersebut. Metode ini
menempatkan data web dari tiap proses dalam direktorinya sendiri dalam data aplikasi
saat ini.
Domain SELinux per aplikasi
Aplikasi yang menargetkan Android 9 atau yang lebih tinggi tidak dapat berbagi data dengan aplikasi lain menggunakan izin akses Unix yang dapat diakses di seluruh dunia. Perubahan ini meningkatkan integritas Sandbox Aplikasi Android, terutama persyaratan bahwa aplikasi data pribadi dapat diakses hanya dengan aplikasi tersebut.
Untuk berbagi file dengan aplikasi lain, gunakan konten penyedia layanan.
Perubahan konektivitas
Penghitungan data konektivitas dan multipath
Dalam aplikasi yang menargetkan Android 9 atau yang lebih tinggi, sistem menghitung
traffic jaringan pada jaringan
yang bukan default saat ini—seperti traffic seluler saat perangkat aktif
Wi-Fi—dan menyediakan metode di
NetworkStatsManager
untuk mengkueri traffic tersebut.
Secara khusus, kita akan membuat
getMultipathPreference()
sekarang mengembalikan nilai berdasarkan traffic jaringan yang disebutkan di atas. Diawali dengan
Android 9, metode ini akan menampilkan true
untuk data sel, tetapi saat data sel melebihi jumlah tertentu
traffic terakumulasi dalam satu hari, dan mulai menampilkan false
. Aplikasi yang berjalan di
Android 9 harus memanggil metode dan mengikuti petunjuk ini.
ConnectivityManager.NetworkCallback
sekarang mengirimkan informasi tentang VPN ke aplikasi. Perubahan ini sangat mempermudah
aplikasi untuk memproses peristiwa konektivitas tanpa harus mencampur
asinkron dan menggunakan API terbatas. Selain itu, itu berarti bahwa
transfer informasi berfungsi seperti yang diharapkan
ketika perangkat terhubung ke beberapa
jaringan Wi-Fi atau beberapa jaringan seluler secara bersamaan.
Penghentian penggunaan klien HTTP Apache
Dengan Android 6.0, kami menghapus dukungan untuk klien HTTP Apache. Mulai Android 9, library tersebut akan dihapus dari bootclasspath dan tidak tersedia untuk aplikasi secara default.
Untuk terus menggunakan klien HTTP Apache, aplikasi yang menargetkan Android 9 dan yang lebih baru
dapat menambahkan hal berikut ke AndroidManifest.xml
mereka:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
Sebagai alternatif penggunaan library Apache runtime, aplikasi dapat memaketkan
versi library org.apache.http
sendiri dalam APK-nya. Jika Anda melakukan ini,
Anda harus mengemas ulang {i>library<i} (dengan utilitas seperti
Jar Jar) untuk menghindari masalah kompatibilitas class
dengan class yang disediakan dalam runtime.
Perubahan UI
Fokus tampilan
Tampilan dengan area 0 (baik lebar maupun tinggi adalah 0) tidak lagi focusable.
Selain itu, aktivitas tidak lagi secara implisit menetapkan fokus awal dalam mode sentuh. Sebaliknya, terserah Anda untuk secara eksplisit meminta fokus awal, jika yang diinginkan.
Penanganan nilai hex RGBA CSS
Aplikasi yang menargetkan Android 9 atau yang lebih tinggi harus mengaktifkan draf Modul Warna CSS Level 4 untuk menangani 4 dan 8 digit hex warna CSS.
Modul Warna CSS Level 4 telah didukung oleh Chrome sejak rilis 52, tetapi WebView saat ini menonaktifkan fitur tersebut karena aplikasi Android yang ada ternyata mengandung 32 bit warna hex dalam pengurutan Android (ARGB), yang akan menyebabkan error rendering.
Misalnya, warna #80ff8080
saat ini dirender di
WebView buram
merah terang (#ff8080
) untuk aplikasi yang menargetkan API level 27 atau lebih rendah. Terkemuka
(yang akan ditafsirkan oleh Android sebagai komponen alfa)
saat ini diabaikan. Jika aplikasi menargetkan API level 28 atau yang lebih tinggi, #80ff8080
adalah
ditafsirkan sebagai hijau muda transparan 50% (#80ff80
).
Perkiraan jenis MIME untuk file: URI
Versi Android sebelum Android 9 dapat menyimpulkan jenis MIME dari file
konten. Mulai Android 9 (API level 28), aplikasi harus menggunakan
ekstensi file yang benar saat memuat URI file:
dalam
WebView.
Menggunakan isi file untuk menyimpulkan jenis MIME bisa menjadi sumber {i>bug<i} keamanan, dan umumnya hal ini tidak diizinkan oleh browser modern.
Jika file memiliki ekstensi file yang dikenali seperti .html
,
.txt
, .js
, atau .css
jenis MIME akan ditentukan oleh ekstensi.
Jika file tidak memiliki ekstensi atau file yang tidak dikenal, jenis MIME akan menjadi biasa
teks.
Misalnya, URI seperti file:///sdcard/test.html
akan dirender sebagai
HTML, tetapi URI seperti file:///sdcard/test
akan dirender sebagai teks biasa,
meskipun file tersebut berisi data HTML.
Elemen scroll dokumen
Android 9 menangani kasus dengan benar jika root dokumen adalah elemen scroll. Pada versi sebelumnya, posisi scroll disetel pada elemen bodi, dan elemen root memiliki nilai scroll nol. Android 9 memungkinkan perilaku yang sesuai standar dengan elemen scroll adalah root .
Selain itu, langsung mengakses document.body.scrollTop
, document.body.scrollLeft
,
document.documentElement.scrollTop
atau document.documentElement.scrollLeft
akan berperilaku berbeda bergantung pada SDK target. Untuk mengakses scroll area pandang
gunakan document.scrollingElement
, jika tersedia.
Notifikasi dari aplikasi yang ditangguhkan
Sebelum Android 9, notifikasi dari aplikasi yang ditangguhkan dibatalkan. Mulai Android 9, notifikasi dari aplikasi yang ditangguhkan akan disembunyikan hingga aplikasi dilanjutkan.