Perubahan perilaku Android Q: aplikasi yang menargetkan Android Q

Platform Android Q mencakup perubahan perilaku yang dapat memengaruhi aplikasi Anda. Perubahan perilaku berikut berlaku secara eksklusif pada aplikasi yang menargetkan Android Q atau yang lebih tinggi. Jika aplikasi Anda menetapkan targetSdkVersion ke "android-Q" atau yang lebih tinggi, sebaiknya Anda memodifikasi aplikasi agar mendukung perilaku ini dengan benar, jika memungkinkan.

Pastikan untuk juga meninjau daftar perubahan perilaku yang memengaruhi semua aplikasi yang berjalan di Android Q.

Update pada pembatasan antarmuka non-SDK

Untuk membantu memastikan stabilitas dan kompatibilitas aplikasi, platform akan mulai membatasi antarmuka non-SDK yang dapat digunakan aplikasi Anda pada Android 9 (API level 28). Android Q mencakup daftar terbaru antarmuka non-SDK yang dibatasi berdasarkan kolaborasi dengan developer Android dan pengujian internal terbaru. Tujuan kami adalah memastikan bahwa alternatif publik tersedia sebelum kami membatasi antarmuka non-SDK.

Jika Anda tidak menargetkan Android Q, beberapa perubahan ini mungkin tidak langsung memengaruhi Anda. Namun, selagi Anda menggunakan antarmuka non-SDK yang merupakan bagian dari greylist (bergantung pada API level target aplikasi Anda), penggunaan metode atau kolom non-SDK selalu memiliki risiko tinggi yang dapat merusak aplikasi Anda.

Jika tidak yakin apakah aplikasi Anda menggunakan antarmuka non-SDK atau tidak, Anda dapat menjalankan pengujian aplikasi untuk mencari tahu. Jika aplikasi Anda mengandalkan antarmuka non-SDK, sebaiknya Anda mulai merencanakan migrasi ke SDK alternatif. Namun demikian, kami memahami bahwa beberapa aplikasi memiliki kasus penggunaan yang valid untuk menggunakan antarmuka non-SDK. Jika Anda tidak dapat menemukan alternatif selain menggunakan antarmuka non-SDK untuk fitur dalam aplikasi Anda, sebaiknya mintalah API publik baru.

Untuk mempelajari lebih lanjut, lihat Update pada pembatasan antarmuka non-SDK di Android Q, dan lihat Pembatasan pada antarmuka non-SDK.

Memori bersama

Ashmem telah mengubah format peta dalvik di /proc/<pid>/maps, dan hal ini memengaruhi aplikasi yang secara langsung mengurai file peta tersebut. Developer aplikasi sebaiknya menguji format /proc/<pid>/maps baru pada perangkat dan mengurainya dengan baik jika aplikasi mengandalkan format peta dalvik.

Aplikasi yang menargetkan Android Q tidak dapat lagi menggunakan ashmem (/dev/ashmem) secara langsung dan sebagai gantinya harus mengakses memori bersama melalui ASharedMemory class NDK. Selain itu, aplikasi tidak dapat membuat IOCTL langsung ke deskriptor file ashmem yang ada dan harus menggunakan class ASharedMemory pada NDK atau Android Java API untuk membuat region memori bersama. Perubahan ini meningkatkan keamanan dan keandalan saat menggunakan memori bersama, sehingga meningkatkan performa dan keamanan Android secara keseluruhan.

Android runtime hanya menerima file OAT buatan sistem

Android runtime (ART) tidak lagi memanggil dex2oat dari proses aplikasi. Perubahan ini berarti bahwa ART hanya akan menerima file OAT yang dibuat oleh sistem.

Memberlakukan ketepatan AOT dalam ART

Sebelumnya, kompilasi ahead-of-time (AOT) yang dijalankan oleh Android Runtime (ART) dapat menyebabkan error runtime jika lingkungan classpath tidak sama pada waktu kompilasi dan waktu proses (runtime). Sekarang, Android Q mengharuskan konteks lingkungan ini selalu sama, yang mengakibatkan perubahan perilaku berikut:

  • Pemuat class kustom - yaitu pemuat class yang ditulis oleh aplikasi, tidak seperti pemuat class dari paket dalvik.system - tidak dikompilasi AOT. Hal ini karena ART tidak dapat mengetahui implementasi pencarian class yang disesuaikan saat runtime.
  • File dex sekunder - yaitu file dex yang dimuat secara manual oleh aplikasi yang tidak berada dalam APK utama - sekarang dikompilasi AOT di latar belakang, karena kompilasi penggunaan pertama mungkin terlalu mahal, sehingga mengakibatkan latensi yang tidak diinginkan sebelum eksekusi. Perhatikan bahwa untuk aplikasi, penggunaan pemisahan dan peralihan dari file dex sekunder merupakan praktik yang direkomendasikan.
  • Library bersama di Android (entri <library> dan <uses-library> dalam manifes Android) sekarang diimplementasikan dengan hierarki pemuat class baru.

Perubahan izin untuk intent layar penuh

Aplikasi yang menargetkan Android Q atau yang lebih tinggi dan menggunakan notifikasi dengan intent layar penuh harus meminta izin USE_FULL_SCREEN_INTENT dalam file manifes aplikasinya. Ini adalah izin normal, sehingga sistem otomatis memberikannya ke aplikasi yang meminta.

Jika aplikasi yang menargetkan Android Q atau yang lebih tinggi mencoba membuat notifikasi dengan intent layar penuh tanpa meminta izin USE_FULL_SCREEN_INTENT, sistem akan mengabaikan intent layar penuh dan mengeluarkan pesan log berikut: Package [pkg]: Use of fullScreenIntent requires the USE_FULL_SCREEN_INTENT permission

Dukungan untuk perangkat foldable

Android Q menyertakan perubahan untuk mendukung perangkat foldable dan perangkat berlayar besar.

Ketika aplikasi berjalan pada Android Q, metode onResume() dan onPause() akan berfungsi secara berbeda. Saat beberapa aplikasi muncul bersamaan dalam mode multi-aplikasi atau multi-tampilan, semua aktivitas teratas yang dapat difokuskan dalam tumpukan yang terlihat akan berstatus dilanjutkan, tetapi hanya satu di antaranya, yaitu aktivitas "dilanjutkan teratas", yang sebenarnya mendapatkan fokus. Saat berjalan pada versi sebelum Android Q, hanya satu aktivitas dalam sistem yang dapat dilanjutkan pada satu waktu; semua aktivitas terlihat lainnya dijeda.

Jangan keliru memahami antara aktivitas "fokus" dan "dilanjutkan teratas". Sistem menetapkan prioritas ke aktivitas berdasarkan urutan z untuk memberikan prioritas lebih tinggi pada aktivitas yang terakhir digunakan pengguna. Sebuah kegiatan dapat mendapatkan prioritas tertinggi untuk dilanjutkan kembali, tetapi tidak memiliki fokus (misalnya, jika menu notifikasi diperluas).

Di Android Q, Anda dapat berlangganan callback onTopResumedActivityChanged() agar mendapatkan notifikasi saat aktivitas Anda memperoleh atau kehilangan posisi dilanjutkan teratas. Ini setara dengan status dilanjutkan pada versi sebelum Q dan dapat berguna sebagai petunjuk apakah aplikasi Anda menggunakan resource eksklusif atau tunggal yang mungkin perlu dibagikan kepada aplikasi lain.

Perilaku atribut manifes resizeableActivity juga berubah. Jika aplikasi menetapkan resizeableActivity=false di Android Q, aplikasi tersebut mungkin dimasukkan ke mode kompatibilitas jika ukuran layar yang tersedia berubah, atau jika aplikasi berpindah dari satu layar ke layar yang lain.

Aplikasi dapat menggunakan atribut android:minAspectRatio baru untuk menunjukkan apakah aplikasi Anda mendukung rasio layar baru atau tidak.

Dimulai dengan versi 3.5, fitur emulator Android Studio mencakup perangkat virtual 7,3" dan 8" untuk menguji kode Anda dengan image sistem Android Q.

Untuk informasi lebih lanjut, lihat Membuat aplikasi untuk Perangkat Foldable.

Perubahan java.io.FileChannel.map()

FileChannel.map() tidak lagi didukung untuk file non-standar, seperti /dev/zero, yang ukurannya tidak dapat diubah menggunakan truncate(). Versi Android sebelumnya menggunakan errno yang ditampilkan oleh truncate(), tetapi Android Q akan menampilkan IOException. Jika memerlukan perilaku lama, Anda harus menggunakan kode native.