Android 7.0 untuk Developer

Android 7.0 Nougat memperkenalkan beragam fitur baru dan kemampuan bagi pengguna dan developer. Dokumen ini menyoroti hal-hal baru untuk developer.

Pastikan memeriksa perubahan perilaku Android 7.0 untuk mengetahui tentang bidang apa saja pada aplikasi Anda yang mungkin terpengaruh oleh perubahan platform.

Untuk mengetahui selengkapnya tentang fitur konsumen pada Android 7.0, kunjungi www.android.com.

Dukungan Multi-Jendela

Di Android 7.0, kami memperkenalkan fitur multitasking baru dan yang banyak diminta dalam platform — dukungan multi-jendela.

Pengguna sekarang bisa membuka dua aplikasi sekaligus di layar.

  • Pada ponsel dan tablet yang menjalankan Android 7.0, pengguna bisa menjalankan dua aplikasi secara berdampingan atau satu aplikasi di atas yang lain dalam mode layar terbagi. Pengguna bisa mengubah ukuran aplikasi dengan menyeret pembagi di antara keduanya.
  • Pada perangkat Android TV, aplikasi bisa menempatkan dirinya sendiri dalam mode gambar-dalam-gambar, sehingga aplikasi bisa terus menampilkan materi sementara pengguna menjelajahi atau berinteraksi dengan aplikasi lain.

Gambar 1. Aplikasi yang dijalankan dalam mode layar terbagi.

Khususnya pada tablet dan perangkat yang berlayar lebih besar lainnya, dukungan multi-jendela memberi Anda cara baru untuk melibatkan pengguna. Anda bahkan bisa mengaktifkan fitur seret-dan-letakkan di aplikasi untuk memudahkan pengguna menyeret materi ke dan dari aplikasi — cara bagus untuk menyempurnakan pengalaman pengguna Anda.

Tidak sulit menambahkan dukungan multi-jendela ke aplikasi Anda dan mengonfigurasi cara menangani tampilan multi-jendela. Misalnya, Anda bisa menetapkan dimensi minimum yang diizinkan aktivitas, sehingga mencegah pengguna mengubah ukuran aktivitas di bawah ukuran itu. Anda juga bisa menonaktifkan tampilan multi-jendela untuk aplikasi, yang akan memastikan sistem hanya menampilkan aplikasi dalam mode layar penuh.

Untuk informasi selengkapnya, lihat dokumentasi developer Dukungan Multi-Jendela.

Penyempurnaan Notifikasi

Di Android 7.0 kami telah mengubah desain notifikasi agar lebih mudah dan lebih cepat digunakan. Beberapa perubahan tersebut antara lain:

  • Pembaruan template: Kami telah memperbarui template notifikasi agar lebih menekankan citra pahlawan dan avatar. Developer akan dapat memanfaatkan template baru dengan penyesuaian kode yang minimal.
  • Penyesuaian gaya perpesanan: Anda bisa menyesuaikan lebih banyak label antarmuka pengguna yang berkaitan dengan notifikasi menggunakan kelas MessagingStyle. Anda bisa mengonfigurasi pesan, judul percakapan, dan tampilan materi.
  • Bundel notifikasi: Sistem bisa mengelompokkan pesan, misalnya menurut topik pesan, dan menampilkan grup pesan tersebut. Seorang pengguna bisa bertindak, misalnya Tutup atau Arsipkan, atas pesan yang ditampilkan. Jika sudah mengimplementasikan notifikasi untuk Android Wear, Anda akan terbiasa dengan model ini.
  • Balasan langsung: Untuk aplikasi komunikasi real-time, sistem Android mendukung balasan inline sehingga pengguna bisa dengan cepat membalas SMS atau pesan teks secara langsung dari dalam antarmuka notifikasi.
  • Tampilan khusus: Dua API baru memungkinkan Anda memanfaatkan dekorasi sistem, misalnya header notifikasi dan tindakan, saat menggunakan tampilan khusus dalam notifikasi.

Gambar 2. Bundel notifikasi dan balasan langsung.

Untuk mengetahui cara mengimplementasikan fitur-fitur baru ini, lihat panduan Notifikasi.

Kompilasi JIT/AOT yang dipandu profil

Di Android 7.0, kami telah menambahkan compiler Just in Time (JIT) dengan pembuatan profil kode ke ART, yang memungkinkannya terus meningkatkan kinerja aplikasi Android saat dijalankan. Compiler JIT melengkapi compiler Ahead of Time (AOT) saat ini pada ART dan membantu memperbaiki kinerja waktu proses, menghemat ruang storage, dan mempercepat pembaruan aplikasi serta pemutakhiran sistem.

Kompilasi yang dipandu profil memungkinkan ART mengelola kompilasi AOT/JIT untuk setiap aplikasi sesuai dengan penggunaan sebenarnya, serta kondisi pada perangkat. Misalnya, ART menyimpan profil setiap metode terbaik aplikasi dan bisa melakukan kompilasi lebih awal serta menyimpan sementara metode-metode tersebut di cache untuk mendapatkan kinerja terbaik. Hal ini membuat bagian lain dari aplikasi dibiarkan tidak dikompilasi hingga benar-benar digunakan.

Di samping meningkatkan kinerja bagian-bagian penting aplikasi, kompilasi yang dipandu profil membantu mengurangi footprint RAM keseluruhan aplikasi, termasuk biner terkait. Fitur ini terutama penting pada perangkat dengan memori minim.

ART mengelola kompilasi yang dipandu profil dengan cara yang meminimalkan dampak terhadap baterai perangkat. ART melakukan prakompilasi hanya bila perangkat sedang diam dan mengisi daya, sehingga menghemat waktu dan baterai dengan melakukan pekerjaan tersebut di awal.

Jalur Cepat untuk Pasang Aplikasi

Salah satu manfaat paling nyata dari compiler JIT pada ART adalah kecepatan pemasangan aplikasi dan pemutakhiran sistem. Bahkan aplikasi besar yang membutuhkan beberapa menit untuk dioptimalkan dan dipasang di Android 6.0 sekarang bisa dipasang hanya dalam hitungan detik. Pembaruan sistem juga lebih cepat, karena tidak ada lagi langkah optimalisasi.

Istirahatkan Kapan Saja...

Android 6.0 memperkenalkan fitur Istirahatkan, yaitu mode sistem yang menghemat baterai dengan menangguhkan aktivitas CPU dan jaringan di aplikasi bila perangkat sedang diam, misalnya saat diletakkan di atas meja atau dalam panel samping.

Kini di Android 7.0, Istirahatkan mengambil langkah lebih jauh dan menghemat baterai kapan saja. Setiap kali layar mati selama jangka waktu tertentu dan perangkat tidak terhubung ke sumber daya, Istirahatkan akan menerapkan subset pembatasan CPU dan jaringan yang sudah familier pada aplikasi. Ini berarti pengguna bisa menghemat daya baterai meskipun saat membawa perangkat mereka di saku

Gambar 3. Istirahatkan sekarang menerapkan pembatasan untuk meningkatkan daya tahan baterai bahkan saat perangkat sedang tidak diam.

Tidak lama setelah layar dimatikan saat perangkat menggunakan daya baterai, Istirahatkan akan membatasi akses jaringan serta menangguhkan tugas dan sinkronisasi. Selama jeda masa pemeliharaan, aplikasi diizinkan mengakses jaringan dan menjalankan semua tugas/sinkronisasi yang ditangguhkan. Menyalakan layar atau mencolokkan perangkat akan mengeluarkan perangkat dari Istirahatkan.

Bila perangkat dalam kondisi diam lagi, dengan layar mati dan menggunakan daya baterai selama jangka waktu tertentu, Istirahatkan akan menerapkan pembatasan CPU dan jaringan pada PowerManager.WakeLock, alarm AlarmManager, dan pemindaian GPS/Wi-Fi.

Praktik terbaik untuk menyesuaikan aplikasi Anda dengan Istirahatkan adalah sama, baik perangkat sedang bergerak maupun diam, jadi jika Anda sudah memperbarui aplikasi untuk menjalankan Istirahatkan dengan lancar, berarti Anda sudah siap. Jika belum, mulailah menyesuaikan aplikasi Anda dengan Istirahatkan sekarang juga.

Project Svelte: Optimalisasi Latar Belakang

Project Svelte merupakan upaya berkelanjutan untuk meminimalkan penggunaan RAM oleh sistem dan aplikasi di semua jenis perangkat Android dalam ekosistem. Di Android 7.0, Project Svelte berfokus pada optimalisasi cara aplikasi berjalan di latar belakang.

Proses latar belakang merupakan bagian terpenting dari sebagian besar aplikasi. Bila ditangani dengan benar, pemrosesan ini bisa membuat pengalaman pengguna jadi mengagumkan — segera, cepat, dan sesuai konteks. Bila tidak ditangani dengan benar, proses latar belakang bisa menguras RAM (dan baterai) yang sebenarnya tidak perlu serta memengaruhi kinerja sistem untuk aplikasi lain.

Sejak Android 5.0, JobScheduler telah menjadi cara yang disukai untuk melakukan pekerjaan latar belakang dengan cara yang baik bagi pengguna. Aplikasi bisa menjadwalkan tugas sekaligus memungkinkan sistem mengoptimalkan berdasarkan kondisi memori, daya, dan konektivitas. JobScheduler menawarkan kontrol serta kemudahan, dan kami ingin semua aplikasi menggunakannya.

Opsi baik lainnya adalah GCMNetworkManager, bagian dari Google Play Services, yang menawarkan penjadwalan tugas serupa dengan kompatibilitas pada semua versi lawas Android.

Kami terus memperluas JobScheduler dan GCMNetworkManager untuk memenuhi lebih banyak kasus penggunaan Anda — misalnya, di Android 7.0 Anda sekarang bisa menjadwalkan pekerjaan latar belakang berdasarkan perubahan di Content Providers. Pada saat yang sama kami mulai menghilangkan beberapa pola lama yang bisa mengurangi kinerja sistem, terutama pada perangkat yang minim memori.

Di Android 7.0 kami membuang tiga siaran implisit yang umum digunakan — CONNECTIVITY_ACTION, ACTION_NEW_PICTURE, dan ACTION_NEW_VIDEO — karena ketiganya bisa mengaktifkan proses latar belakang pada beberapa aplikasi sekaligus serta menguras memori dan baterai. Jika aplikasi Anda menerimanya, manfaatkan Android 7.0 untuk beralih ke JobScheduler dan API terkait sebagai gantinya.

Lihat dokumentasi Optimalisasi Latar Belakang untuk mengetahui detailnya.

SurfaceView

Android 7.0 membawa gerakan sinkron ke kelas SurfaceView, yang menyediakan kinerja baterai lebih baik daripada TextureView dalam kasus-kasus tertentu: Saat me-render video atau materi 3D, aplikasi dengan guliran dan posisi video beranimasi menggunakan daya lebih sedikit bila dengan SurfaceView daripada dengan TextureView.

Kelas SurfaceView memungkinkan komposisi yang lebih hemat baterai di layar, karena dikomposisikan di perangkat keras khusus, secara terpisah dari materi jendela aplikasi. Sehingga salinan perantara yang dibuatnya jadi lebih sedikit daripada TextureView.

Posisi materi objek SurfaceView kini diperbarui secara sinkron dengan materi aplikasi yang memuatnya. Salah satu hasil perubahan ini adalah penerjemahan sederhana atau skala video yang diputar di SurfaceView tidak lagi menghasilkan bilah hitam bersama tampilan saat bergerak.

Mulai Android 7.0, kami sangat menyarankan Anda untuk menghemat daya dengan menggunakan SurfaceView sebagai ganti TextureView.

Penghemat Data

Gambar 4. Penghemat Data di Settings.

Selama penggunaan perangkat seluler, biaya paket data seluler biasanya melebihi harga perangkat itu sendiri. Bagi banyak pengguna, data seluler adalah sumber daya mahal yang ingin mereka hemat.

Android 7.0 memperkenalkan mode Penghemat Data, layanan sistem baru yang mengurangi penggunaan data seluler oleh aplikasi, baik saat roaming, mendekati akhir siklus tagihan, atau saat menggunakan paket data prabayar yang kecil. Penghemat Data memberi pengguna kemampuan mengontrol cara aplikasi menggunakan data seluler dan memungkinkan developer memberikan layanan yang lebih efisien bila Penghemat Data aktif.

Bila pengguna mengaktifkan Penghemat Data di Settings dan perangkat dalam jaringan berkuota, sistem akan memblokir penggunaan data latar belakang dan memberi tahu aplikasi untuk menghemat penggunaan data latar depan — misalnya dengan membatasi kecepatan bit untuk streaming, mengurangi kualitas gambar, menangguhkan precaching optimistik, dan seterusnya. Pengguna bisa memasukkan aplikasi tertentu ke daftar putih untuk memungkinkan penggunaan data berkuota latar belakang bila Penghemat Data diaktifkan.

Android 7.0 memperluas ConnectivityManager untuk menyediakan cara pada aplikasi untuk mengambil preferensi Penghemat Data pengguna dan memantau perubahan preferensi. Semua aplikasi harus memeriksa apakah pengguna telah mengaktifkan Penghemat Data dan berusaha membatasi penggunaan data latar belakang dan latar depan.

Vulkan API

Android 7.0 mengintegrasikan Vulkan™, sebuah API rendering 3D baru, ke dalam platform. Seperti OpenGL™ ES, Vulkan merupakan standar terbuka untuk grafik 3D dan rendering yang dikelola oleh Khronos Group.

Vulkan didesain dari nol untuk meminimalkan overhead CPU dalam driver, dan memungkinkan aplikasi Anda mengontrol operasi GPU lebih langsung. Vulkan juga memungkinkan paralelisasi yang lebih baik dengan mengizinkan beberapa thread menjalankan pekerjaan seperti pembuatan buffer perintah sekaligus.

Pustaka dan alat development Vulkan telah dimasukkan ke dalam Android 7.0DK. Ini berisi:

  • Header
  • Layer validasi (pustaka debug)
  • SPIR-V shader compiler
  • Pustaka kompilasi shader waktu proses SPIR-V

Vulkan hanya tersedia untuk aplikasi pada perangkat dengan perangkat keras yang mendukung Vulkan, seperti Nexus 5X, Nexus 6P, dan Nexus Player. Kami bekerja sama erat dengan mitra agar secepatnya makin banyak perangkat yang dilengkapi Vulkan.

Untuk informasi selengkapnya, lihat dokumentasi API.

Quick Settings Tile API

Gambar 5. Petak Quick Settings dalam bayangan pemberitahuan.

Quick Settings adalah cara populer dan mudah untuk mengekspos setelan dan tindakan utama, langsung dari bayangan pemberitahuan. Di Android 7.0, kami telah memperluas cakupan Quick Settings untuk membuatnya lebih berguna dan praktis lagi.

Kami telah menambahkan ruang lebih banyak untuk petak Quick Settings tambahan, yang bisa diakses pengguna di semua bagian area tampilan halaman bernomor dengan menggesek ke kiri atau kanan. Kami juga memberi pengguna kontrol untuk mengatur letak dan petak Quick Settings apa yang akan ditampilkan — pengguna bisa menambahkan atau memindahkan petak dengan menyeret dan melepasnya.

Bagi developer, Android 7.0 juga menambahkan API baru yang memungkinkan Anda mendefinisikan petak Quick Settings agar pengguna bisa dengan mudah mengakses kontrol kunci dan tindakan dalam aplikasi Anda.

Petak Quick Settings dicadangkan untuk kontrol atau tindakan yang mendesak atau sering digunakan, dan tidak boleh digunakan sebagai pintasan untuk membuka aplikasi.

Setelah mendefinisikan petak, Anda bisa menyediakannya kepada pengguna, yang bisa mereka tambahkan ke Quick Settings cukup dengan menyeret dan melepaskannya.

Untuk informasi tentang pembuatan petak aplikasi, lihat dokumentasi untuk android.service.quicksettings.Tile dalam Referensi API yang bisa diunduh.

Pemblokiran Nomor

Android 7.0 sekarang mendukung pemblokiran nomor di platform dan menyediakan API kerangka kerja agar penyedia layanan bisa mengelola daftar nomor blokir. Aplikasi SMS default, aplikasi telepon default, dan aplikasi operator bisa membaca dari dan menulis ke daftar nomor blokir. Daftar ini tidak dapat diakses oleh aplikasi lain.

Dengan membuat pemblokiran nomor sebagai fitur standar pada platformnya, Android menyediakan cara konsisten bagi aplikasi untuk mendukung pemblokiran nomor di berbagai perangkat. Manfaat lain yang bisa diperoleh aplikasi antara lain:

  • Nomor yang diblokir untuk panggilan telepon juga akan diblokir untuk SMS
  • Nomor yang diblokir tetap disimpan saat setel ulang dan pada berbagai perangkat melalui fitur Backup & Restore.
  • Beberapa aplikasi sekaligus bisa menggunakan daftar nomor blokir yang sama

Selain itu, dengan integrasi aplikasi operator melalui Android berarti operator bisa membaca daftar nomor blokir pada perangkat dan melakukan pemblokiran di sisi layanan bagi pengguna tersebut untuk menghentikan panggilan telepon dan SMS yang tidak diinginkan agar tidak sampai ke pengguna lewat media apa pun, misalnya VOIP-endpoint atau meneruskan panggilan telepon.

Untuk informasi selengkapnya, lihat android.provider.BlockedNumberContract dalam Referensi API yang bisa diunduh.

Penyaringan Panggilan Telepon

Android 7.0 memungkinkan aplikasi telepon default untuk menyaring panggilan masuk. Aplikasi ponsel melakukannya dengan mengimplementasikan CallScreeningService baru, yang memungkinkan aplikasi telepon untuk melakukan sejumlah tindakan berdasarkan Call.Details panggilan masuk, misalnya:

  • Menolak panggilan masuk
  • Tidak mengizinkan panggilan telepon tersebut disimpan ke log panggilan
  • Tidak menampilkan notifikasi untuk panggilan telepon tersebut kepada pengguna

Untuk informasi selengkapnya, lihat android.telecom.CallScreeningService dalam Referensi API yang bisa diunduh.

Dukungan Multilokal, Lebih Banyak Bahasa yang Didukung

Android 7.0 kini memungkinkan pengguna memilih multiple locales di Settings, untuk mendukung kasus penggunaan dwibahasa dengan lebih baik. Aplikasi bisa menggunakan API baru untuk mendapatkan lokal pilihan pengguna kemudian menawarkan pengalaman pengguna yang lebih canggih untuk pengguna multilokal — seperti menampilkan hasil penelusuran dalam banyak bahasa dan tidak menawarkan untuk menerjemahkan laman web dalam bahasa yang sudah diketahui pengguna.

Bersama dukungan multilokal, Android 7.0 juga memperluas ragam bahasa yang tersedia untuk pengguna. Masing-masing ditawarkan lebih dari 25 varian untuk bahasa yang umum digunakan seperti Inggris, Spanyol, Prancis, dan Arab. Juga ditambahkan dukungan parsial untuk lebih dari 100 bahasa baru.

Aplikasi bisa mendapatkan daftar lokal yang disetel oleh pengguna dengan memanggil LocaleList.GetDefault(). Untuk mendukung jumlah lokal yang diperluas, Android 7.0 sedang mengubah cara mengatasi masalah sumber daya. Pastikan Anda menguji dan memverifikasi bahwa aplikasi Anda berfungsi seperti yang diharapkan dengan logika resolusi sumber daya baru.

Untuk mempelajari tentang perilaku resolusi sumber daya baru dan praktik terbaik yang harus Anda ikuti, lihat Dukungan Multibahasa.

Emoji Baru

Android 7.0 memperkenalkan emoji tambahan dan fitur terkait emoji termasuk emoji warna kulit dan dukungan untuk pemilih variasi. Jika aplikasi Anda mendukung emoji, ikuti panduan berikut untuk memanfaatkan fitur terkait emoji ini.

  • Pastikan perangkat berisi emoji sebelum memasukkannya. Untuk memeriksa emoji mana yang terdapat di font sistem, gunakan metode hasGlyph(String).
  • Pastikan emoji mendukung pemilih variasi. Pemilih variasi memungkinkan Anda menampilkan emoji tertentu berwarna atau hitam-putih. Pada perangkat seluler, aplikasi akan menghadirkan emoji berwarna daripada hitam-putih. Akan tetapi, jika aplikasi Anda menampilkan emoji inline dengan teks, maka harus menggunakan variasi hitam-putih. Untuk menentukan apakah sebuah emoji memiliki variasi, gunakan pemilih variasi. Untuk daftar lengkap karakter dengan variasinya, tinjaulah bagian rangkaian variasi emoji pada dokumentasi Unicode mengenai variasi.
  • Pastikan emoji mendukung warna kulit. Android 7.0 memungkinkan pengguna memodifikasi warna kulit emoji yang di-render sesuai dengan preferensi mereka. Aplikasi keyboard harus menyediakan indikasi visual untuk emoji yang memiliki beberapa warna kulit dan harus memungkinkan pengguna memilih warna kulit yang mereka sukai. Untuk menentukan apakah emoji sistem memiliki pengubah warna kulit, gunakan metode hasGlyph(String). Anda bisa menentukan emoji mana yang menggunakan warna kulit dengan membaca dokumentasi Unicode.

ICU4J API di Android

Android 7.0 kini menawarkan subset ICU4J API dalam kerangka kerja Android pada paket android.icu. Migrasi mudah, dan biasanya hanya perlu mengubah dari namespace com.java.icu menjadi android.icu. Jika Anda sudah menggunakan bundel ICU4J dalam aplikasi, maka beralih ke android.icu API yang disediakan dalam kerangka kerja Android bisa menghasilkan penghematan besar dalam ukuran APK.

Untuk mengetahui selengkapnya tentang Android ICU4J API, lihat Dukungan ICU4J.

WebView

Chrome + WebView, Bersama-sama

Mulai Chrome versi 51 di Android 7.0 ke atas, Chrome APK di perangkat Anda digunakan untuk menyediakan dan me-render Android System WebViews. Pendekatan ini memperbaiki penggunaan memori pada perangkat itu sendiri dan mengurangi bandwidth yang diperlukan untuk menjaga WebView tetap diperbarui (karena WebView APK mandiri tidak akan diperbarui lagi selama Chrome tetap diaktifkan).

Anda bisa memilih penyedia WebView dengan mengaktifkan Developer Options dan memilih WebView implementation. Anda bisa menggunakan versi Chrome yang kompatibel (Dev, Beta, atau Stable) yang telah dipasang di perangkat atau Webview APK mandiri untuk berfungsi sebagai implementasi WebView.

Multiproses

Mulai Chrome versi 51 di Android 7.0, WebView akan menjalankan materi web dalam proses kotak pasir terpisah bila opsi developer "Multiprocess WebView" diaktifkan.

Kami menunggu masukan mengenai kompatibilitas dan kinerja waktu proses di N sebelum mengaktifkan Multiprocess WebView di versi Android yang akan datang. Dalam versi ini, diharapkan adanya regresi waktu startup, penggunaan memori total dan kinerja render perangkat lunak.

Jika Anda menemukan masalah yang tidak diharapkan dalam mode multiproses, kami ingin mengetahuinya. Harap hubungi tim WebView di Chromium bug tracker.

JavaScript berjalan sebelum laman dimuat

Mulai dengan aplikasi yang menargetkan Android 7.0, konteks JavaScript akan disetel ulang saat laman baru telah dimuat. Saat ini, konteks tersebut dibawa untuk laman pertama yang dimuat di instance WebView yang baru.

Developer yang ingin menginjeksikan JavaScript ke dalam WebView harus mengeksekusi skrip setelah laman mulai dimuat.

Geolokasi pada sumber yang tidak aman

Mulai dengan aplikasi yang menargetkan Android 7.0, API geolokasi hanya akan diizinkan pada sumber yang aman (melalui HTTPS). Kebijakan ini didesain untuk melindungi informasi privat pengguna saat mereka menggunakan koneksi yang tidak aman.

Pengujian dengan WebView Beta

WebView diperbarui secara rutin, jadi kami menyarankan Anda agar sering-sering menguji kompatibilitas dengan aplikasi menggunakan saluran beta WebView. Untuk memulai pengujian versi prarilis WebView di Android 7.0, unduh dan pasang Chrome Dev atau Chrome Beta, dan pilih sebagai implementasi WebView pada opsi developer seperti dijelaskan di atas. Harap laporkan masalah melalui Chromium bug tracker sehingga kami bisa memperbaikinya sebelum versi baru WebView dirilis.

OpenGL™ ES 3.2 API

Android 7.0 menambahkan antarmuka kerangka kerja dan dukungan platform untuk OpenGL ES 3.2, termasuk:

  • Semua ekstensi dari Android Extension Pack (AEP) kecuali untuk EXT_texture_sRGB_decode.
  • Floating-point framebuffer untuk HDR dan shading yang ditangguhkan.
  • Panggilan draw BaseVertex agar batching dan streaming jadi lebih baik.
  • Kontrol akses buffer yang tangguh untuk mengurangi overhead WebGL.

API kerangka kerja untuk OpenGL ES 3.2 di Android 7.0 dilengkapi dengan kelas GLES32. Saat menggunakan OpenGL ES 3.2, pastikan mendeklarasikan persyaratan dalam file manifes Anda, dengan tag <uses-feature> dan atribut android:glEsVersion.

Untuk informasi tentang menggunakan OpenGL ES, termasuk cara memeriksa versi OpenGL ES yang didukung perangkat pada waktu proses, lihat Panduan OpenGL ES API.

Perekaman Android TV

Android 7.0 menambahkan kemampuan untuk merekam dan memutar kembali materi dari layanan masukan Android TV melalui API perekaman baru. Karena dibangun dengan API perekaman yang sudah ada, layanan masukan TV bisa mengontrol data saluran apa yang bisa direkam, cara menyimpan sesi rekaman, dan mengelola interaksi pengguna dengan materi rekaman.

Untuk informasi selengkapnya, lihat Android TV Recording API.

Android for Work

Android for Work menambahkan berbagai fitur dan API baru untuk perangkat yang menjalankan Android 7.0. Beberapa fitur unggulannya ada di bawah ini — untuk mengetahui daftar lengkap perubahannya, lihat Pembaruan Android for Work.

Pertanyaan keamanan profil kerja

Pemilik profil yang menargetkan N SDK bisa menetapkan pertanyaan keamanan terpisah untuk aplikasi yang berjalan di profil kerja. Pertanyaan kerja ditampilkan bila pengguna mencoba membuka aplikasi kerja apa pun. Jawaban pertanyaan keamanan yang benar akan membuka kunci profil kerja dan mendekripsinya jika diperlukan. Untuk pemilik profil, ACTION_SET_NEW_PASSWORD akan meminta pengguna untuk menetapkan pertanyaan kerja, dan ACTION_SET_NEW_PARENT_PROFILE_PASSWORD meminta pengguna menyetel kunci perangkat.

Pemilik profil bisa menyetel kebijakan kode sandi untuk pertanyaan kerja (seperti berapa lama seharusnya PIN, atau apakah sidik jari bisa digunakan untuk membuka kunci profil) menggunakan setPasswordQuality(), setPasswordMinimumLength() dan metode terkait. Pemilik profil juga bisa menyetel kunci perangkat, menggunakan instance DevicePolicyManager yang dikembalikan oleh metode getParentProfileInstance() baru. Selain itu, pemilik profil bisa menyesuaikan layar kredensial untuk pertanyaan kerja menggunakan metode baru setOrganizationColor() dan setOrganizationName().

Menonaktifkan pekerjaan

Pada perangkat dengan profil kerja, pengguna bisa beralih mode kerja. Bila mode kerja dinonaktifkan, pengguna yang dikelola akan dinonaktifkan untuk sementara, yang akan menonaktifkan aplikasi profil kerja, sinkronisasi latar belakang, dan notifikasi. Termasuk aplikasi pemilik profil. Bila profil kerja dinonaktifkan, sistem akan menampilkan ikon status tetap untuk mengingatkan pengguna bahwa mereka tidak bisa meluncurkan aplikasi kerja. Peluncur menunjukkan bahwa aplikasi kerja dan widget tidak bisa diakses.

Always-On VPN

Pemilik perangkat dan pemilik profil bisa memastikan bahwa aplikasi kerja selalu menghubungkan melalui VPN yang ditetapkan. Sistem secara otomatis akan memulai VPN itu setelah booting perangkat.

Metode DevicePolicyManager baru adalah setAlwaysOnVpnPackage() dan getAlwaysOnVpnPackage().

Karena layanan VPN bisa diikat langsung oleh sistem tanpa interaksi aplikasi, klien VPN perlu menangani titik masuk baru untuk Always-On VPN. Seperti sebelumnya, layanan ditunjukkan ke sistem melalui tindakan pencocokan filter maksud android.net.VpnService.

Pengguna juga bisa secara manual menyetel klien Always-On VPN yang mengimplementasikan metode VPNService dengan menggunakan Settings>More>Vpn. Opsi untuk mengaktifkan Always-On VPN dari Settings hanya tersedia jika klien VPN menargetkan API level 24.

Penyediaan yang disesuaikan

Aplikasi bisa menyesuaikan alur penyediaan pemilik profil dan pemilik perangkat dengan warna dan logo perusahaan. DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR menyesuaikan warna alur. DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI menyesuaikan alur dengan logo perusahaan.

Penyempurnaan Aksesibilitas

Android 7.0 saat ini menawarkan Vision Settings langsung di layar Sambutan untuk persiapan perangkat baru. Ini sangat memudahkan pengguna untuk menemukan dan mengonfigurasi fitur aksesibilitas pada perangkat mereka, termasuk gerakan memperbesar, ukuran font, ukuran tampilan, dan TalkBack.

Dengan fitur aksesibilitas yang penempatannya semakin jelas, pengguna Anda kemungkinan besar akan mencoba aplikasi dengan fitur-fitur yang diaktifkan itu. Pastikan Anda menguji aplikasi lebih dini dengan mengaktifkan dahulu setelan ini. Anda bisa mengaktifkannya dari Settings > Accessibility.

Juga di Android 7.0, layanan aksesibilitas sekarang bisa membantu pengguna yang mengalami gangguan motorik untuk menyentuh layar. API baru memungkinkan membangun layanan dengan fitur-fitur seperti pelacakan wajah, pelacakan mata, pemindaian titik, dan seterusnya, untuk memenuhi kebutuhan para pengguna tersebut.

Untuk informasi selengkapnya, lihat android.accessibilityservice.GestureDescription dalam Referensi API yang bisa diunduh.

Direct Boot

Direct Boot memperbaiki waktu startup perangkat dan memungkinkan aplikasi yang telah didaftarkan memiliki fungsionalitas terbatas bahkan setelah boot ulang tak terduga. Misalnya, jika perangkat yang dienkripsi melakukan boot ulang selagi pengguna tidur, alarm terdaftar, pesan dan panggilan masuk sekarang bisa terus memberi tahu pengguna seperti biasa. Ini juga berarti layanan aksesibilitas bisa segera tersedia setelah mulai ulang.

Direct boot memanfaatkan enkripsi berbasis file di Android 7.0 untuk memungkinkan kebijakan enkripsi sangat detail baik untuk sistem maupun data aplikasi. Sistem menggunakan storage yang dienkripsi perangkat untuk data sistem terpilih dan data aplikasi yang terdaftar secara eksplisit. Secara default, storage yang dienkripsi dengan kredensial digunakan untuk semua data sistem lainnya, data pengguna, aplikasi, dan data aplikasi.

Saat booting, sistem akan memulai dalam mode terbatas dengan akses ke data yang dienkripsi perangkat saja, dan tanpa akses umum ke aplikasi atau data. Jika Anda memiliki komponen yang ingin dijalankan dalam mode ini, Anda bisa mendaftarkannya dengan menyetel flag di manifes. Setelah mulai ulang, sistem akan mengaktifkan komponen terdaftar dengan menyiarkan maksud LOCKED_BOOT_COMPLETED. Sistem akan memastikan data aplikasi yang dienkripsi dengan perangkat tersedia sebelum membuka kunci. Semua data lainnya tidak tersedia sebelum Pengguna mengonfirmasi kredensial layar kunci mereka untuk mendekripsinya.

Untuk informasi selengkapnya, lihat Direct Boot.

Pengesahan Kunci

Android 7.0 memperkenalkan pengesahan kunci, sebuah alat keamanan baru yang membantu Anda memastikan bahwa pasangan kunci yang disimpan dalam keystore yang didukung perangkat keras di perangkat akan melindungi dengan benar informasi sensitif yang digunakan oleh aplikasi. Dengan menggunakan alat ini, Anda akan bertambah yakin bahwa aplikasi Anda berinteraksi dengan kunci yang ada dalam perangkat keras yang aman, sekalipun perangkat yang menjalankan aplikasi Anda telah dijebol (rooted). Jika Anda menggunakan kunci dari keystore yang didukung perangkat keras di aplikasi, Anda harus menggunakan alat ini, khususnya jika Anda menggunakan kunci tersebut untuk memverifikasi informasi sensitif dalam aplikasi.

Pengesahan kunci memungkinkan Anda memverifikasi bahwa pasangan kunci RSA atau EC telah dibuat dan disimpan dalam keystore yang didukung perangkat keras dalam Trusted Execution Environment (TEE) perangkat. Alat ini juga memungkinkan Anda menggunakan layanan di-luar-perangkat, misalnya server back-end aplikasi Anda, untuk menentukan dan memverifikasi dengan kuat penggunaan serta validitas pasangan kunci. Fitur ini memberikan tingkat keamanan tambahan yang melindungi pasangan kunci, sekalipun ada orang yang menjebol perangkat atau mengutak-atik keamanan platform Android yang dijalankan di perangkat.

Catatan: Hanya sedikit perangkat yang menjalankan Android 7.0 yang mendukung pengesahan kunci tingkat-perangkat keras; semua perangkat lain yang menjalankan Android 7.0 menggunakan pengesahan kunci tingkat-perangkat lunak sebagai gantinya. Sebelum Anda memverifikasi properti kunci yang didukung perangkat keras di perangkat dalam lingkungan tingkat-produksi, Anda harus memastikan bahwa perangkat mendukung pengesahan kunci tingkat-perangkat keras. Untuk melakukannya, Anda harus memastikan bahwa rantai sertifikat pengesahan berisi sertifikat akar yang ditandatangani oleh kunci akar pengesahan Google dan bahwa elemen attestationSecurityLevel dalam struktur data keterangan kunci disetel ke tingkat keamanan TrustedEnvironment.

Untuk informasi selengkapnya, lihat dokumentasi developer Pengesahan Kunci.

Network Security Config

Di Android 7.0, aplikasi bisa menyesuaikan perilaku koneksi aman mereka (HTTPS, TLS) secara aman, tanpa modifikasi kode, dengan menggunakan Network Security Config deklaratif sebagai ganti menggunakan API terprogram konvensional yang rawan kesalahan (mis. X509TrustManager).

Fitur yang didukung:

  • Trust-anchor khusus. Memungkinkan aplikasi menyesuaikan Otoritas Sertifikat (Certificate Authorities/CA) mana yang dipercaya untuk koneksi amannya. Misalnya, mempercayai sertifikat tertentu yang ditandatangani sendiri atau set CA publik yang dibatasi.
  • Penggantian hanya-debug. Memungkinkan developer aplikasi dengan aman men-debug koneksi aman aplikasi mereka tanpa menambah risiko pada basis yang sudah dipasang.
  • Keluar dari lalu lintas cleartext. Memungkinkan aplikasi melindungi dirinya sendiri dari penggunaan lalu lintas cleartext yang tidak disengaja.
  • Penyematan sertifikat. Sebuah fitur canggih yang memungkinkan aplikasi membatasi kunci server mana yang dipercaya untuk koneksi aman.

Untuk informasi selengkapnya, lihat Network Security Config.

Otoritas Sertifikat Tepercaya Default

Secara default, aplikasi yang menargetkan Android 7.0 hanya mempercayai sertifikat yang disediakan sistem dan tidak lagi mempercayai Otoritas Sertifikat (Certificate Authorities /CA) yang ditambahkan pengguna. Aplikasi yang menargetkan Android N dan ingin mempercayai CA yang ditambahkan pengguna harus menggunakan Network Security Config untuk menetapkan cara mempercayai CA pengguna.

APK Signature Scheme v2

Android 7.0 memperkenalkan APK Signature Scheme v2, sebuah skema penandatanganan aplikasi baru yang menawarkan waktu pasang aplikasi lebih cepat dan lebih banyak perlindungan terhadap perubahan tidak sah pada file APK. Secara default, Android Studio 2.2 dan Android Plugin untuk Gradle 2.2 menandatangani aplikasi Anda menggunakan APK Signature Scheme v2 dan skema penandatanganan tradisional, yang menggunakan penandatanganan JAR.

Meskipun kami menyarankan untuk menerapkan APK Signature Scheme v2 pada aplikasi Anda, skema baru ini tidak wajib. Jika aplikasi Anda tidak dibangun dengan benar saat menggunakan APK Signature Scheme v2, Anda bisa menonaktifkan skema baru ini. Proses penonaktifan menyebabkan Android Studio 2.2 dan Android Plugin untuk Gradle 2.2 menandatangani aplikasi Anda menggunakan skema penandatanganan tradisional saja. Untuk menandatangani dengan skema tradisional saja, buka file build.gradle level-modul, kemudian tambahkan baris v2SigningEnabled false ke konfigurasi penandatanganan rilis Anda:

  android {
    ...
    defaultConfig { ... }
    signingConfigs {
      release {
        storeFile file("myreleasekey.keystore")
        storePassword "password"
        keyAlias "MyReleaseKey"
        keyPassword "password"
        v2SigningEnabled false
      }
    }
  }

Perhatian: Jika Anda menandatangani aplikasi menggunakan APK Signature Scheme v2 dan membuat perubahan lebih jauh pada aplikasi, tanda tangan aplikasi menjadi tidak valid. Untuk alasan ini, gunakan alat seperti zipalign sebelum menandatangani aplikasi Anda menggunakan APK Signature Scheme v2, bukan setelahnya.

Untuk informasi selengkapnya, baca dokumen Android Studio yang menjelaskan cara menandatangani aplikasi di Android Studio dan cara mengonfigurasi file pembangunan untuk menandatangani aplikasi menggunakan Android Plugin untuk Gradle.

Scoped Directory Access

Di Android 7.0, aplikasi bisa menggunakan API baru untuk meminta akses ke direktori storage eksternal tertentu, termasuk direktori di media lepas-pasang seperti kartu SD. API baru ini sangat menyederhanakan cara aplikasi Anda mengakses direktori storage eksternal standar, seperti direktori Pictures. Aplikasi seperti aplikasi foto bisa menggunakan API ini sebagai ganti menggunakan READ_EXTERNAL_STORAGE, yang memberikan akses ke semua direktori storage, atau Storage Access Framework, yang membuat pengguna mengarah ke direktori tersebut.

Selain itu, API baru ini menyederhanakan langkah-langkah yang diambil pengguna untuk memberikan akses storage eksternal ke aplikasi Anda. Bila Anda menggunakan API baru, sistem akan menggunakan UI izin sederhana yang memperinci dengan jelas direktori apa yang aksesnya diminta oleh aplikasi.

Untuk informasi selengkapnya, lihat dokumentasi developer Scoped Directory Access.

Keyboard Shortcuts Helper

Di Android 7.0, pengguna bisa menekan Meta + / untuk memunculkan layar Keyboard Shortcuts yang menampilkan semua pintasan yang tersedia baik dari sistem maupun dari aplikasi yang sedang mendapatkan fokus. Sistem akan mengambil pintasan ini secara otomatis dari menu aplikasi jika pintasan tersebut ada. Anda juga bisa menyediakan daftar pintasan yang telah diperinci untuk layar. Anda bisa melakukannya dengan mengganti metode Activity.onProvideKeyboardShortcuts() baru, yang dijelaskan dalam Referensi API yang bisa diunduh.

Catatan: Tombol Meta tidak ada di semua keyboard: di keyboard Macintosh, ini adalah tombol Command, di keyboard Windows, ini adalah tombol Windows, dan di keyboard Pixel C dan Chrome OS, ini adalah tombol Search.

Untuk memunculkan Keyboard Shortcuts Helper dari mana saja di aplikasi Anda, panggil Activity.requestKeyboardShortcutsHelper() untuk aktivitas terkait.

Custom Pointer API

Android 7.0 memperkenalkan Custom Pointer API, yang memungkinkan Anda menyesuaikan penampilan, visibilitas, dan perilaku pointer. Kemampuan ini khususnya berguna bila pengguna menggunakan mouse atau touchpad untuk berinteraksi dengan objek UI. Pointer default menggunakan ikon standar. API ini juga menyertakan fungsionalitas canggih seperti mengubah penampilan ikon pointer berdasarkan gerakan mouse atau touchpad tertentu.

Untuk menyetel ikon pointer, ganti metode onResolvePointerIcon() kelas View. Metode ini menggunakan objek PointerIcon untuk menggambar ikon yang menyangkut kejadian gerakan tertentu.

Sustained Performance API

Kinerja bisa berfluktuasi secara dramatis untuk aplikasi yang berjalan lama, karena sistem melakukan throttle pada mesin sistem-di-chip saat komponen perangkat mencapai batas suhunya. Fluktuasi ini memberikan target bergerak bagi developer aplikasi yang sedang membuat aplikasi berkinerja tinggi dan berjalan lama.

Untuk menangani batasan ini, Android 7.0 menyertakan dukungan untuk mode kinerja kontinu, yang memungkinkan OEM memberikan petunjuk mengenai kemampuan kinerja perangkat untuk aplikasi yang berjalan lama. Developer aplikasi bisa menggunakan petunjuk ini untuk menyesuaikan aplikasi agar kinerja perangkat bisa diprediksi dan pada level yang konsisten dalam jangka waktu lama.

Developer aplikasi bisa mencoba API baru ini dalam Android 7.0 pada perangkat Nexus 6P saja. Untuk menggunakan fitur ini, setel flag jendela kinerja kontinu yang ingin Anda jalankan dalam mode kinerja kontinu. Setel flag ini menggunakan metode Window.setSustainedPerformanceMode(). Sistem secara otomatis akan menonaktifkan mode ini bila jendela tidak lagi mendapatkan fokus.

Dukungan VR

Android 7.0 menambahkan dukungan platform dan optimalisasi untuk VR Mode baru yang memungkinkan developer membuat pengalaman VR berkualitas tinggi di seluler bagi para pengguna. Ada banyak penyempurnaan kinerja, termasuk akses ke inti CPU yang eksklusif untuk aplikasi VR. Dalam aplikasi, Anda bisa memanfaatkan pemantauan kepala yang cerdas, dan notifikasi stereo yang bekerja untuk VR. Hal terpenting adalah Android 7.0 menyediakan grafik dengan latensi sangat rendah. Untuk informasi selengkapnya tentang membangun aplikasi VR untuk Android 7.0, lihat Google VR SDK untuk Android.

Di Android 7.0, developer layanan cetak kini bisa menampilkan informasi tambahan tentang masing-masing printer dan tugas cetak.

Saat mencantumkan masing-masing printer, layanan cetak kini bisa menyetel ikon per printer dalam dua cara:

  • Anda bisa menyetel ikon dari ID sumber daya dengan memanggil PrinterInfo.Builder.setResourceIconId()
  • Anda bisa menampilkan ikon dari jaringan dengan memanggil PrinterInfo.Builder.setHasCustomPrinterIcon(), dan menyetel sebuah callback bila ikon diminta menggunakan android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()

Selain itu, Anda bisa menyediakan aktivitas per printer untuk menampilkan informasi tambahan dengan memanggil PrinterInfo.Builder.setInfoIntent().

Anda bisa menunjukkan kemajuan dan status tugas cetak di notifikasi tugas cetak dengan memanggil masing-masing android.printservice.PrintJob.setProgress() dan android.printservice.PrintJob.setStatus().

Untuk informasi selengkapnya tentang metode ini, lihat Referensi API yang bisa diunduh.

FrameMetricsListener API

FrameMetricsListener API memungkinkan aplikasi untuk memantau kinerja rendering UI. API tersebut menyediakan kemampuan ini dengan mengekspos Pub/Sub API streaming guna mentransfer info pengaturan waktu bingkai untuk jendela aplikasi saat ini. Data yang dikembalikan setara dengan yang ditampilkan adb shell dumpsys gfxinfo framestats, namun tidak dibatasi pada 120 bingkai.

Anda bisa menggunakan FrameMetricsListener untuk mengukur kinerja UI level interaksi di produksi, tanpa koneksi USB. API ini memungkinkan pengumpulan data dengan granularitas lebih tinggi daripada adb shell dumpsys gfxinfo. Granularitas lebih tinggi ini dimungkinkan karena sistem bisa mengumpulkan data untuk interaksi tertentu di aplikasi; sistem tidak perlu merekam rangkuman global untuk keseluruhan kinerja aplikasi, atau mengosongkan status global yang ada. Anda bisa menggunakan kemampuan ini untuk mengumpulkan data kinerja dan menangkap regresi di kinerja UI untuk kasus penggunaan sungguhan di dalam aplikasi.

Untuk memantau sebuah jendela, implementasikan metode callback FrameMetricsListener.onMetricsAvailable() dan daftarkan di jendela itu. Untuk informasi selengkapnya, lihat dokumentasi kelas FrameMetricsListener di Referensi API yang bisa diunduh.

API menyediakan objek FrameMetrics, berisi data pengaturan waktu yang dilaporkan subsistem rendering untuk beragam tahap pencapaian dalam daur hidup bingkai. Metrik yang didukung adalah: UNKNOWN_DELAY_DURATION, INPUT_HANDLING_DURATION, ANIMATION_DURATION, LAYOUT_MEASURE_DURATION, DRAW_DURATION, SYNC_DURATION, COMMAND_ISSUE_DURATION, SWAP_BUFFERS_DURATION, TOTAL_DURATION, dan FIRST_DRAW_FRAME.

File Virtual

Di Android versi sebelumnya, aplikasi Anda bisa menggunakan Storage Access Framework untuk memungkinkan pengguna memilih file dari akun storage awan mereka, seperti Google Drive. Akan tetapi, tidak ada cara untuk merepresentasikan file yang tidak memiliki representasi bytecode langsung; setiap file diharuskan menyediakan aliran masukan.

Android 7.0 menambahkan konsep file virtual pada Storage Access Framework. Fitur file virtual memungkinkan DocumentsProvider Anda mengembalikan URI dokumen yang bisa digunakan bersama maksud ACTION_VIEW sekalipun tidak memiliki representasi bytecode langsung. Android 7.0 juga memungkinkan Anda menyediakan format alternatif untuk file pengguna, virtual atau dengan cara lain.

Untuk mendapatkan URI sebuah dokumen virtual di aplikasi Anda, terlebih dahulu buatlah Intent untuk membuka UI pemilih file. Karena aplikasi tidak bisa membuka file virtual secara langsung dengan menggunakan metode openInputStream(), aplikasi tidak akan menerima file virtual jika Anda menyertakan kategori CATEGORY_OPENABLE.

Setelah pengguna menentukan pilihan, sistem akan memanggil metode onActivityResult(). Aplikasi Anda bisa mengambil URI file virtual dan mendapatkan aliran masukan, seperti yang diperagakan dalam cuplikan kode di bawah.

  // Other Activity code ...

  final static private int REQUEST_CODE = 64;

  // We listen to the OnActivityResult event to respond to the user's selection.
  @Override
  public void onActivityResult(int requestCode, int resultCode,
    Intent resultData) {
      try {
        if (requestCode == REQUEST_CODE &&
            resultCode == Activity.RESULT_OK) {

            Uri uri = null;

            if (resultData != null) {
                uri = resultData.getData();

                ContentResolver resolver = getContentResolver();

                // Before attempting to coerce a file into a MIME type,
                // check to see what alternative MIME types are available to
                // coerce this file into.
                String[] streamTypes =
                  resolver.getStreamTypes(uri, "*/*");

                AssetFileDescriptor descriptor =
                    resolver.openTypedAssetFileDescriptor(
                        uri,
                        streamTypes[0],
                        null);

                // Retrieve a stream to the virtual file.
                InputStream inputStream = descriptor.createInputStream();
            }
        }
      } catch (Exception ex) {
        Log.e("EXCEPTION", "ERROR: ", ex);
      }
  }

Untuk informasi selengkapnya tentang mengakses file pengguna, lihat Panduan Storage Access Frameworks.