Selamat datang di Pratinjau Developer Android 12. Beri kami masukan lebih awal dan sering, serta bantu kami menjadikan Android 12 sebagai rilis terbaik!

Perubahan perilaku: semua aplikasi

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:

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 dari connectedDevice, mediaPlayback, mediaProjection, atau phoneCall.
  • 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:

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 atau INVISIBLE.

  • 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.