page.title=Perubahan Perilaku page.keywords=pratinjau,sdk,kompatibilitas meta.tags="preview", "compatibility" page.tags="preview", "developer preview" page.image=images/cards/card-n-changes_2x.png @jd:body
Bersama fitur dan kemampuan baru, Android N menyertakan berbagai macam perubahan sistem dan perubahan perilaku 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 dipengaruhi oleh perubahan dalam platform.
Android N menyertakan perubahan perilaku sistem yang bertujuan untuk meningkatkan daya tahan baterai perangkat dan mengurangi penggunaan RAM. Perubahan ini bisa memengaruhi akses aplikasi Anda ke sumber daya sistem, termasuk cara aplikasi Anda berinteraksi dengan aplikasi lain melalui intent implisit tertentu.
Diperkenalkan dalam Android 6.0 (API level 23), Istirahatkan meningkatkan daya tahan baterai dengan menangguhkan aktivitas CPU dan jaringan bila pengguna tidak mencabut perangkat, tidak bergerak, dan layar dinonaktifkan. Android N lebih menyempurnakan Istirahatkan dengan menerapkan subset CPU dan pembatasan jaringan bila perangkat dicabut dan layar dinonaktifkan, namun tidak harus diam, misalnya, bila handset dibawa bepergian di saku pengguna.
Bila perangkat sedang menggunakan daya baterai, dan layar telah nonaktif selama jangka waktu tertentu, perangkat akan memasuki Istirahatkan dan menerapkan subset pembatasan pertama: Perangkat akan menutup akses jaringan aplikasi, serta menangguhkan pekerjaan dan sinkronisasi. Jika perangkat sedang diam selama jangka waktu tertentu setelah memasuki Istirahatkan, sistem akan menerapkan pembatasan Istirahatkan selebihnya terhadap alarm {@link android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager}, GPS, dan pemindaian Wi-Fi. Tidak peduli apakah sebagian atau semua pembatasan Istirahatkan 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.
Perhatikan, mengaktifkan layar atau mencolokkan steker perangkat akan mengeluarkan dari Istirahatkan dan membuang pembatasan pemrosesan ini. Perilaku tambahan ini tidak memengaruhi rekomendasi dan praktik terbaik dalam menyesuaikan aplikasi Anda dengan versi Istirahatkan sebelumnya yang diperkenalkan dalam Android 6.0 (API level 23), seperti yang dibahas di Mengoptimalkan untuk Istirahatkan dan Aplikasi Siaga. Anda tetap harus mengikuti rekomendasi itu, seperti menggunakan Google Cloud Messaging (GCM) untuk mengirim dan menerima pesan, serta mulai merencanakan pembaruan untuk mengakomodasi perilaku Istirahatkan tambahan.
Android N membuang 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. Membuang siaran ini bisa sangat menguntungkan kinerja perangkat dan pengalaman pengguna.
Perangkat seluler seringkali 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, dalam Android versi sebelumnya, 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 optimalisasi berikut:
Jika aplikasi Anda menggunakan intent ini, Anda harus membuang dependensi padanya secepat mungkin agar Anda bisa menargetkan perangkat Android N dengan benar. Kerangka kerja Android menyediakan beberapa solusi untuk mengurangi kebutuhan akan siaran implisit ini. Misalnya, {@link android.app.job.JobScheduler} API menyediakan mekanisme yang tangguh untuk menjadwalkan operasi jaringan bila kondisi yang ditetapkan, seperti koneksi ke jaringan berbiaya tetap, terpenuhi. Anda juga dapat menggunakan {@link android.app.job.JobScheduler} untuk bereaksi terhadap perubahan pada penyedia materi.
Untuk informasi selengkapnya tentang optimalisasi latar belakang di N dan cara menyesuaikan aplikasi Anda, lihat Optimalisasi Latar Belakang.
Android N menyertakan perubahan pada izin yang bisa memengaruhi aplikasi Anda.
Guna meningkatkan keamanan file privat, direktori privat
aplikasi yang menargetkan Android N atau yang lebih tinggi memiliki akses terbatas (0700
).
Pengaturan ini mencegah kebocoran metadata dari file privat, seperti ukuran
atau eksistensi. Perubahan izin ini memiliki beberapa efek samping:
Catatan: Seperti sebelumnya, pembatasan ini tidak sepenuhnya diterapkan. Aplikasi mungkin masih memodifikasi izin ke direktori privat mereka menggunakan API asal atau {@link java.io.File File} API. Akan tetapi, kami sangat tidak menyarankan Anda meremehkan izin direktori privat.
file://
di luar domain paket dapat meninggalkan
penerima dengan jalur yang tidak bisa di akses. Karena itu, upaya untuk meneruskan URI
file://
akan memicu
FileUriExposedException
. Cara yang disarankan adalah
materi file privat menggunakan {@link
android.support.v4.content.FileProvider}.
Untuk aplikasi yang menargetkan Android N, kerangka kerja Android menerapkan kebijakan {@link android.os.StrictMode} API yang melarang mengekspos URI {@code file://} di luar aplikasi Anda. Jika sebuah intent berisi URI file meninggalkan aplikasi Anda, aplikasi tersebut akan gagal dengan pengecualian {@code FileUriExposedException}.
Untuk berbagi file antar aplikasi, Anda harus mengirim URI {@code content://} dan memberikan izin akses sementara pada URI. Cara termudah untuk memberikan izin ini adalah dengan menggunakan kelas {@link android.support.v4.content.FileProvider}. Untuk informasi selengkapnya mengenai izin dan berbagi file, lihat Berbagi File.
Android N menyertakan perubahan yang bertujuan meningkatkan kegunaan platform untuk pengguna dengan penglihatan yang rendah atau lemah. Perubahan ini umumnya tidak memerlukan perubahan kode dalam aplikasi Anda, akan tetapi Anda harus memeriksa fitur ini dan mengujinya dengan aplikasi untuk menilai kemungkinan dampaknya terhadap pengalaman pengguna.
Android N memungkinkan pengguna menyetel 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.
Bila kepadatan 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 aplikasi berjalan dengan semestinya.
Catatan: Catatan: Jika Anda meng-cache data yang bergantung pada konfigurasi, ada baiknya untuk menyertakan metadata yang relevan seperti ukuran layar atau kepadatan piksel yang sesuai untuk data tersebut. Menyimpan metadata ini memungkinkan Anda untuk memutuskan apakah Anda perlu segarkan data cache setelah perubahan konfigurasi.
dp
).
Android N menyertakan Vision Settings di layar Sambutan, di mana pengguna bisa menyiapkan setelan aksesibilitas berikut pada perangkat baru: Magnification gesture, Font size, Display size dan TalkBack. Perubahan ini meningkatkan visibilitas bug terkait dengan setelan layar yang berbeda. Untuk mengurangi dampak fitur ini, Anda harus menguji aplikasi dengan setelan ini diaktifkan. Anda bisa menemukannya pada Settings > Accessibility.
Android N menyertakan perubahan ruang nama untuk mencegah pemuatan API non-publik. Jika menggunakan NDK, Anda hanya boleh menggunakan API publik dari platform Android. Menggunakan API non-publik dalam rilis Android resmi berikutnya bisa menyebabkan aplikasi mogok.
Untuk memberi tahu Anda agar menggunakan API non-publik, aplikasi yang berjalan pada perangkat Android N akan menghasilkan kesalahan dalam keluaran logcat bila aplikasi memanggil API non-publik. Kesalahan ini juga ditampilkan di layar perangkat berupa pesan untuk membantu meningkatkan kepedulian terhadap situasi ini. Anda harus memeriksa kode aplikasi untuk membuang penggunaan API platform non-publik dan secara saksama menguji aplikasi Anda menggunakan perangkat pratinjau 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 itu, pastikan
APK Anda berisi semua file .so yang ingin ditautkan.
Perhatian: Beberapa pustaka pihak ketiga mungkin menautkan ke API non-publik. Jika menggunakan pustaka ini, aplikasi Anda bisa mogok 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, perangkat yang berbeda bisa menawarkan tingkat kompatibilitas yang berbeda, karena tidak ada persyaratan kompatibilitas untuk pustaka platform yang tidak disertakan dalam NDK. Jika Anda harus mengakses pustaka non-NDK pada perangkat yang lebih lama, jadikan pemuatan bergantung pada level Android API.
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 pemasangan sertifikat, penyetelan ulang 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 pemasang
belum dipasang, sistem akan melontarkan
IllegalArgumentException
.
DISALLOW_MODIFY_ACCOUNTS
diberlakukan.
DISALLOW_ADD_USER
secara otomatis akan ditetapkan. Ini mencegah pengguna membuat pengguna tambahan yang
tidak terkelola. Selain itu, CreateUser()
dan
createAndInitializeUser()
metode tidak digunakan lagi; metode
DevicePolicyManager.createAndManageUser()
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 Android for Work di Android N, lihat Pembaruan Android for Work.
Android N memperbaiki bug dengan visibilitas anotasi diabaikan. Masalah ini mengaktifkan waktu proses untuk mengakses anotasi yang seharusnya tidak bisa dilakukan. Anotasi ini termasuk:
Jika aplikasi Anda mengandalkan perilaku ini, tambahkan kebijakan retensi untuk anotasi yang harus tersedia di waktu proses. Caranya dengan menggunakan {@code @Retention(RetentionPolicy.RUNTIME)}.
Anda harus menguji aplikasi untuk memastikan perilaku ini tidak terjadi. Anda bisa melakukannya dengan menyebabkan suatu mogok yang identik saat mematikan aplikasi secara manual melalui DDMS.
Aplikasi yang menargetkan N dan yang di atasnya tidak secara otomatis dimatikan saat perubahan kepadatan; akan tetapi, aplikasi tersebut mungkin tetap merespons perubahan konfigurasi dengan buruk.