Skip to content

Most visited

Recently visited

navigation

Perubahan Perilaku Android 7.0

Bersama fitur dan kemampuan baru, Android 7.0 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 akan terpengaruh oleh perubahan dalam platform ini.

Baterai dan Memori

Android 7.0 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 maksud implisit tertentu.

Istirahatkan

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 7.0 menyempurnakan lebih jauh 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.

Gambar 1. Ilustrasi tentang cara Istirahatkan 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 Istirahatkan dan menerapkan subset pembatasan pertama: Perangkat akan menutup akses jaringan aplikasi, serta menangguhkan tugas dan sinkronisasi. Jika perangkat sedang diam selama jangka waktu tertentu setelah memasuki Istirahatkan, sistem akan menerapkan pembatasan Istirahatkan selebihnya terhadap alarm PowerManager.WakeLock, AlarmManager, GPS, dan pemindaian Wi-Fi. Tidak peduli apakah sebagian atau semua pembatasan Istirahatkan diterapkan, sistem akan membangunkan perangkat selama jeda masa pemeliharaan singkat, dan selama itu aplikasi diizinkan mengakses jaringan dan bisa mengeksekusi semua tugas/sinkronisasi yang telah ditangguhkan.

Gambar 2. Ilustrasi tentang cara Istirahatkan menerapkan pembatasan aktivitas sistem level kedua setelah perangkat diam selama jangka waktu tertentu.

Perhatikan, mengaktifkan layar atau mencolokkan steker perangkat akan keluar dari Istirahatkan dan membuang pembatasan pemrosesan ini. Perilaku tambahan ini tidak memengaruhi saran 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 saran itu, seperti menggunakan Google Cloud Messaging (GCM) untuk mengirim dan menerima pesan, serta mulai merencanakan pembaruan guna mengakomodasi perilaku Istirahatkan tambahan.

Project Svelte: Optimalisasi Latar Belakang

Android 7.0 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 sering kali 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 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 ACTION_NEW_PICTURE dan 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 7.0 menerapkan optimalisasi berikut:

Jika aplikasi menggunakan maksud ini, Anda harus membuang dependensi padanya secepat mungkin agar bisa menargetkan perangkat Android 7.0 dengan benar. Kerangka kerja Android menyediakan sejumlah solusi untuk mengurangi kebutuhan akan siaran implisit ini. Misalnya, JobScheduler API menyediakan mekanisme yang tangguh untuk menjadwalkan operasi jaringan bila ketentuan yang ditetapkan, seperti koneksi ke jaringan yang berbiaya tetap, terpenuhi. Anda bahkan bisa menggunakan 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.

Perubahan Izin

Android 7.0 menyertakan perubahan pada izin yang bisa memengaruhi aplikasi Anda.

Perubahan izin sistem file

Guna meningkatkan keamanan file privat, direktori privat aplikasi yang menargetkan Android 7.0 atau yang lebih tinggi memiliki akses terbatas (0700). Setelan ini mencegah kebocoran metadata file privat, seperti ukuran atau eksistensinya. Perubahan izin ini memiliki beberapa efek samping:

Berbagi File Antar Aplikasi

Untuk aplikasi yang menargetkan Android 7.0, kerangka kerja Android menerapkan kebijakan StrictMode API yang melarang mengekspos URI file:// di luar aplikasi Anda. Jika sebuah maksud berisi URI file meninggalkan aplikasi Anda, aplikasi tersebut akan gagal dengan pengecualian FileUriExposedException.

Untuk berbagi file antar aplikasi, Anda harus mengirim URI content:// dan memberikan izin akses sementara pada URI. Cara termudah untuk memberikan izin ini adalah dengan menggunakan kelas FileProvider. Untuk informasi selengkapnya mengenai izin dan berbagi file, lihat Berbagi File.

Peningkatan Aksesibilitas

Android 7.0 menyertakan perubahan yang bertujuan meningkatkan kegunaan platform untuk pengguna dengan penglihatan yang rendah atau lemah. Perubahan ini umumnya tidak memerlukan perubahan kode dalam aplikasi, akan tetapi Anda harus memeriksa fitur ini dan mengujinya dengan aplikasi untuk menilai kemungkinan dampaknya terhadap pengalaman pengguna.

Zoom Layar

Android 7.0 memungkinkan pengguna menyetel Display sizeyang akan memperbesar atau memperkecil semua elemen pada layar, sehingga meningkatkan aksesibilitas perangkat bagi pengguna yang kurang melihat. Pengguna tidak bisa memperbesar layar melebihi 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 7.0.

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:

Vision Settings di Setup Wizard

Android 7.0 menyertakan Vision Settings di layar Sambutan, di mana pengguna bisa mempersiapkan 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.

Penautan Aplikasi NDK ke Pustaka Platform

Mulai Android 7.0, sistem mencegah aplikasi menautkan secara dinamis ke pustaka non-NDK, sehingga dapat menyebabkan aplikasi Anda mogok. Perubahan dalam perilaku ini bertujuan untuk menciptakan pengalaman aplikasi yang konsisten di semua pembaruan platform dan perangkat yang berbeda. Walaupun kode Anda mungkin tidak menautkan ke pustaka privat, mungkin saja pustaka statis pihak ketiga di aplikasi Anda bisa melakukannya. Karena itu, semua developer harus memeriksa untuk memastikan bahwa aplikasi mereka tidak mogok pada perangkat yang menjalankan Android 7.0. Jika aplikasi Anda menggunakan kode asli, Anda hanya boleh menggunakan NDK API publik.

Ada tiga cara yang bisa digunakan aplikasi Anda untuk mencoba mengakses API platform privat:

Aplikasi seharusnya tidak menggunakan pustaka asli yang tidak disertakan dalam NDK karena dapat berubah atau dihapus di antara versi-versi Android yang berbeda. Peralihan dari OpenSSL ke BoringSSL merupakan satu contoh dari perubahan semacam ini. Selain itu, karena tidak ada persyaratan kompatibilitas untuk pustaka platform yang tidak disertakan dalam NDK, perangkat yang berbeda mungkin menawarkan tingkat kompatibilitas yang berbeda pula.

Untuk mengurangi dampak pembatasan ini atas aplikasi yang dirilis saat ini, seperangkat pustaka yang melihat penggunaan signifikan—misalnya libandroid_runtime.so, libcutils.so, libcrypto.so, dan libssl.so—untuk sementara dapat diakses di N bagi aplikasi yang menargetkan API level 23 atau yang lebih rendah. Jika aplikasi Anda memuat salah satu pustaka ini, logcat akan menghasilkan peringatan dan toast akan muncul pada perangkat target untuk memberi tahu Anda. Jika melihat peringatan ini, Anda harus memperbarui aplikasi agar menyertakan salinan pustakanya sendiri atau hanya menggunakan NDK API publik. Rilis platform Android yang akan datang mungkin akan membatasi penggunaan pustaka privat bersama-sama dan menyebabkan aplikasi Anda mogok.

Semua aplikasi menghasilkan kesalahan waktu proses bila memanggil API yang bukan publik atau bisa diakses untuk sementara. Akibatnya System.loadLibrary dan dlopen(3) keduanya mengembalikan NULL, dan mungkin menyebabkan aplikasi Anda mogok. Anda harus memeriksa kode aplikasi untuk membuang penggunaan API platform privat dan secara saksama menguji aplikasi menggunakan perangkat pratinjau atau emulator. Jika tidak yakin apakah aplikasi menggunakan pustaka privat, Anda bisa memeriksa logcat untuk mengidentifikasi kesalahan waktu proses.

Tabel berikut menjelaskan perilaku yang seharusnya Anda lihat dari aplikasi, bergantung pada penggunaannya atas pustaka asli privat dan target API level (android:targetSdkVersion).

Pustaka Target API level Akses waktu proses lewat linker dinamis Perilaku N Developer Preview Perilaku Rilis N Final Perilaku platform Android mendatang
Publik NDK Apa saja Dapat diakses Bekerja sesuai harapan Bekerja sesuai harapan Bekerja sesuai harapan
Privat (pustaka privat yang dapat diakses sementara) 23 atau yang lebih rendah Untuk sementara dapat diakses Bekerja sesuai harapan, namun Anda menerima peringatan logcat dan pesan pada perangkat target. Bekerja sesuai harapan, namun Anda menerima peringatan logcat. Kesalahan waktu proses
Privat (pustaka privat yang dapat diakses sementara) 24 atau yang lebih tinggi Dibatasi Kesalahan waktu proses Kesalahan waktu proses Kesalahan waktu proses
Privat (lainnya) Apa saja Dibatasi Kesalahan waktu proses Kesalahan waktu proses Kesalahan waktu proses

Periksa apakah aplikasi Anda menggunakan pustaka privat

Untuk membantu Anda mengidentifikasi masalah saat memuat pustaka privat, logcat mungkin menghasilkan peringatan atau kesalahan waktu proses. Misalnya, jika aplikasi Anda menargetkan API level 23 atau yang lebih rendah, dan mencoba mengakses pustaka privat pada perangkat yang menjalankan Android 7.0, Anda mungkin akan melihat peringatan yang serupa dengan berikut ini:

03-21 17:07:51.502 31234 31234 W linker  : library "libandroid_runtime.so"
("/system/lib/libandroid_runtime.so") needed or dlopened by
"/data/app/com.popular-app.android-2/lib/arm/libapplib.so" is not accessible
for the namespace "classloader-namespace" - the access is temporarily granted
as a workaround for http://b/26394120

Peringatan logcat ini memberi tahu Anda pustaka mana yang sedang mencoba mengakses API platform privat, namun tidak akan menyebabkan aplikasi Anda mogok. Jika aplikasi menargetkan API level 24 atau yang lebih tinggi, bagaimanapun juga, logcat akan menghasilkan kesalahan waktu proses berikut ini dan aplikasi Anda mungkin akan mogok:

java.lang.UnsatisfiedLinkError: dlopen failed: library "libcutils.so"
("/system/lib/libcutils.so") needed or dlopened by
"/system/lib/libnativeloader.so" is not accessible for the namespace
"classloader-namespace"
  at java.lang.Runtime.loadLibrary0(Runtime.java:977)
  at java.lang.System.loadLibrary(System.java:1602)

Anda juga mungkin akan melihat keluaran logcat ini juga aplikasi Anda menggunakan pustaka pihak ketiga yang secara dinamis menautkan ke API platform privat. Alat bantu readelf di Android 7.0 DK memungkinkan Anda membuat daftar semua pustaka bersama yang ditautkan secara dinamis atas file .so yang diberikan dengan menjalankan perintah berikut:

aarch64-linux-android-readelf -dW libMyLibrary.so

Perbarui aplikasi Anda

Inilah beberapa langkah yang bisa Anda ambil untuk memperbaiki tipe kesalahan ini dan memastikan aplikasi Anda tidak mogok pada pembaruan platform di masa mendatang:

Android for Work

Android 7.0 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 membangun aplikasi untuk lingkungan Android for Work, Anda harus meninjau perubahan ini dan memodifikasi aplikasi sebagaimana mestinya.

Untuk informasi selengkapnya tentang perubahan pada Android for Work di Android 7.0, lihat Pembaruan Android for Work.

Retensi Anotasi

Android 7.0 memperbaiki bug yang membuat visibilitas anotasi menjadi terabaikan. Masalah membuat waktu proses bisa mengakses anotasi yang seharusnya tidak bisa dilakukannya. Anotasi ini termasuk:

Jika aplikasi Anda mengandalkan perilaku ini, tambahkan kebijakan retensi untuk anotasi yang harus tersedia pada waktu proses. Caranya dengan menggunakan @Retention(RetentionPolicy.RUNTIME).

Poin Penting Lainnya

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.