Platform Android 12 menyertakan perubahan perilaku yang dapat
memengaruhi aplikasi Anda. Perubahan perilaku berikut ini berlaku untuk semua aplikasi saat
dijalankan di Android 12, terlepas dari targetSdkVersion
aplikasi. Sebaiknya
uji aplikasi Anda lalu modifikasi sesuai kebutuhan untuk mendukung perubahan ini dengan tepat, jika
memungkinkan.
Selain itu, pastikan Anda meninjau daftar perubahan perilaku yang hanya memengaruhi aplikasi yang menargetkan Android 12.
Pengalaman pengguna
Peningkatan mode imersif untuk navigasi gestur
Android 12 menyederhanakan mode imersif guna membuat navigasi gestur lebih mudah dan lebih konsisten dengan pengalaman aktivitas lainnya, seperti menonton video dan membaca buku. Aplikasi masih dapat melindungi dari terjadinya gestur tidak disengaja dalam pengalaman bermain game layar penuh agar pengguna tidak keluar dari game secara tidak sengaja ketika bermain. Semua pengalaman layar penuh atau imersif lainnya kini memungkinkan pengguna mengendalikan ponsel mereka dengan sekali geser.
Untuk mewujudkan hal ini, perilaku yang ada untuk pengalaman imersif
yang tidak melekat (BEHAVIOR_SHOW_BARS_BY_TOUCH
,
BEHAVIOR_SHOW_BARS_BY_SWIPE
)
tidak digunakan lagi mulai di Android 12. Perilaku ini telah diganti dengan perilaku
default (BEHAVIOR_DEFAULT
)
sehingga gestur dapat dilakukan dengan sekali geser saat menyembunyikan kolom sistem. Tanda ini menunjukkan
berbagai perilaku visual dan fungsional, bergantung pada mode:
- Dalam mode tiga tombol, perilaku visual dan fungsional sama dengan mode imersif dalam versi sebelum Android 12.
- Dalam mode navigasi gestur, perilakunya adalah sebagai berikut:
- Dari segi visual, mode ini sama dengan mode imersif di Android 11 dan yang lebih rendah.
- Dari segi fungsi, gestur diperbolehkan meskipun kolom disembunyikan; sistem hanya memerlukan sekali geser untuk memanggil, bukan dua kali geser yang diperlukan seperti di Android 11. Tidak ada geser tambahan yang diperlukan untuk menarik baris notifikasi ke bawah atau mulai membuka Beranda.
Mode imersif melekat (BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
)
masih tetap sama di Android 12. Perhatikan kompatibilitas mundur berikut pada
fitur ini:
- Untuk aplikasi yang berjalan di Android 12 yang menargetkan Android 11 dan yang lebih rendah:
BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
berperilaku sama dari segi fungsi dan visual.- Defaultnya dipetakan ke
BEHAVIOR_SHOW_BARS_BY_SWIPE
.
- Untuk aplikasi yang berjalan di Android 11 (API level 30) dan lebih rendah yang menargetkan Android
12:
- Perilaku yang sama diharapkan, kecuali
BEHAVIOR_SHOW_BARS_BY_TOUCH
dipetakan keBEHAVIOR_SHOW_BARS_BY_SWIPE
. - Pastikan untuk mengupdate level SDK agar memiliki default baru (
BEHAVIOR_SHOW_BARS_BY_SWIPE
). Jika tidak,BEHAVIOR_SHOW_BARS_BY_TOUCH
akan tetap menjadi default-nya.
- Perilaku yang sama diharapkan, kecuali
Penundaan notifikasi layanan latar depan
Guna memberikan pengalaman yang disederhanakan untuklayanan latar depan jangka pendek di Android 12, sistem dapat menunda tampilan notifikasi layanan latar depan selama 10 detik untuk layanan latar depan tertentu. Perubahan ini memberikan kesempatan untuk tugas jangka pendek agar dapat diselesaikan sebelum notifikasi muncul.
Jika layanan latar depan memiliki setidaknya salah satu dari karakteristik berikut, sistem akan segera menampilkan notifikasi terkait setelah layanan dimulai:
- Layanan ini dikaitkan dengan notifikasi yang menyertakan tombol tindakan.
- Layanan memiliki
foregroundServiceType
dariconnectedDevice
,mediaPlayback
,mediaProjection
, atauphoneCall
. Layanan ini menyediakan kasus penggunaan yang berkaitan dengan panggilan telepon, navigasi, atau pemutaran media, seperti yang dijelaskan dalam atribut kategori notifikasi.
Layanan memilih tidak menggunakan perubahan perilaku dengan memanggil
setShowForegroundImmediately()
saat menyiapkan notifikasi.
Privasi
Pembatasan pada Alamat MAC Netlink
Android 12 lebih lanjut membatasi akses ke alamat MAC perangkat, pengenal yang tidak dapat disetel ulang, dan semua aplikasi non-sistem terlepas dari level API target.
API terkait menampilkan nilai placeholder atau nilai kosong, bergantung pada versi SDK target aplikasi:
- Jika aplikasi Anda menargetkan Android 12, API akan menampilkan null.
- Jika aplikasi Anda menargetkan Android 11 atau yang lebih rendah, API akan menampilkan nilai placeholder hard code:
02:00:00:00:00:00
Developer harus menggunakan ConnectivityManager
dan bukan API tingkat rendah seperti NetworkInterface
, getifaddrs()
, atau soket Netlink. Ketika developer memanggil NetworkInterface.getHardwareAddress()
dalam kodenya, output logcat akan menampilkan:
CompatibilityChangeReporter: Compat change id reported: 170188668;
Developer dapat menggunakan tanda kompatibilitas yang disebut RETURN_NULL_HARDWARE_ADDRESS
untuk mengalihkan perilaku dari NetworkInterface.getHardwareAddress()
antara menampilkan null saat diaktifkan atau 02:00:00:00:00:00
saat dinonaktifkan.
Keamanan
Peristiwa sentuh yang tidak tepercaya diblokir
Untuk menjaga keamanan sistem dan pengalaman pengguna yang baik, Android 12 mencegah aplikasi menggunakan peristiwa sentuh ketika overlay menutupi aplikasi dengan cara berbahaya. Dengan kata lain, sistem memblokir sentuhan yang melewati jendela tertentu, dengan beberapa pengecualian.
Aplikasi yang terkena dampak
Perubahan ini memengaruhi aplikasi yang memilih untuk membiarkan sentuhan melewati jendelanya,
misalnya dengan menggunakan
tanda
FLAG_NOT_TOUCHABLE
. Beberapa contoh mencakup, tetapi tidak terbatas pada, hal berikut:
- Overlay yang memerlukan
izin
SYSTEM_ALERT_WINDOW
, seperti jendela yang menggunakanTYPE_APPLICATION_OVERLAY
, dan menggunakan tandaFLAG_NOT_TOUCHABLE
. - Jendela aktivitas yang menggunakan tanda
FLAG_NOT_TOUCHABLE
. - Pesan Toast.
Pengecualian
Dalam kasus berikut, sentuhan "pass-through" diizinkan:
- Interaksi dalam aplikasi Anda. Aplikasi Anda menampilkan overlay, dan overlay hanya muncul saat pengguna berinteraksi dengan aplikasi Anda.
Jendela tepercaya. Jendela ini mencakup (tetapi tidak terbatas pada) hal-hal berikut:
Jendela yang tidak terlihat. Tampilan root jendela adalah
GONE
atauINVISIBLE
.Jendela yang sepenuhnya transparan. Properti
alpha
untuk jendela adalah 0,0.Jendela pemberitahuan sistem yang cukup transparan. Sistem menganggap sekumpulan jendela peringatan sistem sudah cukup transparan jika opasitas gabungan kurang dari atau sama dengan opasitas kabur maksimum sistem untuk sentuhan. Pada Pratinjau Developer 1, opasitas maksimum ini adalah 0,8, tetapi nilai ini nantinya dapat berubah di Pratinjau Developer.
Mendeteksi saat sentuhan yang tidak dipercaya diblokir
Jika tindakan sentuh diblokir oleh sistem, log Logcat akan mencatat pesan berikut:
Untrusted touch due to occlusion by PACKAGE_NAME
Menguji perubahan
Sentuhan tidak tepercaya diblokir secara default di perangkat yang menjalankan Pratinjau Developer 1 Android 12. Untuk mengizinkan sentuhan tidak tepercaya, jalankan perintah ADB berikut di jendela terminal:
# A specific app adb shell am compat disable BLOCK_UNTRUSTED_TOUCHES com.example.app # All apps # If you'd still like to see a Logcat message warning when a touch would be # blocked, use 1 instead of 0. adb shell settings put global block_untrusted_touches 0
Untuk mengembalikan perilaku ke default (sentuhan tidak tepercaya diblokir), jalankan perintah berikut:
# A specific app adb shell am compat reset BLOCK_UNTRUSTED_TOUCHES com.example.app # All apps adb shell settings put global block_untrusted_touches 2
Aplikasi tidak dapat menutup dialog sistem
Untuk meningkatkan kontrol pengguna saat berinteraksi dengan aplikasi dan sistem, tindakan intent
ACTION_CLOSE_SYSTEM_DIALOGS
tidak digunakan lagi di Android 12. Kecuali untuk beberapa
kasus khusus, saat aplikasi mencoba memanggil
intent yang berisi tindakan ini,
sistem akan melakukan salah satu hal berikut berdasarkan versi SDK target aplikasi:
- Jika aplikasi menargetkan Android 12,
SecurityException
akan muncul. Jika aplikasi menargetkan Android 11 (API level 30) atau yang lebih rendah, intent tidak akan dijalankan, dan pesan berikut muncul di Logcat:
E ActivityTaskManager Permission Denial: \ android.intent.action.CLOSE_SYSTEM_DIALOGS broadcast from \ com.package.name requires android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS, \ dropping broadcast.
Pengecualian
Dalam kasus berikut, aplikasi masih dapat menutup dialog sistem di Android 12:
- Aplikasi Anda menjalankan uji instrumentasi.
Aplikasi menargetkan Android 11 atau yang lebih rendah dan menampilkan jendela yang berada di atas panel samping notifikasi.
Aplikasi Anda menargetkan Android 11 atau yang lebih rendah. Sebagai tambahan, pengguna telah berinteraksi dengan notifikasi yang mungkin menggunakan tombol tindakan notifikasi, dan aplikasi Anda sedang memproses layanan atau penerima siaran sebagai respons terhadap tindakan pengguna tersebut.
Pembatasan antarmuka non-SDK
Android 12 menyertakan daftar terbaru antarmuka non-SDK yang dibatasi berdasarkan kolaborasi dengan developer Android dan pengujian internal terbaru. Jika memungkinkan, kami akan memastikan ketersediaan alternatif publik sebelum membatasi antarmuka non-SDK.
Jika aplikasi Anda tidak menargetkan Android 12, 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 mengandalkan antarmuka non-SDK, sebaiknya mulailah 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 perubahan dalam rilis Android ini lebih lanjut, baca Update pembatasan antarmuka non-SDK di Android 12. Untuk mempelajari lebih lanjut tentang antarmuka non-SDK secara umum, baca Pembatasan antarmuka non-SDK.