page.title=Perubahan Perilaku page.keywords=preview,sdk,compatibility meta.tags="preview", "kompatibilitas" page.tags="preview", "developer preview" page.image=images/cards/card-n-changes_2x.png @jd:body
Selain fitur dan kemampuan baru, Android N juga menyertakan berbagai perubahan perilaku sistem dan API. Dokumen ini menyoroti beberapa perubahan utama yang harus dipahami dan diperhitungkan dalam aplikasi Anda.
Jika Anda sebelumnya telah mempublikasikan aplikasi untuk Android, ketahuilah bahwa aplikasi Anda mungkin akan terpengaruh oleh perubahan dalam platform ini.
Android N berisi perubahan perilaku sistem yang bertujuan meningkatkan daya tahan baterai perangkat, penggunaan RAM, dan kinerja aplikasi. Perubahan-perubahan ini bisa memengaruhi ketersediaan sumber daya sistem dan pemberitahuan sistem bagi aplikasi. Anda harus meninjau perubahan ini dan mengevaluasi cara menyesuaikan aplikasi Anda terhadap perubahan tersebut.
Diperkenalkan dalam Android 6.0 (API level 23), Doze meningkatkan daya tahan baterai dengan menangguhkan aktivitas CPU dan jaringan bila pengguna mencabut steker perangkat, diam, dan layar dinonaktifkan. Android N menyempurnakan Doze lebih jauh dengan menerapkan subset CPU dan pembatasan jaringan bila perangkat dicabut stekernya dan layar dinonaktifkan, namun tidak harus diam, misalnya, bila handset dibawa bepergian di saku pengguna.
Gambar 1. Ilustrasi tentang cara Doze menerapkan pembatasan aktivitas sistem tingkat pertama untuk meningkatkan daya tahan baterai.
Bila perangkat sedang menggunakan daya baterai, dan layar telah nonaktif selama jangka waktu tertentu, perangkat akan memasuki Doze dan menerapkan pembatasan subset pertama: Perangkat akan menutup akses jaringan aplikasi, serta menangguhkan pekerjaan dan sinkronisasi. Jika perangkat sedang diam selama jangka waktu tertentu setelah memasuki Doze, sistem akan menerapkan pembatasan Doze lainnya terhadap alarm {@link android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager}, GPS, dan pemindaian Wi-Fi. Tidak peduli apakah sebagian atau semua pembatasan Doze diterapkan, sistem akan membangunkan perangkat selama jeda pemeliharaan singkat, dan selama itu aplikasi diizinkan mengakses jaringan dan bisa mengeksekusi semua pekerjaan/sinkronisasi yang telah ditangguhkan.
Gambar 2. Ilustrasi tentang cara Doze menerapkan pembatasan aktivitas sistem tingkat kedua setelah perangkat diam selama jangka waktu tertentu.
Perhatikan, mengaktifkan layar atau memasang steker perangkat akan menyebabkan keluar dari Doze dan menghilangkan pembatasan pemrosesan ini. Perilaku tambahan ini tidak memengaruhi rekomendasi dan praktik terbaik dalam menyesuaikan aplikasi Anda dengan versi Doze sebelumnya yang diperkenalkan dalam Android 6.0 (API level 23), seperti yang dibahas di Mengoptimalkan untuk Doze dan App Standby. Anda tetap harus mengikuti rekomendasi itu, seperti menggunakan Google Cloud Messaging (GCM) untuk mengirim dan menerima pesan, dan mulai merencanakan pembaruan untuk mengakomodasi perilaku Doze tambahan.
Android N menghilangkan tiga siaran implisit untuk membantu mengoptimalkan penggunaan memori dan konsumsi daya. Perubahan ini penting karena siaran implisit sering memulai aplikasi yang telah didaftarkan untuk mendengarkannya di latar belakang. Menghilangkan siaran ini bisa sangat menguntungkan kinerja perangkat dan pengalaman pengguna.
Perangkat seluler sering mengalami perubahan konektivitas, seperti saat berpindah antara Wi-Fi dan data seluler. Saat ini, aplikasi bisa memantau perubahan dalam konektivitas dengan mendaftarkan suatu penerima untuk siaran implisit {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} dalam manifes mereka. Karena banyak aplikasi yang didaftarkan untuk menerima siaran ini, switch jaringan tunggal bisa menyebabkan semuanya aktif dan memproses siaran tersebut secara bersamaan.
Demikian pula, aplikasi bisa mendaftar untuk menerima siaran implisit {@link android.hardware.Camera#ACTION_NEW_PICTURE} dan {@link android.hardware.Camera#ACTION_NEW_VIDEO} dari aplikasi lain, seperti Kamera. Bila pengguna mengambil gambar dengan aplikasi Kamera, semua aplikasi ini akan aktif untuk memproses siaran.
Untuk meminimalkan masalah ini, Android N menerapkan optimisasi berikut:
Rilis Android mendatang mungkin akan menghilangkan siaran implisit tambahan, juga layanan latar belakang tak terikat. Karena itu, Anda harus menghindari atau menghilangkan dependensi terhadap penerima yang dideklarasikan manifes untuk siaran implisit, serta layanan latar belakang.
Kerangka kerja Android menyediakan beberapa solusi untuk mengurangi kebutuhan akan siaran implisit atau layanan latar belakang ini. Misalnya, {@link android.app.job.JobScheduler} API menyediakan mekanisme yang tangguh untuk menjadwalkan operasi jaringan bila syarat yang ditetapkan terpenuhi, misalnya koneksi ke suatu jaringan berbiaya tetap. Anda bahkan bisa menggunakan {@link android.app.job.JobScheduler} untuk bereaksi terhadap perubahan kepada penyedia konten.
Untuk informasi selengkapnya tentang perubahan perilaku ini dan cara menyesuaikan aplikasi Anda, lihat Optimalisasi Latar Belakang.
Android N menyertakan perubahan pada izin yang bisa memengaruhi aplikasi Anda, termasuk izin akun pengguna dan izin baru untuk menulis ke penyimpanan eksternal. Inilah rangkuman izin-izin yang telah berubah dalam preview:
Izin GET_ACCOUNTS sekarang tidak digunakan lagi. Sistem mengabaikan izin ini untuk aplikasi yang menargetkan Android N.
Android N menyertakan perubahan yang bertujuan meningkatkan kegunaan platform ini untuk pengguna dengan penglihatan yang kurang atau lemah. Perubahan ini secara umum tidak akan mengharuskan perubahan kode dalam aplikasi Anda, akan tetapi Anda harus meninjau fitur ini dan mengujinya dengan aplikasi Anda untuk menilai dampak potensial terhadap pengalaman pengguna.
Android N memungkinkan pengguna untuk mengatur Display size yang akan memperbesar atau memperkecil semua elemen pada layar, sehingga meningkatkan aksesibilitas perangkat bagi pengguna yang kurang melihat. Pengguna tidak bisa memperbesar layar melewati lebar layar minimum sw320dp, yang merupakan lebar Nexus 4, yakni ponsel ukuran sedang pada umumnya.
Gambar 3. Layar di sebelah kanan menampilkan efek penambahan Display size perangkat yang menjalankan citra sistem Android N.
Bila densitas perangkat berubah, sistem akan memberi tahu aplikasi yang sedang berjalan dengan cara berikut:
Sebagian besar aplikasi tidak perlu melakukan perubahan untuk mendukung fitur ini, asalkan aplikasi tersebut mengikuti praktik terbaik Android. Hal-hal tertentu yang harus diperiksa:
sw320dp
dan pastikan aplikasinya berjalan dengan semestinya.
Catatan: Jika Anda menyimpan sementara data yang bergantung pada konfigurasi, ada baiknya untuk menyertakan metadata yang relevan seperti ukuran layar atau densitas piksel yang sesuai untuk data tersebut. Menyimpan metadata ini memungkinkan Anda untuk memutuskan apakah Anda perlu memperbarui data cache setelah perubahan konfigurasi.
dp).
Android N menyertakan Vision Settings pada layar Welcome, di mana pengguna bisa menyiapkan pengaturan aksesibilitas berikut pada perangkat baru: Magnification gesture, Font size, Display size dan TalkBack. Perubahan ini menambah visibilitas bug yang terkait dengan berbagai pengaturan layar. Untuk menilai dampak dari fitur ini, Anda harus menguji aplikasi dengan mengaktifkan pengaturan ini. Anda bisa menemukan pengaturan ini pada Settings > Accessibility.
Android N menyertakan perubahan namespace untuk mencegah pemuatan API non-publik. Jika Anda menggunakan NDK, Anda hanya bisa menggunakan API publik dari platform Android. Menggunakan API non-publik dalam rilis Android resmi berikutnya bisa menyebabkan aplikasi mengalami crash.
Untuk memperingatkan Anda terhadap penggunaan API non-publik, aplikasi yang berjalan pada perangkat Android N akan menghasilkan kesalahan output logcat bila sebuah aplikasi memanggil API non-publik. Kesalahan ini juga ditampilkan pada layar perangkat berupa pesan untuk membantu meningkatkan kesadaran akan situasi ini. Anda harus meninjau kode aplikasi untuk menghilangkan penggunaan API platform non-publik dan secara saksama menguji aplikasi Anda menggunakan perangkat preview atau emulator.
Jika aplikasi Anda bergantung pada pustaka platform, lihat dokumentasi NDK untuk
perbaikan tipikal guna menggantikan API privat umum dengan padanan API publik.
Anda mungkin juga menautkan ke pustaka platform tanpa menyadarinya,
terutama jika aplikasi Anda menggunakan pustaka yang merupakan bagian dari platform ini (seperti
libpng), namun bukan bagian dari NDK. Dalam hal ini, pastikan
APK Anda berisi semua file .so yang ingin ditautkan.
Peringatan: Beberapa pustaka pihak ketiga mungkin menautkan ke API non-publik. Jika aplikasi Anda menggunakan pustaka ini, aplikasi Anda mungkin akan crash saat dijalankan pada rilis resmi Android berikutnya.
Aplikasi tidak boleh bergantung pada atau menggunakan pustaka bawaan yang tidak disertakan dalam NDK, karena bisa mengalami perubahan, atau dipindahkan dari satu rilis Android ke rilis lainnya. Peralihan dari OpenSSL ke BoringSSL merupakan satu contoh dari perubahan semacam ini. Selain itu, perbedaan perangkat juga bisa menawarkan tingkat kompatibilitas, karena tidak ada persyaratan kompatibilitas bagi pustaka platform yang tidak disertakan dalam NDK. Jika Anda harus mengakses pustaka non-NDK pada perangkat yang lebih lama, jadikan pemuatan bergantung pada level API Android.
Untuk membantu Anda mendiagnosis tipe masalah ini ada beberapa contoh kesalahan Java dan NDK yang mungkin Anda temui saat berusaha membangun aplikasi dengan Android N:
Contoh kesalahan Java:
java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
is not accessible for the namespace "classloader-namespace"
Contoh kesalahan NDK:
dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
Inilah beberapa perbaikan tipikal untuk aplikasi yang mengalami tipe kesalahan ini:
AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h> AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or JavaVM::AttachCurrentThread from <jni.h>.
#include <sys/system_properties.h>
Android N berisi perubahan untuk aplikasi yang menargetkan Android for Work, termasuk perubahan pada instalasi sertifikat, pengaturan ulang kata sandi, manajemen pengguna tambahan, dan akses ke identifier perangkat. Jika Anda membangun aplikasi untuk lingkungan Android for Work, Anda harus meninjau perubahan ini dan memodifikasi aplikasi sebagaimana mestinya.
DevicePolicyManager.setCertInstallerPackage(). Jika penginstal
belum diinstal, sistem akan melontarkan
IllegalArgumentException.
DevicePolicyManager.resetPassword() untuk menghapus kata sandi atau mengubah
kata sandi yang sudah ditetapkan. Admin perangkat tetap bisa menetapkan kata sandi, namun hanya
bila perangkat belum memiliki kata sandi, PIN, atau pola.
DISALLOW_MODIFY_ACCOUNTS diberlakukan.
DISALLOW_ADD_USER
secara otomatis ditetapkan. Ini mencegah pengguna membuat pengguna tambahan yang
tidak terkelola. Selain itu, metode CreateUser() dan
createAndInitial() tidak digunakan lagi; metode
DevicePolicyManager.createAndManageUser() baru telah menggantikannya.
DevicePolicyManagewr.getWifiMacAddress(). Jika Wi-Fi belum pernah
diaktifkan pada perangkat tersebut, metode ini akan mengembalikan nilai {@code null}.
Untuk informasi selengkapnya tentang perubahan pada Android for Work di Android N, lihat Pembaruan Android for Work.
Anda harus menguji aplikasi untuk memastikan perilaku ini tidak terjadi. Anda bisa melakukannya dengan menyebabkan suatu crash yang mirip saat mematikan aplikasi secara manual melalui DDMS.
Aplikasi yang menargetkan N dan yang di atasnya tidak secara otomatis dimatikan saat perubahan densitas; akan tetapi, aplikasi tersebut mungkin tetap merespons perubahan konfigurasi dengan buruk.