Perubahan perilaku: Aplikasi yang menargetkan Android 17 atau yang lebih tinggi

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 baru tanpa kunci

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

This feature introduces new AccessibilityEvent and TextAttribute APIs to enhance screen reader spoken feedback for CJKV language input. CJKV IME apps can now signal whether a text conversion candidate has been selected during text composition. Apps with edit fields can specify text change types when sending text changed accessibility events. For example, apps can specify that a text change occurred during text composition, or that a text change resulted from a commit. Doing this enables accessibility services such as screen readers to deliver more precise feedback based on the nature of the text modification.

App adoption

  • IME Apps: When setting composing text in edit fields, IMEs can use TextAttribute.Builder.setTextSuggestionSelected() to indicate whether a specific conversion candidate was selected.

  • Apps with Edit Fields: Apps that maintain a custom InputConnection can retrieve candidate selection data by calling TextAttribute.isTextSuggestionSelected(). These apps should then call AccessibilityEvent.setTextChangeTypes() when dispatching TYPE_VIEW_TEXT_CHANGED events. Apps targeting Android 17 (API level 37) that use the standard TextView will have this feature enabled by default. (That is, TextView will handle retrieving data from the IME and setting text change types when sending events to accessibility services).

  • Accessibility Services: Accessibility services that process TYPE_VIEW_TEXT_CHANGED events can call AccessibilityEvent.getTextChangeTypes() to identify the nature of the modification and adjust their feedback strategies accordingly.

Privasi

Android 17 menyertakan perubahan berikut untuk meningkatkan privasi pengguna.

ECH (Encrypted Client Hello) diaktifkan secara oportunistik

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 opportunistically 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 connection automatically falls back to a standard TLS handshake without SNI encryption.

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, "opportunistic", "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.

Keamanan

Android 17 melakukan peningkatan berikut pada keamanan perangkat dan aplikasi.

Keamanan Aktivitas

Di Android 17, platform melanjutkan peralihannya ke arsitektur "aman secara default", dengan memperkenalkan serangkaian peningkatan yang dirancang untuk memitigasi eksploitasi dengan tingkat keparahan tinggi seperti phishing, pembajakan interaksi, dan serangan wakil yang bingung. Update ini mengharuskan developer untuk secara eksplisit memilih ikut serta dalam standar keamanan baru untuk mempertahankan kompatibilitas aplikasi dan perlindungan pengguna.

Dampak utama bagi developer meliputi:

  • Penguatan BAL & peningkatan keikutsertaan: Kami menyempurnakan batasan Peluncuran Aktivitas Latar Belakang (BAL) dengan memperluas perlindungan ke IntentSender. Developer harus bermigrasi dari konstanta MODE_BACKGROUND_ACTIVITY_START_ALLOWED lama. Sebagai gantinya, Anda harus menerapkan kontrol terperinci seperti MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE, yang membatasi peluncuran aktivitas pada skenario saat aplikasi pemanggil terlihat, sehingga secara signifikan mengurangi permukaan serangan.
  • Alat adopsi: Developer harus menggunakan mode ketat dan pemeriksaan lint yang diperbarui untuk mengidentifikasi pola lama dan memastikan kesiapan untuk persyaratan SDK target pada masa mendatang.

Mengaktifkan CT secara default

If an app targets Android 17 (API level 37) or higher, certificate transparency (CT) is enabled by default. (On Android 16, CT is available but apps had to opt in.)

DCL Native yang Lebih Aman—C

Jika aplikasi Anda menargetkan Android 17 (API level 37) atau yang lebih tinggi, perlindungan Pemuatan Kode Dinamis (DCL) yang Lebih Aman yang diperkenalkan di Android 14 untuk file DEX dan JAR kini diperluas ke library native.

Semua file native yang dimuat menggunakan System.load() harus ditandai sebagai hanya baca. Jika tidak, sistem akan menampilkan UnsatisfiedLinkError.

Sebaiknya aplikasi menghindari pemuatan kode secara dinamis jika memungkinkan, karena hal itu akan sangat meningkatkan risiko aplikasi disusupi oleh injeksi kode atau modifikasi kode.

Membatasi kolom PII dalam tampilan data CP2

For apps targeting Android 17 (API level Android 17 (API level 37)) and higher, Contacts Provider 2 (CP2) restricts certain columns containing Personally Identifiable Information (PII) from the data view. When this change is enabled, these columns are removed from the data view to enhance user privacy. The restricted columns include:

Apps that are using these columns from ContactsContract.Data can extract them from ContactsContract.RawContacts instead, by joining with RAW_CONTACT_ID.

Menerapkan pemeriksaan SQL yang ketat di CP2

For apps targeting Android 17 (API level Android 17 (API level 37)) and higher, Contacts Provider 2 (CP2) enforces strict SQL query validation when the ContactsContract.Data table is accessed without READ_CONTACTS permission.

With this change, if an app doesn't have READ_CONTACTS permission, StrictColumns and StrictGrammar options are set when querying the ContactsContract.Data table. If a query uses a pattern that isn't compatible with these, it will be rejected and cause an exception to be thrown.

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 batasan orientasi, rasio aspek, dan perubahan ukuran di layar besar (sw >= 600dp) untuk aplikasi yang menargetkan level API 36 atau yang lebih tinggi. Developer memiliki opsi untuk menonaktifkan perubahan ini dengan SDK 36, tetapi penonaktifan ini tidak akan lagi tersedia untuk aplikasi yang menargetkan Android 17 (API level 37) atau yang lebih tinggi.

Untuk mengetahui informasi selengkapnya, lihat Pembatasan pada orientasi dan pengubahan ukuran diabaikan.