Perubahan framework kompatibilitas (Android 11)

Halaman ini menjelaskan setiap perubahan perilaku yang memengaruhi aplikasi yang ditambahkan ke framework kompatibilitas di Android 11 (API level 30). Gunakan daftar ini bersama dengan opsi developer dan perintah ADB untuk menguji dan men-debug aplikasi saat Anda bersiap untuk menargetkan Android 11.

ADD_CONTENT_OBSERVER_FLAGS

ID Perubahan: 150939131

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 11, terdapat overload API publik baru onChange(boolean, Uri, int) yang menyertakan argumen flags integer.

Metode baru ini merupakan alternatif SDK publik untuk aplikasi yang menggunakan metode overload onChange() non-SDK yang menyertakan argumen userId integer.

ADMIN_APP_PASSWORD_COMPLEXITY

ID Perubahan: 123562444

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Untuk aplikasi admin yang menargetkan Android 11, tampilkan error setiap kali aplikasi menetapkan persyaratan sandi yang tidak relevan dengan kualitas sandi yang ditetapkan saat ini. Misalnya, saat kualitas sandi ditetapkan ke DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, aplikasi tidak akan dapat menetapkan panjang sandi minimum. Dalam hal ini, sebelum mencoba menetapkan panjang sandi minimum, aplikasi harus terlebih dahulu memanggil metode setPasswordQuality(), kemudian memanggil metode setPasswordMinimumLength() setelahnya.

Selain itu, saat aplikasi admin yang menargetkan Android 11 menurunkan kualitas sandi, persyaratan sandi yang ada dan tidak berlaku lagi akan direset ke nilai default-nya.

APP_DATA_DIRECTORY_ISOLATION

ID Perubahan: 143937733

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Aplikasi yang menargetkan Android 11 tidak dapat lagi mengakses file di direktori data pribadi aplikasi apa pun, terlepas dari versi SDK target aplikasi lainnya.

Untuk mempelajari lebih lanjut, baca Akses ke direktori pribadi.

APN_READING_PERMISSION_CHANGE_ID

ID Perubahan: 124107808

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 11, mengakses database APN kini memerlukan izin Manifest.permission.WRITE_APN_SETTINGS.

Untuk mempelajari perubahan ini lebih lanjut, baca Akses baca terbatas ke database APN.

BACKGROUND_RATIONALE_CHANGE_ID

ID Perubahan: 147316723

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Aplikasi kini harus memberikan alasan yang valid setiap kali meminta akses lokasi perangkat di latar belakang.

Untuk mempelajari perubahan ini lebih lanjut, lihat panduan tentang cara Mengakses lokasi latar belakang di Android 11 yang membahas perubahan privasi terkait lokasi di Android 11.

CALLBACK_ON_CLEAR_CHANGE

ID Perubahan: 119147584

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Setiap kali Editor.clear dipanggil, callback kini dilakukan ke OnSharedPreferenceChangeListener.onSharedPreferenceChanged dengan kunci null.

Untuk mempelajari perubahan ini lebih lanjut, lihat Perubahan callback untuk OnSharedPreferenceChangeListener.

CALLBACK_ON_MORE_ERROR_CODE_CHANGE

ID Perubahan: 130595455

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Kode error kini diperluas untuk updateAvailableNetworks(List, Executor, Consumer) dan setPreferredOpportunisticDataSubscription(int, boolean, Executor, Consumer).

CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE

ID Perubahan: 148180766

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Ini adalah perubahan perilaku yang tidak begitu terlihat pada startWatchingMode(String, String, AppOpsManager.OnOpChangedListener). Sebelum diberlakukannya perubahan ini, sistem memanggil kembali op yang diaktifkan. Sekarang, sistem akan memanggil kembali op yang benar-benar diminta atau semua op yang diaktifkan jika tidak ada op yang ditentukan.

CAMERA_MICROPHONE_CAPABILITY_CHANGE_ID

ID Perubahan: 136219221

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 11, layanan latar depan hanya menerima kemampuan selagi-digunakan dari kamera dan mikrofon apabila R.attr.foregroundServiceType dikonfigurasi sebagai ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA dan ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE, masing-masing dalam file manifes. Pada versi Android sebelumnya, layanan latar depan menerima kemampuan kamera dan mikrofon secara otomatis.

Untuk mempelajari perubahan ini lebih lanjut, lihat Jenis layanan latar depan di Android 11.

CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK

ID Perubahan: 128611929

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Aplikasi tidak dapat lagi memposting toast kustom di latar belakang. Namun, aplikasi tetap dapat memposting toast menggunakan metode Toast.makeText(Context, CharSequence, int) dan variannya saat berada di latar belakang.

Untuk mempelajari perubahan ini lebih lanjut, baca Tampilan toast kustom diblokir.

CHANGE_RESTRICT_SAW_INTENT

ID Perubahan: 135920175

Status default: Perubahan ini tidak dapat diganti statusnya. Perubahan hanya dicatat ke dalam log oleh framework kompatibilitas.

Intent yang menggunakan tindakan android.settings.MANAGE_APP_OVERLAY_PERMISSION dan skema URI data package tidak lagi mengarahkan pengguna ke layar khusus aplikasi untuk mengelola izin terkait. Sekarang, pengguna akan diarahkan ke layar tempat mereka dapat mengelola semua aplikasi yang telah meminta izin.

CHANGE_TEXT_TOASTS_IN_THE_SYSTEM

ID Perubahan: 147798919

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Toast teks kini dirender oleh SystemUI dan bukan dalam aplikasi. Dengan demikian, aplikasi tidak akan menghindari pembatasan saat memposting toast kustom di latar belakang.

DEFAULT_SCOPED_STORAGE

ID Perubahan: 149924527

Status default: Diaktifkan untuk semua aplikasi.

Semua aplikasi yang menargetkan Android 11 sekarang menggunakan penyimpanan terbatas secara default dan tidak dapat lagi memilih untuk tidak menggunakan penyimpanan terbatas.

Namun, Anda dapat menguji aplikasi tanpa penyimpanan terbatas, terlepas dari versi SDK target dan nilai tanda manifes aplikasi, dengan menonaktifkan perubahan ini.

Untuk mempelajari lebih lanjut perubahan pada penyimpanan terbatas di Android 11, lihat bagian Penyimpanan terbatas di halaman tentang perubahan pada penyimpanan Android di Android 11.

EMPTY_INTENT_ACTION_CATEGORY

ID Perubahan: 151163173

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 11, sistem sekarang akan menampilkan error jika action atau category pada filter intent berupa string kosong. Bug yang ada di platform sebelum Android 11 memungkinkan kasus ini untuk diteruskan tanpa menampilkan error. Perhatikan bahwa ini tidak termasuk kasus jika atribut bernilai null atau tidak ada karena kasus tersebut selalu menampilkan error.

FILTER_APPLICATION_QUERY

ID Perubahan: 135549675

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Aplikasi kini harus mendeklarasikan paket dan intent yang perlu digunakan sebelum memperoleh detail tentang aplikasi lain di suatu perangkat. Deklarasi tersebut harus dibuat menggunakan tag <queries> dalam manifes aplikasi.

Untuk mempelajari lebih lanjut tentang cara membuat kueri dan berinteraksi dengan aplikasi terinstal lainnya di Android 11, lihat halaman privasi visibilitas paket.

FORCE_ENABLE_SCOPED_STORAGE

ID Perubahan: Value: 132649864

Status default: Dinonaktifkan untuk semua aplikasi.

Semua aplikasi yang menargetkan Android 11 sekarang menggunakan penyimpanan terbatas secara default dan tidak dapat lagi memilih untuk tidak menggunakan penyimpanan terbatas.

Namun, jika aplikasi Anda masih menargetkan Android 10 (API level 29) atau yang lebih rendah, Anda dapat menguji aplikasi dengan penyimpanan terbatas, terlepas dari versi SDK target dan nilai tanda manifes aplikasi, dengan mengaktifkan perubahan ini.

Untuk mempelajari lebih lanjut perubahan pada penyimpanan terbatas di Android 11, lihat bagian Penyimpanan terbatas di halaman tentang perubahan pada penyimpanan Android di Android 11.

GET_DATA_CONNECTION_STATE_R_VERSION

ID Perubahan: 148535736

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Untuk memeriksa versi SDK bagi PreciseDataConnectionState#getDataConnectionState.

GET_DATA_STATE_R_VERSION

ID Perubahan: 148534348

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Untuk memeriksa versi SDK bagi getDataState().

GET_PROVIDER_SECURITY_EXCEPTIONS

ID Perubahan: 150935354

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) atau yang lebih tinggi, getProvider(String) tidak lagi melempar pengecualian keamanan apa pun.

GET_TARGET_SDK_VERSION_CODE_CHANGE

ID Perubahan: 145147528

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 10 (API level 29) atau yang lebih tinggi.

Untuk memeriksa versi SDK bagi metode SmsManager.sendResolverResult().

GWP_ASAN

ID Perubahan: 135634846

Status default: Dinonaktifkan untuk semua aplikasi.

Mengaktifkan deteksi bug memori native yang diambil sampelnya dalam aplikasi.

Untuk mempelajari perubahan ini lebih lanjut, lihat panduan GWP-ASan.

HIDE_MAXTARGETSDK_P_HIDDEN_APIS

ID Perubahan: 149997251

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 10 (API level 29) atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 10 (API level 29) atau lebih tinggi, menghapus akses ke semua antarmuka non-SDK yang merupakan bagian dari max-target-p (greylist-max-p) daftar untuk Android 10 (API level 29).

HIDE_MAXTARGETSDK_Q_HIDDEN_APIS

ID Perubahan: 149994052

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) atau lebih tinggi, menghapus akses ke semua antarmuka non-SDK yang merupakan bagian dari max-target-q (greylist-max-q) daftar untuk Android 11 (API level 30).

Untuk mempelajari perubahan ini lebih lanjut, lihat antarmuka non-SDK yang kini diblokir di Android 11.

LISTEN_CODE_CHANGE

ID Perubahan: 147600208

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 10 (API level 29) atau yang lebih tinggi.

Untuk memeriksa versi SDK bagi TelephonyManager.listen(PhoneStateListener, int).

MISSING_APP_TAG

ID Perubahan: 150776642

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 11, error sekarang akan ditampilkan jika file manifes aplikasi tidak memiliki tag application atau instrumentation.

NATIVE_HEAP_POINTER_TAGGING

ID Perubahan: 135754954

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 11, alokasi heap native kini memiliki tag bukan nol pada byte yang paling signifikan.

Untuk mempelajari lebih lanjut, baca Pemberian tag pointer heap.

PHONE_STATE_LISTENER_LIMIT_CHANGE_ID

ID Perubahan: 150880553

Status default: Diaktifkan untuk semua aplikasi.

Untuk aplikasi yang menargetkan Android 11, sekarang terdapat batas jumlah objek PhoneStateListener yang dapat didaftarkan oleh setiap proses melalui TelephonyManager.listen(PhoneStateListener, int). Batas defaultnya adalah 50, yang dapat diubah melalui update konfigurasi perangkat jarak jauh. Batas ini diterapkan menggunakan IllegalStateException yang ditampilkan oleh TelephonyManager.listen(PhoneStateListener, int) saat proses yang melanggar mencoba mendaftarkan terlalu banyak pemroses.

PREVENT_META_REFLECTION_BLACKLIST_ACCESS

ID Perubahan: 142365358

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Aplikasi yang menargetkan Android 11 tidak dapat lagi menggunakan lapisan refleksi tambahan untuk mengakses antarmuka non-SDK yang dibatasi.

PROCESS_CAPABILITY_CHANGE_ID

ID Perubahan: 136274596

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 11, tanda Context.BIND_INCLUDE_CAPABILITIES kini dapat digunakan untuk meneruskan kemampuan selagi-digunakan dari proses klien ke layanan terikat.

REMOVE_ANDROID_TEST_BASE

ID Perubahan: 133396946

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Untuk aplikasi yang menargetkan Android 11, library android.test.base telah dihapus jika aplikasi tidak bergantung pada android.test.runner (karena aplikasi tersebut bergantung pada class dari library android.test.base).

REQUEST_ACCESSIBILITY_BUTTON_CHANGE

ID Perubahan: 136293963

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Untuk layanan aksesibilitas yang menargetkan Android 11, tanda FLAG_REQUEST_ACCESSIBILITY_BUTTON kini harus ditentukan dalam file metadata layanan aksesibilitas. Jika tidak, flag akan diabaikan.

Untuk mempelajari perubahan ini lebih lanjut, lihat Menyatakan penggunaan tombol aksesibilitas dalam file metadata.

RESOURCES_ARSC_COMPRESSED

ID Perubahan: 132742131

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Aplikasi yang menargetkan Android 11 (API level 30) tidak dapat diinstal jika berisi file terkompresi resources.arsc atau jika file ini tidak disejajarkan pada batas 4 byte.

Untuk mempelajari perubahan ini lebih lanjut, lihat File resource yang terkompresi.

RESTRICT_STORAGE_ACCESS_FRAMEWORK

ID Perubahan: 141600225

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Jika aplikasi Anda menargetkan Android 11 dan menggunakan Storage Access Framework (SAF), Anda tidak dapat lagi mengakses direktori tertentu menggunakan tindakan intent ACTION_OPEN_DOCUMENT dan ACTION_OPEN_DOCUMENT_TREE. Untuk mempelajari perubahan ini lebih lanjut, lihat bagian pembatasan akses Dokumen di halaman yang membahas tentang pembaruan privasi terkait penyimpanan di Android 11.

SELINUX_LATEST_CHANGES

ID Perubahan: 143539591

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Perubahan ini melindungi akses aplikasi ke domain SELinux untrusted_app_R-targetSDk. Ini merupakan salah satu perubahan mendasar dalam framework kompatibilitas yang memungkinkan aplikasi mengganti status perubahan lain yang dilindungi oleh targetSdkVersion tanpa mengubah targetSDKVersion aplikasinya. Karena itu, Anda tidak boleh menonaktifkan perubahan ini untuk aplikasi yang menargetkan Android 11, atau aplikasi tidak akan berfungsi.

Perubahan ini tidak berpengaruh pada aplikasi yang menggunakan ID pengguna bersama.

THROW_SECURITY_EXCEPTIONS

ID Perubahan: 147340954

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Sebelum Android 11, SecurityException hanya akan ditampilkan oleh setEnabled API untuk error izin. Di Android 11, hal ini tidak berlaku lagi, dan SecurityException dapat ditampilkan karena sejumlah alasan dan tidak ada satu alasan pun yang ditunjukkan ke pemanggil.

Untuk mempertahankan perilaku API yang ada, jika kegagalan izin lama atau kegagalan penerapan pembuat terjadi untuk aplikasi yang tidak menargetkan Android 11, pengecualian tersebut otomatis masuk ke IllegalStateException yang ada di sumber sebelum Android 11.

USE_SET_LOCATION_ENABLED

ID Perubahan: 117835097

Status default: Diaktifkan untuk aplikasi yang menargetkan Android 11 (API level 30) atau yang lebih tinggi.

Aplikasi admin yang menargetkan Android 11 tidak dapat lagi menggunakan DevicePolicyManager.setSecureSetting(ComponentName, String, String) untuk mengubah setelan Settings.Secure.LOCATION_MODE yang tidak digunakan lagi. Sekarang, sebaiknya gunakan DevicePolicyManager.setLocationEnabled(ComponentName, boolean).