Saat diupload, APK harus memenuhi persyaratan level API target Google Play.
Mulai 31 Agustus 2024:
- Aplikasi baru dan update aplikasi harus menargetkan Android 14 (level API 34) atau yang lebih tinggi agar dapat dikirimkan ke Google Play; kecuali untuk aplikasi Wear OS dan Android TV, yang harus menargetkan Android 13 (level API 33) atau yang lebih tinggi.
- Aplikasi yang sudah ada harus menargetkan Android 13 (level API 33) atau yang lebih tinggi agar tetap tersedia bagi pengguna baru di perangkat yang menjalankan Android OS yang lebih tinggi dari level API target aplikasi Anda. Aplikasi yang menargetkan Android 12 (level API 31) atau yang lebih rendah (Android 10 (level API 29) atau yang lebih rendah untuk Wear OS dan Android 11 (level API 30) atau yang lebih rendah untuk Android TV), hanya akan tersedia di perangkat yang menjalankan Android OS yang sama atau lebih rendah dari level API target aplikasi Anda.
Anda akan dapat meminta perpanjangan waktu hingga 1 November 2024 jika memerlukan waktu tambahan untuk mengupdate aplikasi. Anda akan dapat mengakses formulir perpanjangan waktu aplikasi di Konsol Play dalam tahun ini.
Pengecualian untuk persyaratan ini mencakup:
- Aplikasi pribadi permanen yang dibatasi untuk pengguna di organisasi tertentu dan hanya ditujukan untuk distribusi internal.
- Aplikasi yang menargetkan Android Automotive OS, atau dikemas dengan APK yang menargetkan Android Automotive OS.
Mengapa harus menargetkan SDK yang lebih baru?
Setiap versi Android baru memperkenalkan perubahan yang menghadirkan peningkatan keamanan
dan performa serta memperbaiki pengalaman pengguna Android. Beberapa perubahan ini hanya
berlaku untuk aplikasi yang secara eksplisit mendeklarasikan dukungan melalui atribut manifes targetSdkVersion
(juga dikenal sebagai level API target).
Dengan mengonfigurasi aplikasi agar menargetkan API level terbaru, Anda memastikan pengguna dapat memperoleh manfaat dari peningkatan ini, sementara aplikasi Anda tetap dapat berjalan pada versi Android yang lebih lama. Dengan menargetkan level API terbaru, aplikasi Anda juga dapat memanfaatkan fitur terbaru platform untuk menyenangkan pengguna. Selain itu, mulai Android 10 (API level 29), pengguna akan melihat peringatan saat memulai aplikasi untuk kali pertama jika aplikasi menargetkan Android 5.1 (API level 22) atau yang lebih lama.
Dokumen ini menyoroti poin-poin penting yang perlu Anda ketahui dalam mengupdate API level target untuk memenuhi persyaratan Google Play. Lihat petunjuknya di bagian berikut, bergantung pada versi yang Anda migrasikan.
Bermigrasi dari Android 12 dan yang lebih baru (level API 31) ke versi yang lebih baru
Untuk mengupdate aplikasi agar menargetkan versi Android yang lebih baru, ikuti daftar perubahan perilaku yang relevan:
Bermigrasi dari Android 11 (API level 30) ke Android 12 (API level 31)
Keamanan dan Izin
- Bluetooth: Anda harus mengganti deklarasi untuk izin
BLUETOOTH
danBLUETOOTH_ADMIN
dengan izinBLUETOOTH_SCAN
,BLUETOOTH_ADVERTISE
, atauBLUETOOTH_CONNECT
. Anda tidak perlu lagi membuat permintaan izin runtimeLOCATION
untuk operasi Bluetooth. - Lokasi: Pengguna dapat meminta aplikasi untuk hanya mengambil informasi perkiraan
lokasi. Anda harus meminta izin
ACCESS_COARSE_LOCATION
setiap kali Anda memintaACCESS_FINE_LOCATION
.- Filter intent: Jika aplikasi Anda berisi aktivitas, layanan, atau penerima siaran yang menggunakan filter intent, Anda harus mendeklarasikan atribut android:exported secara eksplisit untuk komponen ini.
- Hibernasi: Aplikasi dapat dialihkan ke mode hibernasi jika tidak digunakan selama jangka waktu tertentu. Dalam mode hibernasi, izin runtime dan cache aplikasi direset, dan Anda tidak dapat menjalankan tugas atau pemberitahuan. Anda dapat memeriksa status hibernasi aplikasi.
- Mutabilitas intent tertunda: Anda harus menentukan mutabilitas setiap objek PendingIntent yang dibuat oleh aplikasi Anda.
Pengalaman Pengguna
- Notifikasi kustom: Notifikasi dengan tampilan konten kustom tidak akan
lagi menggunakan area notifikasi lengkap; sebagai gantinya, sistem akan menerapkan
template standar. Template ini memastikan bahwa notifikasi kustom memiliki
dekorasi yang sama seperti notifikasi lainnya di semua status. Perilaku ini
hampir sama dengan perilaku
Notification.DecoratedCustomViewStyle
. - Perubahan verifikasi Link Aplikasi Android: Saat menggunakan verifikasi Link Aplikasi Android, pastikan filter intent Anda menyertakan kategori BROWSABLE dan mendukung skema HTTPS.
Performa
Pembatasan peluncuran layanan latar depan: Untuk menargetkan Android 12 atau yang lebih tinggi, aplikasi tidak dapat memulai layanan latar depan saat berjalan di latar belakang, kecuali untuk beberapa kasus khusus. Jika aplikasi mencoba memulai layanan latar depan saat berjalan di latar belakang, akan terjadi pengecualian (kecuali untuk beberapa kasus khusus).
Pertimbangkan penggunaan WorkManager untuk menjadwalkan dan memulai tugas yang diprioritaskan saat aplikasi berjalan di latar belakang. Untuk menyelesaikan tindakan yang sensitif terhadap waktu yang diminta pengguna, mulai layanan latar depan dalam alarm yang tepat.
Pembatasan trampolin notifikasi: Saat pengguna mengetuk notifikasi, beberapa aplikasi akan merespons dengan meluncurkan komponen aplikasi yang memulai aktivitas yang dilihat dan berinteraksi dengan pengguna. Komponen aplikasi ini dikenal sebagai trampolin notifikasi.
Aplikasi tidak boleh memulai aktivitas dari layanan atau penerima siaran yang digunakan sebagai trampolin notifikasi. Setelah pengguna mengetuk notifikasi atau tombol tindakan dalam notifikasi, aplikasi Anda tidak dapat memanggil
startActivity()
di dalam layanan atau penerima siaran.
Lihat kumpulan lengkap perubahan yang memengaruhi aplikasi yang menargetkan Android 12 (level API 31).
Bermigrasi dari versi di bawah Android 11 (level API 30)
Pilih versi Android asal migrasi Anda:
Bermigrasi ke Android 5 (API level 21)
Lihat halaman Perubahan Perilaku yang terkait bagi setiap rilis berikut, untuk memastikan aplikasi Anda telah memperhitungkan perubahan yang diperkenalkan dalam rilis berikut:
Lanjutkan dengan mengikuti petunjuk di bagian berikutnya.
Bermigrasi ke Android 6 (API level 23)
Pertimbangan berikut berlaku untuk aplikasi yang menargetkan Android 6.0 dan versi platform yang lebih tinggi:
-
-
Izin berbahaya hanya diberikan selama runtime. Alur UI Anda harus menyediakan kemampuan untuk memberikan izin semacam ini.
-
Sedapat mungkin, pastikan aplikasi Anda agar siap menangani penolakan permintaan izin. Misalnya, jika pengguna menolak permintaan untuk mengakses GPS perangkat, pastikan aplikasi Anda memiliki cara lain untuk melanjutkan proses ini.
-
Untuk melihat daftar lengkap perubahan yang diperkenalkan pada Android 6.0 (API level 23), lihat halaman Perubahan Perilaku untuk versi platform tersebut.
Lanjutkan dengan mengikuti petunjuk di bagian berikutnya.
Bermigrasi ke Android 7 (API level 24)
Pertimbangan berikut berlaku untuk aplikasi yang menargetkan Android 7.0 dan versi platform yang lebih tinggi:
-
Istirahatkan dan Aplikasi Standby
Desain aplikasi untuk menangani perilaku yang dijelaskan dalam Mengoptimalkan Aplikasi untuk Mode Istirahatkan dan Aplikasi Standby, yang mencakup perubahan bertahap yang diperkenalkan pada beberapa rilis platform.
Saat perangkat berada dalam mode Istirahatkan dan Aplikasi Standby, sistem akan berperilaku sebagai berikut:
- Membatasi akses jaringan
- Menunda alarm, sinkronisasi, dan tugas
- Membatasi pemindaian Wi-Fi dan GPS
- Membatasi pesan Firebase Cloud Messaging dengan prioritas normal.
-
Perubahan Izin
- Sistem membatasi akses ke direktori pribadi aplikasi.
-
Mengekspos URI
file://
di luar aplikasi akan memicuFileUriExposedException
. Jika perlu berbagi file di luar aplikasi, implementasikanFileProvider
-
Sistem melarang penautan ke library non-NDK.
Untuk melihat daftar lengkap perubahan yang diperkenalkan pada Android 7.0 (API level 24), lihat halaman Perubahan Perilaku untuk versi platform tersebut.
Lanjutkan dengan mengikuti petunjuk di bagian berikutnya.
Bermigrasi ke Android 8 (API level 26)
Pertimbangan berikut berlaku untuk aplikasi yang menargetkan Android 8.0 dan versi platform yang lebih tinggi:
-
Batas Eksekusi Latar Belakang
-
Sistem membatasi layanan untuk aplikasi yang tidak berjalan di latar depan.
-
startService()
kini akan menampilkan pengecualian saat aplikasi mencoba memanggilnya, sementarastartService()
dilarang. -
Untuk memulai layanan latar depan, aplikasi harus menggunakan
startForeground()
danstartForegroundService()
. - Tinjau dengan cermat perubahan yang dibuat pada JobScheduler API, seperti yang didokumentasikan di halaman Perubahan Perilaku Android 8.0 (API level 26).
- Firebase Cloud Messaging memerlukan SDK layanan Google Play versi 10.2.1, atau yang lebih tinggi.
- Saat menggunakan Firebase Cloud Messaging, pengiriman pesan akan mematuhi batas eksekusi latar belakang. Jika pekerjaan di latar belakang diperlukan setelah pesan diterima, seperti untuk menjalankan sinkronisasi data latar belakang, aplikasi Anda harus menjadwalkan tugas menggunakan Firebase Job Dispatcher atau JobIntentService. Untuk mengetahui informasi selengkapnya, lihat dokumentasi Firebase Cloud Messaging.
-
-
Siaran implisit
-
Siaran implisit dibatasi. Untuk mengetahui informasi tentang menangani peristiwa latar belakang, baca dokumentasi untuk
JobScheduler
API.
-
Siaran implisit dibatasi. Untuk mengetahui informasi tentang menangani peristiwa latar belakang, baca dokumentasi untuk
-
Batas Lokasi Latar Belakang
-
Aplikasi yang berjalan di latar belakang memiliki akses terbatas ke data lokasi.
- Di perangkat yang menjalankan layanan Google Play, gunakan penyedia lokasi gabungan untuk mendapatkan pembaruan lokasi secara berkala.
-
Aplikasi yang berjalan di latar belakang memiliki akses terbatas ke data lokasi.
-
Sistem membatasi layanan untuk aplikasi yang tidak berjalan di latar depan.
-
Saluran Notifikasi
- Anda harus menentukan properti interupsi notifikasi untuk setiap saluran.
- Anda harus menetapkan notifikasi ke saluran agar notifikasi dapat ditampilkan.
-
Versi platform ini mendukung
NotificationCompat.Builder
.
-
Privasi
- ANDROID_ID disesuaikan lingkupnya per kunci penandatanganan aplikasi.
Untuk melihat daftar lengkap perubahan yang diperkenalkan pada Android 8.0 (API level 26), lihat halaman Perubahan Perilaku untuk versi platform tersebut.
Bermigrasi dari Android 8 (API 26) ke Android 9 (API 28)
-
Pengelolaan Daya
- Bucket Aplikasi Standby menetapkan pembatasan latar belakang baru berdasarkan interaksi aplikasi, seperti tugas yang ditangguhkan, alarm, dan kuota pada pesan berprioritas tinggi
- Peningkatan penghemat baterai meningkatkan batasan untuk aplikasi pada mode aplikasi standby
-
Izin layanan latar depan
- Perlu meminta izin normal
FOREGROUND_SERVICE
(bukan izin runtime)
- Perlu meminta izin normal
-
Perubahan privasi
- Akses terbatas ke sensor latar belakang
- Akses terbatas ke log panggilan, kini ada di grup izin
CALL_LOG
- Akses terbatas ke nomor telepon, memerlukan
izin
READ_CALL_LOG
- Akses terbatas ke informasi Wi-Fi
Untuk melihat daftar lengkap perubahan yang diperkenalkan pada Android 9.0 (API level 28), lihat perubahan perilaku.
Bermigrasi dari Android 9 (level API 28) ke Android 10 (level API 29)
-
Notifikasi
dengan intent layar penuh
-
Perlu meminta izin normal
USE_FULL_SCREEN_INTENT
(bukan izin runtime).
-
Perlu meminta izin normal
-
Dukungan untuk perangkat foldable dan
perangkat layar besar
-
Beberapa aktivitas kini dapat berada dalam status "dilanjutkan" secara bersamaan, tetapi hanya satu aktivitas yang benar-benar memiliki fokus.
-
Perubahan ini memengaruhi perilaku
onResume()
danonPause()
. -
Konsep siklus proses baru dari "dilanjutkan teratas" yang dapat dideteksi
dengan berlangganan ke
onTopResumedActivityChanged()
.- Hanya satu aktivitas yang dapat menjadi "dilanjutkan teratas".
-
Perubahan ini memengaruhi perilaku
-
Saat
resizeableActivity
disetel kefalse
, aplikasi juga dapat menentukanminAspectRatio
, yang otomatis menjadikan aplikasi tersebut memiliki tampilan lebar pada rasio lebar tinggi yang lebih sempit.
-
Beberapa aktivitas kini dapat berada dalam status "dilanjutkan" secara bersamaan, tetapi hanya satu aktivitas yang benar-benar memiliki fokus.
-
Perubahan privasi
-
Penyimpanan terbatas
- Akses penyimpanan eksternal hanya terbatas untuk direktori khusus aplikasi dan untuk jenis media tertentu yang telah dibuat oleh aplikasi.
-
Akses terbatas ke lokasi saat aplikasi berada di latar belakang,
yang memerlukan
izin
ACCESS_BACKGROUND_LOCATION
. - Akses terbatas ke ID yang tidak dapat direset seperti IMEI dan nomor seri.
-
Akses terbatas ke informasi aktivitas fisik seperti
jumlah langkah pengguna, yang memerlukan
izin
ACTIVITY_RECOGNITION
. -
Akses terbatas ke
beberapa
API telepon, Bluetooth, dan Wi-Fi, yang memerlukan
izin
ACCESS_FINE_LOCATION
. -
Akses terbatas ke setelan Wi-Fi
- Aplikasi tidak dapat lagi mengaktifkan atau menonaktifkan Wi-Fi secara langsung dan perlu melakukannya menggunakan panel setelan.
-
Batasan saat memulai koneksi ke jaringan Wi-Fi,
yang mengharuskan penggunaan
WifiNetworkSpecifier
atauWifiNetworkSuggestion
.
-
Penyimpanan terbatas
Bermigrasi dari Android 10 (API level 29) ke Android 11 (API level 30)
-
Privasi
- Penerapan penyimpanan terbatas: Aplikasi harus menerapkan model penyimpanan terbatas yang digunakan untuk menyimpan serta mengakses jenis file khusus aplikasi, media, dan jenis file lainnya menggunakan lokasi khusus.
- Reset otomatis izin: Jika pengguna tidak berinteraksi dengan aplikasi selama beberapa bulan, sistem akan otomatis mereset izin sensitif aplikasi. Hal ini tidak akan memengaruhi sebagian besar aplikasi. Jika aplikasi utamanya berfungsi di latar belakang tanpa interaksi pengguna, Anda dapat mempertimbangkan untuk meminta pengguna menonaktifkan reset otomatis.
- Akses lokasi latar belakang: Aplikasi harus meminta izin akses lokasi latar depan dan latar belakang secara terpisah. Memberikan izin akses lokasi latar belakang hanya dapat dilakukan di setelan aplikasi, bukan dialog izin runtime.
-
Visibilitas Paket: Saat aplikasi mengajukan kueri
terkait daftar layanan dan aplikasi terinstal di perangkat, daftar yang ditampilkan akan difilter.
- Jika menggunakan layanan Text-to-speech atau Pengenalan Ucapan, Anda perlu menambahkan elemen kueri untuk layanan ke file manifes.
-
Keamanan
- File `resource.arsc` terkompresi tidak lagi didukung
- APK Signature Scheme v2 kini diwajibkan. Untuk menjaga kompatibilitas mundur, developer juga harus terus melakukan penandatanganan dengan APK Signature Scheme v1.
- Pembatasan antarmuka non-SDK. Sebaiknya Anda tidak menggunakan antarmuka non-SDK untuk aplikasi yang menargetkan API level 30, karena beberapa antarmuka non-SDK ini kini diblokir. Lihat Antarmuka non-SDK yang kini diblokir di Android 11 untuk mengetahui daftar selengkapnya.
Untuk mengetahui daftar lengkap perubahan yang diperkenalkan di Android 11 (API level 30), lihat halaman Perubahan Perilaku.
Lanjutkan untuk mengupdate ke API 31 dengan mengikuti petunjuk di bagian sebelumnya.
Memodernisasi aplikasi
Saat mengupdate API level target untuk aplikasi, sebaiknya gunakan fitur platform terbaru untuk memodernkan aplikasi Anda demi kepuasan pengguna.
- Pertimbangkan untuk menggunakan CameraX, yang masih dalam versi Beta, untuk memaksimalkan penggunaan kamera.
- Gunakan komponen Jetpack untuk membantu Anda mengikuti praktik terbaik, menghindari penulisan kode boilerplate, dan menyederhanakan tugas kompleks sehingga Anda dapat fokus pada kode yang perlu ditangani.
- Gunakan Kotlin untuk menulis aplikasi yang lebih baik dengan lebih cepat, dan dengan kode yang lebih sedikit.
- Pastikan Anda mengikuti persyaratan dan praktik terbaik privasi.
- Tambahkan dukungan tema gelap ke aplikasi Anda.
- Tambahkan dukungan navigasi gestur ke aplikasi Anda.
- Migrasikan aplikasi Anda dari Google Cloud Messaging (GCM) ke versi terbaru Firebase Cloud Messaging.
- Manfaatkan pengelolaan jendela tingkat lanjut.
- Dukung rasio aspek yang lebih besar (di atas 16:9) untuk memanfaatkan kemajuan hardware terbaru. Pastikan aplikasi Anda dapat menyesuaikan ukuran untuk mengisi ruang layar yang tersedia. Hanya deklarasikan rasio aspek maksimal sebagai upaya terakhir. Untuk mengetahui informasi selengkapnya tentang rasio aspek maksimum, baca Mendeklarasikan Dukungan Layar Terbatas.
- Tambahkan dukungan multi-aplikasi untuk membantu aplikasi Anda meningkatkan produktivitas, dan untuk mengelola beberapa layar.
- Jika pengalaman aplikasi yang bagus dan diminimalkan dapat memperbaiki pengalaman pengguna,
tambahkan dukungan untuk Picture-in-Picture.
- Lakukan pengoptimalan untuk perangkat dengan potongan layar.
- Jangan mengasumsikan tinggi status bar. Sebagai gantinya, gunakan
WindowInsets
danView.OnApplyWindowInsetsListener
. Untuk mempelajari lebih lanjut, lihat video droidcon NYC 2017. untuk mendapatkan penjelasan. - Jangan berasumsi bahwa aplikasi menempati seluruh jendela. Sebagai gantinya, konfirmasi
lokasinya menggunakan
View.getLocationInWindow()
, bukanView.getLocationOnScreen()
. * Saat menanganiMotionEvent
, gunakanMotionEvent.getX()
danMotionEvent.getY()
, bukanMotionEvent.getRawX()
,MotionEvent.getRawY()
.
Memeriksa serta mengupdate SDK dan library
Pastikan dependensi SDK pihak ketiga Anda mendukung API 31: Beberapa penyedia SDK memublikasikannya dalam manifes mereka, sedangkan yang lainnya memerlukan penyelidikan tambahan. Jika Anda menggunakan SDK yang tidak mendukung API 31, sebaiknya hubungi penyedia SDK segera untuk mengatasi masalah tersebut.
Selain itu, perlu diperhatikan bahwa targetSdkVersion
aplikasi atau game Anda dapat membatasi
akses ke library platform Android pribadi; lihat Penautan Aplikasi NDK ke Library
Platform untuk mengetahui detailnya.
Anda juga harus memverifikasi setiap batasan yang mungkin ada dalam versi
Android Support Library yang Anda gunakan. Seperti biasa, Anda harus memastikan
kompatibilitas antara versi utama Android Support Library dan
compileSdkVersion
aplikasi Anda.
Sebaiknya pilih targetSdkVersion
yang lebih kecil dari atau sama dengan
versi utama Support Library. Kami mengimbau Anda untuk melakukan update ke Support Library terbaru yang kompatibel agar dapat memanfaatkan fitur kompatibilitas dan perbaikan bug terbaru.
Menguji aplikasi
Setelah memperbarui level dan fitur API aplikasi sebagaimana mestinya, Anda harus menguji beberapa kasus penggunaan inti. Saran berikut tidak lengkap, tetapi dimaksudkan untuk memandu proses pengujian. Sebaiknya uji:
- Apakah aplikasi Anda dikompilasi ke API 29 tanpa error atau peringatan.
Bahwa aplikasi Anda memiliki strategi untuk kasus ketika pengguna menolak permintaan izin, dan meminta pengguna untuk memberikan izin. Untuk melakukannya:
- Buka layar Info Aplikasi pada aplikasi Anda, dan nonaktifkan setiap izin.
- Buka aplikasi dan pastikan tidak ada error.
- Lakukan pengujian kasus penggunaan inti dan pastikan izin yang diperlukan dimintakan ulang.
Menangani mode Istirahatkan dengan hasil yang diharapkan dan tanpa error.
- Dengan adb, atur perangkat pengujian ke dalam mode Istirahatkan saat aplikasi sedang berjalan.
- Uji setiap kasus penggunaan yang memicu pesan Firebase Cloud Messaging.
- Uji setiap kasus penggunaan yang menggunakan Alarm atau Tugas.
- Hilangkan semua dependensi pada layanan latar belakang.
- Setel aplikasi ke mode Aplikasi Standby
- Uji setiap kasus penggunaan yang memicu pesan Firebase Cloud Messaging.
- Uji setiap kasus penggunaan yang menggunakan Alarm.
- Dengan adb, atur perangkat pengujian ke dalam mode Istirahatkan saat aplikasi sedang berjalan.
Menangani foto/video baru yang diambil
- Pastikan aplikasi Anda menangani siaran
ACTION_NEW_PICTURE
danACTION_NEW_VIDEO
yang dibatasi dengan benar (yaitu, dipindahkan ke tugas JobScheduler). - Pastikan setiap kasus penggunaan penting yang bergantung pada peristiwa tersebut tetap berfungsi.
- Pastikan aplikasi Anda menangani siaran
Menangani berbagi file ke aplikasi lain - Uji setiap kasus penggunaan yang berbagi data file dengan aplikasi lain (bahkan aplikasi lain dari developer yang sama)
- Uji bahwa konten terlihat di aplikasi lain dan tidak memicu error.
Informasi lebih lanjut
Ikut serta dalam langganan email di Konsol Google Play agar kami dapat mengirimkan informasi terbaru dan pengumuman penting dari Android dan Google Play, termasuk newsletter partner bulanan kami.