Android 10 menyertakan perubahan perilaku sistem yang telah diupdate yang mungkin memengaruhi aplikasi Anda.
Perubahan yang tercantum di halaman ini berlaku secara eksklusif 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
agar dapat mendukung perilaku ini dengan benar,
jika perlu.
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 pembatasan 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 mulai membatasi antarmuka non-SDK yang dapat digunakan aplikasi Anda di Android 9 (API level 28). Android 10 menyertakan daftar yang diperbarui 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 10 (API level 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, Anda dapat menguji aplikasi Anda untuk temukan. Jika aplikasi Anda mengandalkan antarmuka non-SDK, sebaiknya Anda 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, baca Pembaruan pembatasan antarmuka non-SDK di Android 10 dan lihat Batasan antarmuka non-SDK.
Memori bersama
Ashmem telah mengubah format peta dalvik di {i> /proc/<pid>/maps<i}, memengaruhi aplikasi yang secara langsung mengurai file peta. Pengembang aplikasi seharusnya uji format /proc/<pid>/maps pada perangkat yang menjalankan Android 10 atau yang lebih tinggi dan uraikan dengan tepat jika aplikasi bergantung pada format peta dalvik.
Aplikasi yang menargetkan Android 10 tidak dapat menggunakan ashmem secara langsung
(/dev/ashmem) dan harus mengakses memori bersama melalui file NDK
Class ASharedMemory
.
Selain itu, aplikasi tidak dapat membuat IOCTL langsung ke deskriptor file ashmem yang ada
dan harus menggunakan class ASharedMemory
NDK atau Android Java
API untuk membuat region memori bersama. Perubahan ini meningkatkan keamanan dan
keandalan saat bekerja dengan memori bersama, sehingga meningkatkan performa dan keamanan
Android secara keseluruhan.
Izin eksekusi dihapus untuk direktori utama aplikasi
Eksekusi file dari direktori induk aplikasi yang bisa ditulis adalah 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()
langsung pada file dalam
direktori {i>home<i} aplikasi.
Selain itu, aplikasi yang menargetkan Android 10 tidak dapat melakukan modifikasi dalam memori
kode yang dapat dieksekusi dari file yang telah dibuka dengan dlopen()
dan diharapkan
perubahan tersebut harus ditulis ke {i>disk<i},
karena {i>library<i} tidak bisa memiliki
dipetakan PROT_EXEC
melalui deskriptor file yang dapat ditulis. Hal ini mencakup
file objek bersama (.so
) dengan relokasi teks.
Android runtime hanya menerima file OAT yang dihasilkan sistem
Android runtime (ART) tidak lagi memanggil dex2oat
dari aplikasi
{i>checkout<i}. Perubahan ini berarti bahwa ART hanya akan menerima file OAT yang
dihasilkan 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 baru selalu mengharuskan konteks lingkungan ini sama, sehingga perubahan perilaku berikut:
- Loader class kustom—yaitu loader class 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 di APK utama—dikompilasi AOT di latar belakang. Hal ini karena penggunaan pertama mungkin terlalu mahal, yang menyebabkan latensi yang tidak diinginkan sebelum dalam proses eksekusi. Perlu diketahui bahwa untuk aplikasi, mengadopsi pemisahan dan beralih dari sekunder disarankan menggunakan file dex.
- Library bersama di Android (entri <library> dan <uses-library> dalam manifes Android) diimplementasikan menggunakan hierarki loader class yang berbeda dengan yang digunakan pada versi platform sebelumnya.
Perubahan izin untuk intent layar penuh
Aplikasi yang menargetkan Android 10 atau yang lebih tinggi dan menggunakan notifikasi
layar penuh
intent harus meminta
tindakan
USE_FULL_SCREEN_INTENT
dalam file manifes aplikasi mereka. Ini adalah normal
izin akses, sehingga sistem
secara 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 sistem, sistem akan mengabaikan intent layar penuh dan menghasilkan output pesan log:
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. Saat beberapa aplikasi muncul secara bersamaan di multi-aplikasi atau
mode multi-tampilan, semua aktivitas teratas yang dapat difokuskan dalam tumpukan yang terlihat
dalam status dilanjutkan, tetapi hanya salah satunya, "dilanjutkan teratas" aktivitas,
benar-benar memiliki fokus. Jika berjalan pada versi sebelum Android 10, hanya
aktivitas tunggal dalam sistem dapat dilanjutkan pada satu waktu, semua aktivitas lain
aktivitas dijeda.
Jangan keliru memahami antara aktivitas "fokus" dan "prioritas tinggi untuk dilanjutkan". Sistem menetapkan prioritas untuk aktivitas berdasarkan urutan z untuk memberikan prioritas yang lebih tinggi aktivitas yang terakhir berinteraksi dengan pengguna. Suatu aktivitas dapat teratas dilanjutkan, tetapi tidak memiliki fokus (misalnya, jika menu notifikasi diperluas).
Di Android 10 (level API 29) dan yang lebih baru, Anda dapat berlangganan
Callback onTopResumedActivityChanged()
agar diberi tahu saat aktivitas Anda memperoleh atau kehilangan posisi teratas yang dilanjutkan
posisi Anda. Ini setara dengan status yang dilanjutkan sebelum Android 10 dan berguna sebagai petunjuk apakah aplikasi menggunakan resource khusus atau tunggal yang mungkin perlu dibagikan ke aplikasi lainnya.
Perilaku
resizeableActivity
juga berubah. Jika aplikasi menetapkan
resizeableActivity=false
di Android 10 (API level 29) atau yang lebih baru, mungkin dimasukkan dalam mode kompatibilitas
saat ukuran layar yang tersedia berubah, atau jika aplikasi berpindah dari satu layar ke
lain.
Aplikasi dapat menggunakan
android:minAspectRatio
, diperkenalkan di Android 10, untuk menunjukkan layar
rasio yang didukung aplikasi Anda.
Mulai versi 3.5, alat emulator Android Studio termasuk 7,3" dan 8" perangkat virtual untuk menguji kode Anda dengan layar yang lebih besar.
Untuk mengetahui informasi selengkapnya, lihat Mendesain aplikasi untuk perangkat foldable.