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

Perubahan framework kompatibilitas (Android 12)

Gambar 1. Layar Perubahan Kompatibilitas Aplikasi di opsi developer mencantumkan perubahan yang dapat Anda ubah.

Halaman ini menjelaskan setiap perubahan perilaku yang ditambahkan ke framework kompatibilitas di Android 12. Gunakan daftar ini bersama dengan opsi developer dan perintah ADB untuk menguji dan men-debug aplikasi saat Anda bersiap untuk mendukung dan menargetkan Android 12.

Beberapa hal yang dapat Anda lakukan menggunakan fitur framework kompatibilitas:

  • Menguji perubahan yang ditargetkan tanpa benar-benar mengubah targetSdkVersion aplikasi. Anda dapat menggunakan tombol alih untuk mengaktifkan paksa setiap perubahan perilaku yang ditargetkan, guna mengevaluasi dampaknya terhadap aplikasi yang ada.
  • Memfokuskan pengujian pada perubahan tertentu. Dengan tombol alih ini, Anda dapat menonaktifkan beberapa perubahan yang ditargetkan, sehingga Anda dapat melakukan pengujian sesuai kebutuhan tanpa perlu menangani semua perubahan yang ditargetkan sekaligus.
  • Mengelola tombol alih melalui adb. Anda dapat menggunakan perintah adb untuk mengaktifkan atau menonaktifkan perubahan yang dapat diganti statusnya di lingkungan pengujian otomatis.
  • Men-debug lebih cepat menggunakan ID perubahan standar. Setiap perubahan yang dapat diganti statusnya memiliki ID dan nama unik yang dapat Anda gunakan untuk men-debug root masalah dalam output log dengan cepat.

Untuk mengetahui detail lengkap penggunaan fitur untuk setiap kasus penggunaan tersebut, lihat Fitur framework kompatibilitas.

Perubahan perilaku yang disertakan dalam framework kompatibilitas

Daftar di bagian ini menjelaskan setiap perubahan perilaku yang disertakan dalam framework kompatibilitas pada build pratinjau developer Android 12 terbaru.

Anda dapat memfilter daftar perubahan menurut Status Default.

Perubahan perilaku ditambahkan ke framework kompatibilitas di Android 12

ALLOW_TEST_API_ACCESS

ID Perubahan: 166236554
Status Default: Dinonaktifkan untuk semua aplikasi.

Mengizinkan aplikasi mengakses @TestApi API.

Catatan: Perubahan ini dinonaktifkan secara default dan hanya dapat digunakan oleh kode pengujian platform.

BLOCK_FLAG_SLIPPERY

ID Perubahan: 157929241
Status Default: Diaktifkan untuk semua aplikasi.

Untuk aplikasi yang berjalan di Android 12, periksa apakah FLAG_SLIPPERY digunakan dengan jendela apa pun di aplikasi. Kami memperkirakan tanda ini mungkin hanya digunakan oleh komponen sistem karena merupakan kolom yang tidak didukung. Jika ya, tindakan tersebut akan dibatasi.

BLOCK_GPS_STATUS_USAGE

ID Perubahan: 144027538
Status Default: Diaktifkan untuk aplikasi yang menargetkan Android 12 atau lebih tinggi.

Untuk aplikasi yang menargetkan Android 12 dan yang lebih tinggi, semua penggunaan API GpsStatus harus diganti dengan GnssStatus API.

BLOCK_IMMUTABLE_PENDING_INTENTS

ID Perubahan: 171317480
Status Default: Diaktifkan untuk aplikasi yang menargetkan Android 12 atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 12 dan yang lebih tinggi, objek PendingIntent yang tidak dapat diubah dan diteruskan ke API lokasi akan menghasilkan IllegalArgumentException.

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

ID Perubahan: 169887240
Status Default: Diaktifkan untuk aplikasi yang menargetkan Android 12 atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 12 dan yang lebih tinggi, LocationRequest sistem API tidak dapat digunakan dengan permintaan lokasi PendingIntent.

BLOCK_UNTRUSTED_TOUCHES

ID Perubahan: 158002302
Status Default: Diaktifkan untuk semua aplikasi.

Untuk menjaga keamanan sistem dan pengalaman pengguna yang baik, Android 12 mencegah aplikasi agar tidak menggunakan peristiwa sentuh saat overlay memblokir aplikasi dengan cara berbahaya.

Untuk mempelajari perubahan ini lebih lanjut, lihat Peristiwa sentuhan tidak tepercaya diblokir.

CAMERA_MIC_INDICATORS_NOT_PRESENT

ID Perubahan: 162547999
Status Default: Dinonaktifkan untuk semua aplikasi.

Menunjukkan bahwa perangkat ini mendukung indikator kamera dan mikrofon. Akan menjadi false jika ada, karena metode CompatChanges#isChangeEnabled menampilkan true jika ID Perubahan tidak ada.

DELIVER_HISTORICAL_LOCATIONS

ID Perubahan: 73144566
Status Default: Diaktifkan untuk aplikasi yang menargetkan Android 12 atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 12 dan yang lebih tinggi, klien di lokasi dapat menerima lokasi historis (dari sebelum waktu sekarang) dalam kondisi tertentu.

DROP_CLOSE_SYSTEM_DIALOGS

ID Perubahan: 174664120
Status Default: Diaktifkan untuk semua aplikasi.

Untuk meningkatkan kontrol pengguna saat berinteraksi dengan aplikasi dan sistem, tindakan intent ACTION_CLOSE_SYSTEM_DIALOGS tidak digunakan lagi di Android 12.

Untuk mempelajari perubahan ini lebih lanjut, lihat Aplikasi tidak dapat menutup dialog sistem.

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

ID Perubahan: 142191088
Status Default: Diaktifkan untuk aplikasi yang menargetkan Android 12 atau yang lebih tinggi.

Aplikasi yang menargetkan Android 12 dan yang lebih tinggi harus menyatakan dependensi ke pustaka bersama native publik yang ditentukan oleh pembuat perangkat menggunakan tag uses-native-library di AndroidManifest.xml. Jika salah satu dependensi tidak dapat terpenuhi, misalnya salah satu dependensi tidak ada, pengelola paket tidak akan bisa menginstal aplikasi. Dependensi dapat ditentukan sebagai dependensi opsional menggunakan atribut android:required dalam tanda, dan kegagalan memenuhi dependensi tidak akan menghentikan penginstalan.

Setelah diinstal, aplikasi disediakan hanya dengan pustaka bersama native yang ditentukan dalam manifes aplikasi. Pemanggilan dlopen di library bersama native yang tidak muncul di manifes aplikasi akan gagal meskipun sebenarnya kode ada di perangkat.

ENFORCE_STRICT_QUERY_BUILDER

ID Perubahan: 143231523
Status Default: Diaktifkan untuk aplikasi yang menargetkan Android 12 atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 12 dan yang lebih tinggi, kini SQLiteQueryBuilder memverifikasi semua pilihan kueri CalendarProvider2 terhadap argumen berbahaya.

FGS_BG_START_USE_EXEMPTION_LIST_CHANGE_ID

ID Perubahan: 175801883
Status Default: Diaktifkan untuk semua aplikasi.

Jika disetel ke false untuk sebuah paket, sistem tidak akan membebaskannya dari FGS-BG-start, meskipun paket tersebut berada di ActiveServices.sFgsBgStartExemptedPackages.

FORCE_DISABLE_HEVC_SUPPORT

ID Perubahan: 174227820
Status Default: Dinonaktifkan untuk semua aplikasi.

Menonaktifkan aplikasi secara paksa agar tidak mendukung kemampuan media HEVC. Aplikasi harus menyebutkan kemampuan media yang didukung dalam manifesnya, tetapi tanda ini dapat digunakan untuk memaksa aplikasi agar tidak mendukung HEVC sehingga memaksa transcoding saat mengakses media yang dienkode di HEVC. Menyetel tanda ini akan mengganti setiap setelan default aplikasi tingkat OS. Fitur ini dinonaktifkan secara default yang artinya setelan default OS lebih diutamakan. Menetapkan tanda ini dan FORCE_ENABLE_HEVC_SUPPORT merupakan status yang tidak ditentukan dan akan menyebabkan OS mengabaikan kedua tanda.

FORCE_ENABLE_HEVC_SUPPORT

ID Perubahan: 174228127
Status Default: Dinonaktifkan untuk semua aplikasi.

Mengaktifkan aplikasi secara paksa untuk mendukung kemampuan media HEVC pada Aplikasi harus menyebutkan kemampuan media yang didukung dalam manifesnya, tetapi tanda ini dapat digunakan untuk memaksa aplikasi agar mendukung HEVC sehingga menghindari transcoding selagi mengakses media yang dienkode di HEVC. Menyetel tanda ini akan mengganti setiap setelan default aplikasi tingkat OS. Fitur ini dinonaktifkan secara default yang artinya setelan default OS akan lebih diutamakan. Menetapkan tanda ini dan FORCE_DISABLE_HEVC_SUPPORT merupakan status yang tidak ditentukan dan akan menyebabkan OS mengabaikan kedua tanda.

FORCE_RESIZE_APP

ID Perubahan: 174042936
Status Default: Dinonaktifkan untuk semua aplikasi.

Memaksa paket yang diterapkan agar ukurannya dapat diubah. Pengubahan ukuran hanya diizinkan dalam mode jendela penuh layar, tetapi tidak memaksa aplikasi berubah menjadi mode multi-jendela yang dapat diubah ukurannya.

HIDE_PROP_ICUBINARY_DATA_PATH

ID Perubahan: 171979766
Status Default: Diaktifkan untuk aplikasi yang menargetkan Android 12 atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 12 dan yang lebih tinggi, hapus akses ke properti android.icu.impl.ICUBinary.dataPath.

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

ID Perubahan: 160482162
Status Default: Diaktifkan untuk aplikasi yang menargetkan Android 12 atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 12 dan yang lebih tinggi, izin BACKUP yang diperlukan untuk isBackupServiceActive() diberlakukan di sisi layanan, bukan di sisi klien dalam BackupManager.

KEYSTORE_OPERATION_CREATION_MAY_FAIL

ID Perubahan: 169897160
Status Default: Diaktifkan untuk aplikasi yang menargetkan Android 12 atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 12 dan yang lebih tinggi, pembuatan operasi keystore saat ini bisa jadi gagal. Sebelumnya, keystore biasanya bekerja dengan asumsi bahwa pembuatan operasi kriptografi selalu berhasil. Namun, backend KeyMint hanya memiliki jumlah slot operasi yang terbatas.

Untuk mempertahankan tampilan slot operasi "tidak terbatas", daemon Keystore akan memangkas operasi yang terakhir digunakan jika tidak ada slot operasi yang tersedia. Akibatnya, operasi tidak bermasalah dapat dihentikan sebelum waktunya. Tindakan ini akan membuka AndroidKeystore hingga denial of service (DoS) dan livelock yang tidak diinginkan. Misalnya, jika beberapa aplikasi aktif bersamaan karena pengoptimalan pengelolaan daya dan berupaya melakukan operasi kripto, aplikasi tersebut akan mulai menghentikan operasi lain tanpa ada kemajuan apa pun.

Untuk mengurangi livelock dan mencegah upaya DoS, strategi pemangkasan telah diubah sehingga lebih memilih klien yang hanya menggunakan sedikit slot operasi. Hasilnya, operasi tunggal yang tidak aktif selama lebih dari 5 detik hampir akan selalu diselesaikan oleh strategi pemangkasan. Masih ada beberapa operasi yang berkaitan dengan enkripsi sistem file yang bahkan dapat memangkas operasi ini, tetapi kasus tersebut sangat jarang terjadi. Efek samping dari operasi strategi pemangkasan baru ini yaitu pembuatan bisa gagal jika klien memiliki daya pemangkasan yang lebih rendah daripada semua operasi yang ada.

Strategi pemangkasan: Untuk menemukan kandidat yang sesuai, kami menghitung malus untuk pemanggil dan setiap operasi yang ada. Malus adalah balikan dari daya pemangkasan (pemanggil) atau hambatan pemangkasan (operasi yang ada). Agar pemanggil dapat memangkas operasi, operator harus menemukan operasi dengan malus yang lebih tinggi dari operasinya sendiri. Untuk mengetahui detail strategi pemangkasan selengkapnya, lihat penerapan operation.rs. Di Android 11 (API level 30) dan yang lebih rendah, KeyStore2 akan melakukan polling pada daemon Keystore untuk slot operasi gratis. Untuk aplikasi yang menargetkan Android 11 (API level 30) dan yang lebih rendah, inisialisasi ciphet dan objek tanda tangan akan selalu terlihat berhasil, tetapi mungkin butuh waktu lebih lama untuk mendapatkan operasi. Semua versi Android mendapatkan manfaat dari penjadwalan slot operasi yang lebih adil dan peluang yang lebih baik agar berhasil menyelesaikan operasi.

LOW_POWER_EXCEPTIONS

ID Perubahan: 168936375
Status Default: Diaktifkan untuk aplikasi yang menargetkan Android 12 atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 12 dan yang lebih tinggi, semua objek LocationRequest yang ditandai sebagai objek berdaya rendah akan memberikan pengecualian jika pemanggil tidak memiliki izin LOCATION_HARDWARE, dan tidak akan menurunkan bagian daya rendah dari permintaan tersebut secara diam-diam.

MISSING_EXPORTED_FLAG

ID Perubahan: 150232615
Status Default: Diaktifkan untuk aplikasi yang menargetkan Android 12 atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 12 dan yang lebih tinggi, nilai eksplisit harus ditentukan untuk atribut android:exported setiap kali filter intent ditentukan.

Untuk mempelajari lebih lanjut perubahan ini, lihat Mengekspor komponen dengan lebih aman.

NATIVE_MEMTAG_ASYNC

ID Perubahan: 135772972
Status Default: Dinonaktifkan untuk semua aplikasi.

Mengaktifkan pemeriksaan tag memori di aplikasi non-sistem. Tanda ini hanya memengaruhi hardware yang mendukung Ekstensi Pemberian Tag Memori (MTE) ARM.

NATIVE_MEMTAG_SYNC

ID Perubahan: 177438394
Status Default: Dinonaktifkan untuk semua aplikasi.

Mengaktifkan pemeriksaan tag memori sinkron (SINKRONISASI) dalam proses ini. Tanda ini hanya memengaruhi hardware yang mendukung Ekstensi Pemberian Tag Memori (MTE) ARM. Jika NATIVE_MEMTAG_ASYNC dan opsi ini diaktifkan, opsi ini akan diutamakan dan MTE akan diaktifkan dalam mode SINKRONISASI.

NOTIFICATION_TRAMPOLINE_BLOCK

ID Perubahan:anjang67676448
Status Default: Diaktifkan untuk aplikasi yang menargetkan Android 12 atau lebih tinggi.

Untuk meningkatkan performa aplikasi dan UX, aplikasi yang menargetkan Android 12 tidak dapat menggunakan layanan atau penerima siaran sebagai trampoline notifikasi.

Untuk mempelajari perubahan ini lebih lanjut, lihat Trampoline notifikasi tidak dapat dibuat dari layanan atau penerima siaran.

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

ID Perubahan: 160794467
Status Default: Diaktifkan untuk aplikasi yang menargetkan Android 12 atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 12 dan yang lebih tinggi, Anda harus menentukan mutabilitas setiap objek PendingIntent yang dibuat oleh aplikasi Anda. Persyaratan tambahan ini meningkatkan keamanan aplikasi Anda.

Untuk mempelajari perubahan ini lebih lanjut, lihat Intent tertunda harus menyebutkan mutasi.

RATE_LIMIT_TOASTS

ID Perubahan: 174840628
Status Default: Perubahan ini tidak dapat dialihkan. Perubahan hanya dicatat ke dalam log oleh framework kompatibilitas.

Mengaktifkan pembatasan kapasitas jumlah panggilan Toast.show() untuk mencegah beban berlebih pada pengguna yang memiliki jumlah toast yang terlalu banyak dalam waktu terbatas. Setiap upaya untuk menampilkan jumlah toast yang terlalu banyak dari jumlah yang diizinkan dalam jangka waktu tertentu akan mengakibatkan toast dihapus.

RETURN_NULL_HARDWARE_ADDRESS

ID Perubahan: 170188668
Status Default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 11 (API level 30) dan yang lebih tinggi, getHardwareAddress() menampilkan null saat alamat hardware tidak dapat diakses. Jika perubahan dinonaktifkan, alamat MAC default (02:00:00:00:00:00) akan ditampilkan.

Untuk mempelajari perubahan ini lebih lanjut, lihat Pembatasan Alamat MAC Netlink.

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

ID Perubahan: 311105954
Status Default: Diaktifkan untuk aplikasi yang menargetkan Android 12 atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 12 dan yang lebih tinggi, memberlakukan bahwa semua attributionTags yang dikirim ke noteOp(String, int, String), noteProxyOp(String, String), dan startOp(String, int, String) ditentukan dalam manifes paket yang ditentukan sebagai parameter metode.

Untuk mengaktifkan perubahan ini, panggilan paket noteOp(String, int, String) serta paket yang ditentukan sebagai parameter metode harus mengaktifkan perubahan ini.

SELINUX_LATEST_CHANGES

ID Perubahan: 143539591
Status Default: Diaktifkan untuk aplikasi yang menargetkan Android 12 atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 12 dan yang lebih tinggi, pilih perubahan SELinux terbaru. Sulit untuk menonaktifkan perubahan ini untuk aplikasi yang menargetkan Android 12 atau yang lebih tinggi. Tidak memiliki efek untuk aplikasi yang menggunakan ID pengguna bersama.

THROW_EXCEPTION_ON_REQUIRE_INSTALL_PACKAGES_TO_ADD_INSTALLER_PACKAGE

ID Perubahan: 15057253
Status Default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 11 (API level 30) dan yang lebih tinggi, menambahkan nama paket penginstal ke paket yang belum memiliki satu set sekarang memerlukan izin INSTALL_PACKAGES. Jika penelepon menargetkan Android 11 (API level 30), SecurityException akan ditampilkan. Jika tidak, permintaan diam-diam akan gagal. Di kedua kasus ini, dan terlepas dari apakah perubahan ini diaktifkan atau tidak, paket penginstal tetap tidak berubah.