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.
Pengalaman pengguna dan UI sistem
Android 17 mencakup perubahan berikut yang dimaksudkan untuk menciptakan pengalaman pengguna yang lebih konsisten dan intuitif.
Widget batas memori
Mulai dari Android 17, untuk aplikasi yang menargetkan
Android 17 (level API 37) atau yang lebih tinggi, sistem menerapkan batas memori
yang ketat (1,5 * lebar layar * tinggi layar * 4) terhadap penggunaan memori gabungan
Bitmap dan Ikon yang ada dalam paket RemoteViews. Jika batas ini terlampaui, IllegalArgumentException fatal akan muncul dan proses aplikasi akan mengalami error.
Untuk mengetahui informasi selengkapnya, lihat UpdateAppWidget.
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
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
InputConnectioncan retrieve candidate selection data by callingTextAttribute.isTextSuggestionSelected(). These apps should then callAccessibilityEvent.setTextChangeTypes()when dispatchingTYPE_VIEW_TEXT_CHANGEDevents. Apps targeting Android 17 (API level 37) that use the standardTextViewwill have this feature enabled by default. (That is,TextViewwill 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_CHANGEDevents can callAccessibilityEvent.getTextChangeTypes()to identify the nature of the modification and adjust their feedback strategies accordingly.
Privasi
Android 17 mencakup perubahan berikut untuk meningkatkan privasi pengguna.
ECH (Encrypted Client Hello) diaktifkan
Android 17 memperkenalkan dukungan platform untuk Encrypted Client Hello (ECH), ekstensi TLS yang meningkatkan privasi pengguna dengan mengenkripsi Server Name Indication (SNI) dalam handshake TLS. Enkripsi ini membantu mencegah pengamat jaringan mengidentifikasi dengan mudah domain tertentu yang terhubung dengan aplikasi Anda.
Untuk aplikasi yang menargetkan Android 17 (level API 37) atau yang lebih tinggi, ECH digunakan untuk koneksi TLS. ECH hanya aktif jika library jaringan yang digunakan oleh aplikasi (misalnya, HttpEngine, WebView, atau OkHttp) telah mengintegrasikan dukungan ECH dan server jarak jauh juga mendukung protokol ECH. Jika ECH tidak dapat dinegosiasikan, klien akan mengirim ekstensi ECH dengan konten acak (mekanisme yang disebut ECH GREASE). Lihat RFC 9849 untuk mengetahui detail selengkapnya tentang cara kerja ECH GREASE.
Untuk mengizinkan aplikasi menyesuaikan perilaku ini, Android 17 menambahkan elemen
<domainEncryption> baru ke file Konfigurasi Keamanan Jaringan.
Developer dapat menggunakan <domainEncryption> dalam tag <base-config> atau <domain-config> untuk memilih mode ECH (misalnya, "enabled" atau "disabled") berdasarkan global atau per domain.
Untuk mengetahui informasi selengkapnya, lihat dokumentasi Encrypted Client Hello.
Izin jaringan lokal diperlukan untuk aplikasi yang menargetkan Android 17
Android 17 introduces the ACCESS_LOCAL_NETWORK runtime permission
to protect users from unauthorized local network access. Because this falls
under the existing NEARBY_DEVICES permission group, users who have already
granted other NEARBY_DEVICES permissions aren't prompted again. This new
requirement prevents malicious apps from exploiting unrestricted local network
access for covert user tracking and fingerprinting. By declaring and requesting
this permission, your app can discover and connect to devices on the local area
network (LAN), such as smart home devices or casting receivers.
Apps targeting Android 17 (API level 37) or higher now have two paths to maintain communication with LAN devices: Adopt system-mediated, privacy-preserving device pickers to skip the permission prompt, or explicitly request this new permission at runtime to maintain local network communication.
For more information, see the Local network permission documentation.
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 akan 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
Mulai Android 17, Android memperluas perlindungan OTP SMS-nya untuk diterapkan pada pesan SMS standar (pesan SMS yang berisi OTP yang tidak menggunakan format WebOTP atau SMS Retriever). Untuk sebagian besar aplikasi yang menargetkan
Android 17 (level API 37) atau yang lebih tinggi, pesan SMS ini tidak tersedia
hingga tiga jam setelah diterima. Penundaan ini dimaksudkan untuk membantu mencegah pembajakan OTP. Selama penundaan tiga jam ini, siaran
SMS_RECEIVED_ACTION ditahan dan kueri database
penyedia SMS difilter. Pesan SMS tersedia untuk aplikasi ini setelah penundaan.
Aplikasi tertentu seperti aplikasi asisten SMS default, aplikasi pendamping perangkat terhubung, dll., dikecualikan dari penundaan ini. Semua aplikasi yang mengandalkan pembacaan pesan SMS untuk ekstraksi OTP harus beralih menggunakan API SMS Retriever atau SMS User Consent untuk memastikan fungsi yang berkelanjutan.
Keamanan
Android 17 melakukan peningkatan berikut pada keamanan perangkat dan aplikasi.
Keamanan Aktivitas
In Android 17, the platform continues its shift toward a "secure-by-default" architecture, introducing a suite of enhancements designed to mitigate high-severity exploits such as phishing, interaction hijacking, and confused deputy attacks. This update requires developers to explicitly opt in to new security standards to maintain app compatibility and user protection.
Key impacts for developers include:
- BAL hardening & improved opt-in: We are refining Background Activity
Launch (BAL) restrictions by extending protections to
IntentSender. Developers must migrate away from the legacyMODE_BACKGROUND_ACTIVITY_START_ALLOWEDconstant. Instead, you should adopt granular controls likeMODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE, which restricts activity starts to scenarios where the calling app is visible, significantly reducing the attack surface. - Adoption tools: Developers should utilize strict mode and updated lint checks to identify legacy patterns and ensure readiness for future target SDK requirements.
Mengaktifkan CT secara default
Jika aplikasi menargetkan Android 17 (level API 37) atau yang lebih tinggi, transparansi sertifikat (CT) diaktifkan secara default. (Di Android 16, CT tersedia, tetapi aplikasi harus mengaktifkannya.)
DCL Native yang Lebih Aman—C
Jika aplikasi Anda menargetkan Android 17 (level API 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 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 izin READ_CONTACTS.
Dengan perubahan ini, jika aplikasi tidak memiliki izin READ_CONTACTS, opsi StrictColumns dan StrictGrammar 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.
Kecerdasan
Android 17 mencakup perubahan berikut pada kecerdasan sistem.
Penghentian penggunaan setContentCaptureEnabled
Perekaman Konten diaktifkan secara default di perangkat tertentu untuk memungkinkan fitur AI di perangkat menganalisis konten layar untuk pengalaman yang cerdas.
Mulai Android 17, metode
ContentCaptureManager.setContentCaptureEnabled(boolean)
API tidak digunakan lagi. Untuk aplikasi yang menargetkan Android 17 (level API 37) atau yang lebih tinggi, panggilan setContentCaptureEnabled(false) tidak lagi menonaktifkan Perekaman Konten.
Jika aplikasi Anda perlu terus menonaktifkan Perekaman Konten atau membatasi konten layar agar tidak direkam oleh sistem, Anda harus bertransisi ke penggunaan parameter tata letak jendela FLAG_SECURE.
Untuk menonaktifkan Perekaman Konten, tetapkan tanda FLAG_SECURE di jendela Anda seperti yang ditunjukkan dalam contoh berikut:
Kotlin
window.setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
)
Java
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
);
Untuk mengetahui detail selengkapnya, lihat dokumentasi referensi WindowManager.LayoutParams.FLAG_SECURE.
Media
Android 17 menyertakan perubahan berikut pada perilaku media.
Penguatan audio latar belakang
Mulai Android 17, framework audio menerapkan batasan pada interaksi audio di latar belakang, termasuk pemutaran audio, permintaan fokus audio, dan API perubahan volume untuk memastikan bahwa perubahan ini dimulai secara sengaja oleh pengguna.
Beberapa batasan audio berlaku untuk semua aplikasi. Namun, pembatasan lebih ketat jika aplikasi menargetkan Android 17 (level API 37). Jika salah satu aplikasi ini berinteraksi dengan audio saat berada di latar belakang, aplikasi tersebut harus menjalankan layanan latar depan. Selain itu, aplikasi harus memenuhi satu atau kedua persyaratan berikut:
- Layanan latar depan harus memiliki kemampuan saat-sedang-digunakan (WIU).
- Aplikasi harus memiliki izin alarm presisi dan berinteraksi dengan aliran audio
USAGE_ALARM.
Untuk mengetahui informasi selengkapnya, termasuk strategi mitigasi, lihat Penguatan audio latar belakang.
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 pada 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.
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
For apps targeting Android 17 (API level 37), the
read() method of the InputStream obtained from an
RFCOMM-based BluetoothSocket now returns -1 when the
socket is closed or the connection is dropped.
This change makes RFCOMM socket behavior consistent with LE CoC sockets and
aligns with the standard InputStream.read()
documentation, which states that -1 is returned when the end of the stream is
reached.
Apps that rely solely on catching an IOException to break out of a read loop may
be impacted by this change and should update the BluetoothSocket read loops to
explicitly check for a return value of -1. This ensures the loop terminates
correctly when the remote device disconnects or the socket is closed. For an
example of the recommended implementation, see the
code snippet in the Transfer Bluetooth data
guide.