Android 10 menyertakan perubahan perilaku sistem yang diupdate yang dapat memengaruhi aplikasi Anda.
Perubahan yang tercantum di halaman ini berlaku khusus untuk aplikasi yang menargetkan
API 29 atau yang lebih tinggi. Jika aplikasi Anda menetapkan targetSdkVersion ke "29" atau
yang lebih tinggi, Anda harus memodifikasi aplikasi untuk mendukung perilaku ini dengan benar,
jika berlaku.
Selain itu, pastikan Anda meninjau daftar perubahan perilaku yang memengaruhi semua aplikasi yang berjalan di Android 10.
Catatan: Selain perubahan yang tercantum di halaman ini, Android 10 memperkenalkan sejumlah besar perubahan dan batasan berbasis privasi, termasuk hal berikut:
- Penyimpanan terbatas
- Akses ke nomor seri perangkat USB
- Kemampuan untuk mengaktifkan, menonaktifkan, dan mengonfigurasi Wi-Fi
- Izin akses lokasi untuk API konektivitas
Perubahan ini, yang memengaruhi aplikasi yang menargetkan API level 29 atau yang lebih tinggi, meningkatkan privasi pengguna. Untuk mempelajari lebih lanjut cara mendukung perubahan ini, lihat halaman Perubahan privasi.
Pembaruan pada pembatasan antarmuka non-SDK
Untuk membantu memastikan stabilitas dan kompatibilitas aplikasi, platform ini mulai membatasi antarmuka non-SDK yang dapat digunakan aplikasi Anda di Android 9 (level API 28). Android 10 menyertakan 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 akan menargetkan Android 10 (level API 29), beberapa perubahan ini mungkin tidak langsung memengaruhi Anda. Namun, meskipun saat ini Anda dapat menggunakan beberapa antarmuka non-SDK (bergantung pada API level target aplikasi Anda), penggunaan metode atau kolom non-SDK tetap sangat berisiko merusak aplikasi Anda.
Jika tidak yakin apakah aplikasi Anda menggunakan antarmuka non-SDK atau tidak, Anda dapat menguji aplikasi untuk mencari tahu. Jika aplikasi Anda bergantung pada antarmuka non-SDK, Anda harus mulai merencanakan migrasi ke alternatif SDK. Meskipun begitu, kami paham bahwa beberapa aplikasi memiliki kasus penggunaan yang valid untuk menggunakan antarmuka non-SDK. Jika tidak dapat menemukan alternatif penggunaan antarmuka non-SDK untuk fitur dalam aplikasi Anda, sebaiknya minta API publik baru.
Untuk mempelajari lebih lanjut, lihat Update pada pembatasan antarmuka non-SDK di Android 10 dan lihat Pembatasan pada antarmuka non-SDK.
Memori bersama
Ashmem telah mengubah format peta dalvik di /proc/<pid>/maps, yang memengaruhi aplikasi yang langsung mengurai file peta. Developer aplikasi harus menguji format /proc/<pid>/maps pada perangkat yang menjalankan Android 10 atau yang lebih tinggi dan mengurai sesuai dengan format peta dalvik jika aplikasi bergantung pada format tersebut.
Aplikasi yang menargetkan Android 10 tidak dapat langsung menggunakan ashmem
(/dev/ashmem) dan harus mengakses memori bersama melalui
class ASharedMemory NDK.
Selain itu, aplikasi tidak dapat membuat IOCTL langsung ke deskriptor file ashmem yang ada,
tetapi harus menggunakan class ASharedMemory NDK atau API Java Android
untuk membuat region memori bersama. Perubahan ini meningkatkan keamanan dan
ketahanan saat menggunakan memori bersama, sehingga meningkatkan performa dan keamanan
Android secara keseluruhan.
Izin eksekusi dihapus untuk direktori utama aplikasi
Eksekusi file dari direktori utama aplikasi yang dapat ditulis merupakan pelanggaran W^X. Aplikasi hanya boleh memuat kode biner yang tersemat dalam file APK aplikasi.
Aplikasi tidak tepercaya yang menargetkan Android 10 tidak dapat memanggil execve()
secara langsung pada file dalam direktori utama aplikasi.
Selain itu, aplikasi yang menargetkan Android 10 tidak dapat menjalankan modifikasi dalam memori atas kode yang dapat dieksekusi dan berasal dari file yang dibuka dengan dlopen(), serta mengharapkan perubahan tersebut ditulis ke disk, karena library tidak dapat dipetakan PROT_EXEC melalui deskriptor file yang dapat ditulis. Ini termasuk semua
file objek bersama (.so) yang berisi relokasi teks.
Android runtime hanya menerima file OAT yang dihasilkan sistem
Android runtime (ART) tidak lagi memanggil dex2oat dari proses
aplikasi. Perubahan ini berarti ART hanya akan menerima file OAT yang telah dibuat oleh sistem.
Memberlakukan ketepatan AOT dalam ART
Sebelumnya, kompilasi ahead of time (AOT) yang dilakukan oleh Android Runtime (ART) dapat menyebabkan error runtime jika lingkungan classpath tidak sama pada waktu kompilasi dan runtime. Android 10 dan yang lebih tinggi selalu mengharuskan konteks lingkungan ini sama, sehingga menghasilkan perubahan perilaku berikut:
- Class loader kustom—yaitu, class loader yang ditulis oleh aplikasi, tidak seperti class
loader 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 ada dalam APK utama—dikompilasi AOT di latar belakang. Hal ini karena kompilasi penggunaan pertama mungkin terlalu mahal, sehingga menyebabkan latensi yang tidak diinginkan sebelum eksekusi. Perhatikan bahwa untuk aplikasi, sebaiknya gunakan pemisahan dan beralih dari file dex sekunder.
- Library bersama di Android (entri <library> dan <uses-library> dalam manifes Android) diimplementasikan menggunakan hierarki class loader yang berbeda dari yang digunakan dalam versi platform sebelumnya.
Perubahan izin untuk intent layar penuh
Aplikasi yang menargetkan Android 10 atau yang lebih tinggi dan menggunakan notifikasi dengan
intent
layar penuh harus meminta
izin
USE_FULL_SCREEN_INTENT
dalam file manifes aplikasinya. Izin ini adalah izin
normal, sehingga sistem
akan otomatis memberikannya ke aplikasi yang meminta.
Jika aplikasi yang menargetkan Android 10 atau yang lebih tinggi mencoba membuat notifikasi dengan intent layar penuh tanpa meminta izin yang diperlukan, sistem akan mengabaikan intent layar penuh dan menampilkan pesan log berikut:
Package your-package-name: Use of fullScreenIntent requires the USE_FULL_SCREEN_INTENT permission
Dukungan untuk perangkat foldable
Android 10 menghadirkan perubahan untuk mendukung perangkat foldable dan perangkat berlayar besar.
Saat aplikasi berjalan di Android 10, metode
onResume() dan
onPause() akan berfungsi
secara berbeda. Jika beberapa aplikasi muncul secara bersamaan dalam mode multi-aplikasi atau
multi-layar, semua aktivitas teratas yang dapat difokuskan dalam stack yang terlihat
akan berada dalam status dilanjutkan, tetapi hanya satu di antaranya, yaitu aktivitas "dilanjutkan paling atas",
yang benar-benar memiliki fokus. Saat berjalan di versi yang lebih lama dari Android 10, hanya satu aktivitas dalam sistem yang dapat dilanjutkan pada satu waktu, semua aktivitas lain yang terlihat akan dijeda.
Jangan keliru memahami antara aktivitas "fokus" dan "prioritas tinggi untuk dilanjutkan". Sistem menetapkan prioritas ke aktivitas berdasarkan urutan z untuk memberikan prioritas yang lebih tinggi ke aktivitas yang terakhir berinteraksi dengan pengguna. Aktivitas dapat dilanjutkan di posisi teratas, tetapi tidak memiliki fokus (misalnya, jika menu notifikasi diperluas).
Di Android 10 (API level 29) dan yang lebih baru, Anda dapat berlangganan
callback onTopResumedActivityChanged()
untuk mendapatkan notifikasi saat aktivitas Anda memperoleh atau kehilangan posisi teratas
yang dilanjutkan. Ini setara dengan status dilanjutkan sebelum Android 10 dan dapat berguna
sebagai petunjuk jika aplikasi Anda menggunakan resource eksklusif atau singleton yang mungkin perlu
dibagikan ke aplikasi lain.
Perilaku atribut manifes
resizeableActivity
juga telah berubah. Jika aplikasi menetapkan
resizeableActivity=false di Android 10 (level API 29) atau yang lebih baru, aplikasi mungkin akan ditempatkan dalam mode kompatibilitas
saat ukuran layar yang tersedia berubah, atau jika aplikasi berpindah dari satu layar ke
layar lainnya.
Aplikasi dapat menggunakan atribut
android:minAspectRatio, yang diperkenalkan di Android 10, untuk menunjukkan rasio
layar yang didukung aplikasi Anda.
Mulai versi 3.5, alat emulator Android Studio menyertakan perangkat virtual 7,3" dan 8" untuk menguji kode Anda dengan layar yang lebih besar.
Untuk informasi selengkapnya, lihat Mendesain aplikasi untuk perangkat foldable.