Seperti rilis sebelumnya, Android 17 menyertakan perubahan perilaku yang mungkin memengaruhi aplikasi Anda. Perubahan perilaku berikut ini berlaku khusus bagi aplikasi yang menargetkan Android 17 atau yang lebih tinggi. Jika aplikasi Anda menargetkan Android 17 atau yang lebih tinggi, Anda harus memodifikasi aplikasi untuk mendukung perilaku ini, jika berlaku.
Pastikan Anda juga meninjau daftar perubahan perilaku yang memengaruhi semua aplikasi yang berjalan di Android 17, terlepas dari targetSdkVersion aplikasi Anda.
Fungsi inti
Android 17 mencakup perubahan berikut yang mengubah atau memperluas berbagai kemampuan inti sistem Android.
Implementasi MessageQueue bebas kunci baru
Mulai Android 17, aplikasi yang menargetkan Android 17 (level API 37)
atau yang lebih tinggi menerima penerapan bebas kunci baru dari
android.os.MessageQueue. Implementasi baru ini meningkatkan performa dan mengurangi frame yang terlewat, tetapi dapat merusak klien yang mencerminkan kolom dan metode pribadi MessageQueue.
Untuk mengetahui informasi selengkapnya, termasuk strategi mitigasi, lihat Panduan perubahan perilaku MessageQueue.
Kolom akhir statis kini tidak dapat diubah
Aplikasi yang berjalan di Android 17 atau yang lebih tinggi yang menargetkan
Android 17 (level API 37) atau yang lebih tinggi tidak dapat mengubah kolom static final. Jika
aplikasi mencoba mengubah kolom static final menggunakan refleksi, aplikasi tersebut akan
menyebabkan IllegalAccessException. Mencoba mengubah salah satu kolom ini
melalui API JNI (seperti SetStaticLongField()) akan menyebabkan aplikasi error.
Aksesibilitas
Android 17 melakukan perubahan berikut untuk meningkatkan aksesibilitas.
Dukungan aksesibilitas untuk pengetikan keyboard fisik IME yang kompleks
Fitur ini memperkenalkan API AccessibilityEvent dan TextAttribute
baru untuk meningkatkan kualitas respons lisan pembaca layar untuk input bahasa CJKV. Aplikasi IME CJKV kini dapat memberi sinyal apakah kandidat konversi teks telah dipilih selama komposisi teks. Aplikasi dengan kolom edit dapat menentukan jenis perubahan teks saat
mengirim peristiwa aksesibilitas teks yang berubah.
Misalnya, aplikasi dapat menentukan bahwa perubahan teks terjadi selama komposisi teks, atau bahwa perubahan teks dihasilkan dari commit.
Dengan melakukannya, layanan aksesibilitas seperti pembaca layar dapat memberikan masukan yang lebih akurat berdasarkan sifat modifikasi teks.
Adopsi aplikasi
Aplikasi IME: Saat menyetel penulisan teks di kolom edit, IME dapat menggunakan
TextAttribute.Builder.setTextSuggestionSelected()untuk menunjukkan apakah kandidat konversi tertentu dipilih.Aplikasi dengan Edit Kolom: Aplikasi yang mempertahankan
InputConnectionkustom dapat mengambil data pemilihan kandidat dengan memanggilTextAttribute.isTextSuggestionSelected(). Aplikasi ini kemudian harus memanggilAccessibilityEvent.setTextChangeTypes()saat mengirim peristiwaTYPE_VIEW_TEXT_CHANGED. Aplikasi yang menargetkan Android 17 (level API 37) yang menggunakanTextViewstandar akan mengaktifkan fitur ini secara default. (Artinya,TextViewakan menangani pengambilan data dari IME dan menyetel jenis perubahan teks saat mengirim peristiwa ke layanan aksesibilitas).Layanan Aksesibilitas: Layanan aksesibilitas yang memproses peristiwa
TYPE_VIEW_TEXT_CHANGEDdapat memanggilAccessibilityEvent.getTextChangeTypes()untuk mengidentifikasi sifat modifikasi dan menyesuaikan strategi masukan mereka.
Privasi
Android 17 menyertakan perubahan berikut untuk meningkatkan privasi pengguna.
ECH (Encrypted Client Hello) diaktifkan
Android 17 introduces platform support for Encrypted Client Hello (ECH), a TLS extension that enhances user privacy by encrypting the Server Name Indication (SNI) in the TLS handshake. This encryption helps prevent network observers from easily identifying the specific domain your app is connecting to.
For apps targeting Android 17 (API level 37) or higher, ECH is used for TLS connections. ECH is active only if the networking library used by the app (for example, HttpEngine, WebView, or OkHttp) has integrated ECH support and the remote server also supports the ECH protocol. If ECH cannot be negotiated, the client sends an ECH extension with randomized contents (a mechanism called ECH GREASE). See RFC 9849 for more details on how ECH GREASE works.
To allow apps to customize this behavior, Android 17 adds a new
<domainEncryption> element to the Network Security Configuration file.
Developers can use <domainEncryption> within <base-config> or
<domain-config> tags to select an ECH mode (for example,
"enabled" or "disabled") on a global or per-domain basis.
For more information, see the Encrypted Client Hello documentation.
Izin jaringan lokal diperlukan untuk aplikasi yang menargetkan Android 17
Android 17 memperkenalkan izin runtime ACCESS_LOCAL_NETWORK untuk melindungi pengguna dari akses jaringan lokal yang tidak sah. Karena izin ini termasuk dalam grup izin NEARBY_DEVICES yang ada, pengguna yang telah memberikan izin NEARBY_DEVICES lainnya tidak akan diminta lagi. Persyaratan
baru ini mencegah aplikasi berbahaya mengeksploitasi akses jaringan lokal yang tidak dibatasi untuk pelacakan dan pelacakan sidik jari pengguna secara diam-diam. Dengan mendeklarasikan dan meminta izin ini, aplikasi Anda dapat menemukan dan terhubung ke perangkat di jaringan area lokal (LAN), seperti perangkat smart home atau penerima transmisi.
Aplikasi yang menargetkan Android 17 (level API 37) atau yang lebih tinggi kini memiliki dua jalur untuk mempertahankan komunikasi dengan perangkat LAN: Menggunakan pemilih perangkat yang dimediasi sistem dan menjaga privasi untuk melewati perintah izin, atau secara eksplisit meminta izin baru ini saat runtime untuk mempertahankan komunikasi jaringan lokal.
Untuk mengetahui informasi selengkapnya, lihat dokumentasi Izin jaringan lokal.
Menyembunyikan sandi dari perangkat fisik
Jika aplikasi menargetkan Android 17 (level API 37) atau yang lebih tinggi dan pengguna menggunakan
perangkat input fisik (misalnya, keyboard eksternal), sistem operasi Android
menerapkan setelan show_passwords_physical baru ke semua
karakter di kolom sandi. Secara default, setelan tersebut menyembunyikan semua karakter
sandi.
Sistem Android menampilkan karakter sandi yang terakhir diketik untuk membantu pengguna melihat apakah mereka salah mengetik sandi. Namun, hal ini tidak terlalu diperlukan dengan keyboard eksternal yang lebih besar. Selain itu, perangkat dengan keyboard eksternal sering kali memiliki layar yang lebih besar, sehingga meningkatkan bahaya seseorang melihat sandi yang diketik.
Jika pengguna menggunakan layar sentuh perangkat, sistem akan menerapkan setelan
show_passwords_touch baru.
Perlindungan OTP untuk pesan SMS standar
Beginning with Android 17, Android is extending its SMS OTP protection
to apply to standard SMS messages (SMS messages containing an OTP that do not
use the WebOTP or SMS Retriever formats). For most apps targeting
Android 17 (API level 37) or higher, these SMS messages do not become
available until three hours after receipt. This delay is intended to help
prevent OTP hijacking. During this three hour delay, the
SMS_RECEIVED_ACTION broadcast is withheld and
SMS provider database queries are filtered. The SMS message is
available to these apps after the delay.
Certain apps such as the default SMS assistant app, connected device companion apps, etc., are exempted from this delay. All apps that rely on reading SMS messages for OTP extraction should transition to using SMS Retriever or SMS User Consent APIs to ensure continued functionality.
Keamanan
Android 17 melakukan peningkatan berikut pada keamanan perangkat dan aplikasi.
Keamanan Aktivitas
Di Android 17, platform ini melanjutkan pergeserannya ke arah arsitektur "aman secara default", dengan memperkenalkan serangkaian peningkatan yang dirancang untuk mengurangi eksploitasi tingkat tinggi seperti phishing, pembajakan interaksi, dan serangan confused deputy. Update ini mengharuskan developer memilih secara eksplisit untuk menggunakan standar keamanan baru guna mempertahankan kompatibilitas aplikasi dan perlindungan pengguna.
Dampak utama bagi developer meliputi:
- Penguatan BAL & peningkatan pilihan ikut serta: Kami menyempurnakan batasan Peluncuran Aktivitas
Latar Belakang (BAL) dengan memperluas perlindungan ke
IntentSender. Developer harus bermigrasi dari konstanta lamaMODE_BACKGROUND_ACTIVITY_START_ALLOWED. Sebagai gantinya, Anda harus mengadopsi kontrol terperinci sepertiMODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE, yang membatasi aktivitas dimulai ke skenario saat aplikasi panggilan terlihat, sehingga mengurangi permukaan serangan secara signifikan. - Alat adopsi: Developer harus menggunakan mode ketat dan pemeriksaan lint yang diperbarui untuk mengidentifikasi pola lama dan memastikan kesiapan untuk persyaratan SDK target di masa mendatang.
Mengaktifkan CT secara default
Jika aplikasi menargetkan Android 17 (API level 37) atau yang lebih tinggi, transparansi sertifikat (CT) akan diaktifkan secara default. (Di Android 16, CT tersedia, tetapi aplikasi harus ikut serta.)
DCL Native yang Lebih Aman—C
If your app targets Android 17 (API level 37) or higher, the Safer Dynamic Code Loading (DCL) protection introduced in Android 14 for DEX and JAR files now extends to native libraries.
All native files loaded using System.load() must be marked as read-only.
Otherwise, the system throws UnsatisfiedLinkError.
We recommend that apps avoid dynamically loading code whenever possible, as doing so greatly increases the risk that an app can be compromised by code injection or code tampering.
Membatasi kolom PII dalam tampilan data CP2
Untuk aplikasi yang menargetkan Android 17 (API level Android 17 (API level 37)) dan yang lebih tinggi, Contacts Provider 2 (CP2) membatasi kolom tertentu yang berisi Informasi Identitas Pribadi (PII) dari tampilan data. Jika perubahan ini diaktifkan, kolom tersebut akan dihapus dari tampilan data untuk meningkatkan privasi pengguna. Kolom yang dibatasi meliputi:
Aplikasi yang menggunakan kolom ini dari ContactsContract.Data
dapat mengekstraknya dari ContactsContract.RawContacts
sebagai gantinya, dengan menggabungkan RAW_CONTACT_ID.
Menerapkan pemeriksaan SQL yang ketat di CP2
Untuk aplikasi yang menargetkan Android 17 (level API Android 17 (level API 37)) dan
yang lebih tinggi, Penyedia Kontak 2 (CP2) menerapkan validasi kueri SQL yang ketat saat
tabel ContactsContract.Data diakses tanpa
READ_CONTACTS izin.
Dengan perubahan ini, jika aplikasi tidak memiliki READ_CONTACTS
izin, StrictColumns dan
StrictGrammar opsi akan ditetapkan saat membuat kueri
tabel ContactsContract.Data. Jika kueri menggunakan pola yang tidak kompatibel dengan pola ini, kueri akan ditolak dan menyebabkan pengecualian ditampilkan.
Media
Android 17 menyertakan perubahan berikut pada perilaku media.
Penguatan audio latar belakang
Beginning with Android 17, the audio framework enforces restrictions on background audio interactions including audio playback, audio focus requests, and volume change APIs to ensure that these changes are started intentionally by the user.
Some audio restrictions apply to all apps. However, the restrictions are more stringent if an app targets Android 17 (API level 37). If one of these apps interacts with audio while it is in the background, it must have a foreground service running. In addition, the app must meet one or both of these requirements:
- The foreground service must have while-in-use (WIU) capabilities.
- The app must have the exact alarm permission and be interacting with
USAGE_ALARMaudio streams.
For more information, including mitigation strategies, see Background audio hardening.
Faktor bentuk perangkat
Android 17 menyertakan perubahan berikut untuk meningkatkan pengalaman pengguna di berbagai ukuran dan faktor bentuk perangkat.
Perubahan API platform untuk mengabaikan batasan orientasi, perubahan ukuran, dan rasio aspek di layar besar (sw>=600dp)
Kami memperkenalkan perubahan Platform API di Android 16 untuk mengabaikan orientasi, rasio aspek, dan batasan perubahan ukuran pada layar besar (sw >= 600dp) untuk aplikasi yang menargetkan API level 36 atau yang lebih tinggi. Developer memiliki opsi untuk tidak ikut serta dalam perubahan ini dengan SDK 36, tetapi opsi tidak ikut serta ini tidak akan lagi tersedia untuk aplikasi yang menargetkan Android 17 (API level 37) atau yang lebih tinggi.
Untuk mengetahui informasi selengkapnya, lihat Batasan pada orientasi dan perubahan ukuran di abaikan.
Konektivitas
Android 17 memperkenalkan perubahan berikut untuk meningkatkan konsistensi dan
menyelaraskan dengan perilaku InputStream Java standar untuk soket RFCOMM Bluetooth.
Perilaku read() BluetoothSocket yang konsisten untuk RFCOMM
Untuk aplikasi yang menargetkan Android 17 (API level 37), metode
read() dari InputStream yang diperoleh dari
BluetoothSocket berbasis RFCOMM kini menampilkan -1 saat
soket ditutup atau koneksi terputus.
Perubahan ini membuat perilaku soket RFCOMM konsisten dengan soket LE CoC dan
selaras dengan dokumentasi standar InputStream.read(), yang menyatakan bahwa -1 ditampilkan saat akhir streaming
tercapai.
Aplikasi yang hanya mengandalkan penangkapan IOException untuk keluar dari loop baca mungkin terpengaruh oleh perubahan ini dan harus memperbarui loop baca BluetoothSocket untuk memeriksa nilai yang ditampilkan secara eksplisit sebesar -1. Hal ini memastikan loop berakhir dengan benar saat perangkat jarak jauh terputus atau soket ditutup. Untuk contoh penerapan yang direkomendasikan, lihat
cuplikan kode dalam panduan Mentransfer data Bluetooth.