Perubahan perilaku: Aplikasi yang menargetkan Android 11

Seperti rilis sebelumnya, Android 11 menyertakan perubahan perilaku yang dapat memengaruhi aplikasi Anda. Perubahan perilaku berikut ini berlaku khusus bagi aplikasi yang menargetkan Android 11 atau yang lebih tinggi. Jika aplikasi Anda menetapkan targetSdkVersion ke 30, Anda harus memodifikasi aplikasi untuk mendukung perilaku ini dengan benar, jika berlaku.

Selain itu, pastikan Anda meninjau daftar perubahan perilaku yang memengaruhi semua aplikasi yang berjalan di Android 11.

Privasi

Android 11 memperkenalkan perubahan dan pembatasan untuk menyempurnakan privasi pengguna, termasuk hal berikut:

  • Penegakan penyimpanan terbatas: Akses ke direktori penyimpanan eksternal terbatas pada direktori khusus aplikasi dan jenis media tertentu yang telah dibuat aplikasi.
  • Reset otomatis izin: Jika pengguna tidak berinteraksi dengan aplikasi selama beberapa bulan, sistem akan secara otomatis mereset izin sensitif aplikasi.
  • Akses lokasi latar belakang: Pengguna harus diarahkan ke setelan sistem untuk memberikan izin akses lokasi latar belakang ke aplikasi.
  • Visibilitas paket: Saat aplikasi meminta daftar aplikasi terinstal di perangkat, daftar yang ditampilkan akan difilter.

Untuk mempelajari lebih lanjut, lihat halaman Privasi.

Keamanan

Pemberian tag pointer Heap

Detail perubahan

Nama Perubahan: NATIVE_HEAP_POINTER_TAGGING

ID Perubahan: 135754954

Cara mengganti status perubahan

Saat menguji kompatibilitas aplikasi dengan Android 11, Anda dapat mengaktifkan atau menonaktifkan perubahan ini menggunakan perintah ADB berikut:

adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME

Untuk mengetahui informasi selengkapnya tentang framework kompatibilitas dan mengganti status perubahan, lihat Menguji dan melakukan debug perubahan perilaku platform di aplikasi.

Pointer heap kini memiliki tag bukan nol dalam byte paling signifikan (MSB). Aplikasi yang menggunakan pointer secara tidak benar, termasuk yang memodifikasi MSB, sekarang dapat mengalami error atau mengalami masalah lain. Perubahan ini diperlukan untuk mendukung hardware di masa mendatang dengan Ekstensi Pemberian Tag Memori ARM (MTE) yang diaktifkan. Untuk mempelajari lebih lanjut, baca Pointer yang Diberi Tag.

Untuk menonaktifkan fitur ini, baca dokumentasi manifes allowNativeHeapPointerTagging.

Pembaruan pada toast

Toast kustom dari latar belakang telah diblokir

Demi keamanan dan mempertahankan pengalaman yang baik bagi pengguna, sistem akan memblokir toast yang berisi tampilan kustom jika toast tersebut dikirim dari latar belakang oleh aplikasi yang menargetkan Android 11 atau versi yang lebih tinggi. Perlu diketahui bahwa toast teks masih diizinkan; berikut ini adalah toast yang dibuat menggunakan Toast.makeText() yang tidak memanggil setView().

Namun, jika aplikasi Anda mencoba memposting toast yang berisi tampilan kustom dari latar belakang, sistem tidak akan menampilkan pesan kepada pengguna. Sebagai gantinya, sistem akan membuat log pesan berikut di logcat:

W/NotificationService: Blocking custom toast from package \
  <package> due to package not in the foreground

Callback toast

Jika Anda ingin mendapatkan notifikasi saat toast (teks atau kustom) muncul atau menghilang, gunakan metode addCallback() yang ditambahkan di Android 11.

Perubahan API toast teks

Aplikasi yang menargetkan Android 11 atau versi lebih tinggi akan melihat efek samping berikut untuk toast teks:

Konektivitas

Pembatasan akses baca ke database APN

Detail perubahan

Nama Perubahan: APN_READING_PERMISSION_CHANGE_ID

ID Perubahan: 124107808

Cara mengganti status perubahan

Saat menguji kompatibilitas aplikasi dengan Android 11, Anda dapat mengaktifkan atau menonaktifkan perubahan ini menggunakan perintah ADB berikut:

adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME

Untuk mengetahui informasi selengkapnya tentang framework kompatibilitas dan mengganti status perubahan, lihat Menguji dan melakukan debug perubahan perilaku platform di aplikasi.

Aplikasi yang menargetkan Android 11 kini memerlukan izin hak istimewa Manifest.permission.WRITE_APN_SETTINGS untuk membaca atau mengakses database APN penyedia Telepon. Mencoba mengakses database APN tanpa izin ini akan menyebabkan pengecualian keamanan.

Aksesibilitas

Mendeklarasikan interaksi dengan mesin TTS dalam file manifes

Adanya perubahan pada visibilitas paket mengakibatkan aplikasi yang menargetkan Android 11 dan berinteraksi dengan mesin text-to-speech (TTS) harus menambahkan <queries> berikut ke file manifesnya:

<queries>
  <intent>
    <action
       android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>

Mendeklarasikan penggunaan tombol aksesibilitas di file metadata

Detail perubahan

Nama Perubahan: REQUEST_ACCESSIBILITY_BUTTON_CHANGE

ID Perubahan: 136293963

Cara mengganti status perubahan

Saat menguji kompatibilitas aplikasi dengan Android 11, Anda dapat mengaktifkan atau menonaktifkan perubahan ini menggunakan perintah ADB berikut:

adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME

Untuk mengetahui informasi selengkapnya tentang framework kompatibilitas dan mengganti status perubahan, lihat Menguji dan melakukan debug perubahan perilaku platform di aplikasi.

Mulai Android 11, layanan aksesibilitas Anda tidak dapat membuat deklarasi waktu proses bahwa layanan memiliki asosiasi dengan tombol aksesibilitas sistem. Jika Anda menambahkan AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON ke properti flags objek AccessibilityServiceInfo, framework tidak akan meneruskan peristiwa callback tombol aksesibilitas ke layanan Anda.

Untuk menerima peristiwa callback aksesibilitas di layanan aksesibilitas Anda, gunakan file metadata layanan aksesibilitas untuk menyatakan keterkaitan layanan dengan tombol aksesibilitas. Sertakan nilai flagRequestAccessibilityButton dalam definisi atribut accessibilityFlags. Lokasi umum untuk file metadata layanan aksesibilitas adalah res/raw/accessibilityservice.xml.

Kamera

Tindakan intent media memerlukan kamera default sistem

Mulai di Android 11, hanya aplikasi kamera sistem yang terinstal secara default yang dapat merespons tindakan intent berikut:

Jika ada lebih dari satu aplikasi kamera sistem yang terinstal secara default, sistem akan menampilkan dialog bagi pengguna untuk memilih salah satunya. Jika Anda ingin aplikasi menggunakan aplikasi kamera pihak ketiga tertentu untuk mengambil foto atau video baginya, tetapkan intent ini sebagai intent eksplisit dengan menentukan nama paket atau komponen bagi intent tersebut.

Pemaketan dan penginstalan aplikasi

File resource terkompresi

Detail perubahan

Nama Perubahan: RESOURCES_ARSC_COMPRESSED

ID Perubahan: 132742131

Cara mengganti status perubahan

Saat menguji kompatibilitas aplikasi dengan Android 11, Anda dapat mengaktifkan atau menonaktifkan perubahan ini menggunakan perintah ADB berikut:

adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME

Untuk mengetahui informasi selengkapnya tentang framework kompatibilitas dan mengganti status perubahan, lihat Menguji dan melakukan debug perubahan perilaku platform di aplikasi.

Aplikasi yang menargetkan Android 11 (API level 30) atau versi yang lebih tinggi tidak dapat diinstal jika berisi file terkompresi resources.arsc atau jika file ini tidak selaras dengan batas 4 byte. File ini tidak dapat dipetakan memori oleh sistem jika salah satu kondisi ini ada. Tabel resource yang tidak dapat dipetakan memori harus dibaca menjadi buffer dalam RAM, sehingga menyebabkan tekanan memori yang tidak perlu pada sistem dan peningkatan penggunaan RAM pada perangkat.

Jika sebelumnya Anda menggunakan file resources.arsc yang dikompresi, cobalah strategi alternatif, seperti menyingkat resource aplikasi atau metode lain untuk menyingkat, meng-obfuscate, dan mengoptimalkan aplikasi Anda.

APK Signature Scheme v2 kini diwajibkan

Aplikasi yang menargetkan Android 11 (API level 30) yang saat ini hanya ditandatangani menggunakan APK Signature Scheme v1 kini juga harus ditandatangani menggunakan APK Signature Scheme v2 atau yang lebih baru. Pengguna tidak dapat menginstal atau mengupdate aplikasi yang hanya ditandatangani dengan APK Signature Scheme v1 di perangkat yang menjalankan Android 11.

Untuk memastikan bahwa aplikasi Anda ditandatangani dengan APK Signature Scheme v2 atau yang lebih tinggi, Anda dapat menggunakan Android Studio, atau alat apksigner pada command line.

Firebase

Firebase JobDispatcher dan GCMNetworkManager

Jika aplikasi Anda menargetkan API level 30 atau yang lebih tinggi, panggilan Firebase JobDispatcher dan GcmNetworkManager API akan dinonaktifkan di perangkat yang menjalankan Android 6.0 (API level 23) atau yang lebih tinggi. Untuk mengetahui informasi tentang migrasi, baca Melakukan migrasi dari Firebase JobDispatcher ke WorkManager dan Melakukan migrasi dari GCMNetworkManager ke WorkManager.

Pengenalan ucapan

Karena adanya perubahan pada visibilitas paket, aplikasi yang menargetkan Android 11 dan berinteraksi dengan layanan pengenalan ucapan perlu menambahkan elemen <queries> berikut ke file manifesnya:

<queries>
  <intent>
    <action
       android:name="android.speech.RecognitionService" />
  </intent>
</queries>

Perubahan callback untuk OnSharedPreferenceChangeListener

Detail perubahan

Nama Perubahan: CALLBACK_ON_CLEAR_CHANGE

ID Perubahan: 119147584

Cara mengganti status perubahan

Saat menguji kompatibilitas aplikasi dengan Android 11, Anda dapat mengaktifkan atau menonaktifkan perubahan ini menggunakan perintah ADB berikut:

adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME

Untuk mengetahui informasi selengkapnya tentang framework kompatibilitas dan mengganti status perubahan, lihat Menguji dan melakukan debug perubahan perilaku platform di aplikasi.

Untuk aplikasi yang menargetkan Android 11 (API level 30), setiap kali Editor.clear dipanggil, callback kini dilakukan ke OnSharedPreferenceChangeListener.onSharedPreferenceChanged dengan kunci null.

Pembatasan antarmuka non-SDK

Android 11 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 11, 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 11. Untuk mempelajari lebih lanjut tentang antarmuka non-SDK secara umum, baca Pembatasan antarmuka non-SDK.