開発者のためのAndroid ヌガー(Nougat)変更点まとめ

Androidの新しいバージョンであるヌガーがリリースされました。ユーザー視点での変更点を説明したブログはいくつかあるので、開発者視点で知っておくべき変更点をまとめました。


ヌガー(Nougat)って何?

ヌガーはナッツやドライフルーツの砂糖や蜂蜜を入れて作ったお菓子で、下の写真で土台となっている部分につかわれています。僕は食べたことも、聞いたこともないデザートでした。アルファベット全26文字中「N」は14番目の文字です。Androidの歴史は今半分を過ぎたばかりでしょうか。


ユーザー視点でのヌガーの新機能

  • マルチウィンドウ
  • 通知の機能強化
    • テンプレートのアップデート
    • メッセージスタイルのカスタマイズ
    • バンドル通知
    • ダイレクトリプライ
  • いろんなバッテリー最適化とデータセーバー機能
  • グーグルのVRプラットフォームであるデイドリーム(Daydream)のサポート
  • ゲームなどに使われる3DグラフィックAPIであるVulkanのサポート
  • ファイルベースの暗号化などのセキュリティー機能

開発者視点でのヌガーの新機能

  • プロファイルに基づいたJIT/AOTコンパイル
    • アプリのアップデート、インストール、初期の実行時間、システムアップデート時のアプリ更新時間を大幅に短縮
  • どこでも機能するDozeモード
  • バックグラウンド処理の最適化 (メモリーとバッテリーの最適化)
  • TextureViewの代わりにSurfaceViewをおすすめ - (バッテリーの最適化のため)
  • ゲーム開発者のための3DレンダリングAPIである Vulkan API
  • ワークモードのオフ機能 ユーザーは、仕事用プロファイルがある端末でワークモードを切り替えることができます。ワークモードがオフになると、管理されているユーザーが一時的にシャットダウンされ、仕事用プロファイルのアプリ、バックグラウンドでの同期、通知が無効になります。 これには、プロファイルオーナーのアプリが含まれます。 また、ワークモードがオフになると、仕事用アプリを起動できないことをユーザーに示すステータスアイコンが表示されたままになります。 ランチャーは、仕事用アプリとウィジェットにアクセスできないことを表示します。

WebViewの変化

  • ChromeとWebViewの統合 Android 7.0上のChrome 51以降では、ChromeがAndroidのWebViewの機能も提供するようになります。これにより、メモリーや通信帯域の節約になります。また、WebViewのAPKを更新するひつようもなくなります。開発者向けオプションでWebView Implementationを選択できるので、ベータバージョンのChromeを使うように指定することもできます。WebViewを使ういろんなアプリに大きな変化をもたらすと思われます。

  • 実験的なマルチプロセスをサポート 開発者向けオプションで「Multiprocess WebView」を設定するとWebViewを別のサンドボックスプロセスで動かすようになります。この機能は現在互換性を検証するためにあるので、レンダリングパフォーマンスやメモリー使用量が悪化します。

  • Javascriptの動作 Android 7.0以降をターゲットとするアプリでは、新しいページのロード完了時にJavascript Contextがリセットされます。そのため、WebViewにJavascriptを注入する場合は、ページのロードが開始された後にスクリプトを実行する必要があります。

  • ロケーション情報を取得するときは必ずhttpsを Android 7.0以上をターゲットとするアプリではHTTPSを使用したページでのみGeolocation APIが動作します。これは危険な通信路に個人情報が露出するのを防ぐためです。

セキュリティー機能

  • WebViewでロケーション情報を取得するときはHTTPSで接続する必要があります。これは先に説明したものです。

  • APK署名スキームv2 Android 7.0はAPK署名スキームv2を使ってアプリのインストールがより速くなるだけでなく、APKファイルの改竄からの保護機能が強化されます。Android Studio 2.2とAndroid Gradle plugin 2.2 でAPK署名を行うと、スキームv2を使用した署名と従来のJAR署名の両方を行います。開発されるアプリで新しい署名方法がうまく動作しない場合、既存のサイン方式のみを使用するように設定することもできます。

  • キー管理 Android 7.0からは「Key Attestation」機能が提供されます。この機能はセキュリティキーと機密情報がハードウェアで管理されているストレージに安全に保管されていることを確認できるようにするツールを提供します。このツールを使用して、アプリがキーを安全なハードウェアスペースに収納することができ、デバイスがroot化されてもアクセスできないように安全に管理することができます。 しかし、全てのデバイスがハードウェア管理のストレージをもっているわけではないので、端末によってはソフトウェア管理のストレージが使用される場合もあります。もっと詳しい情報はKey Attestationぺージで確認できます。

マルチウィンドウ

マルチウィンドウもヌガーの大きな新機能です。マルチウィンドウを使うと画面を分割して一つの画面で複数のアプリを実行することができるようになります。この機能はすでにギャラクシーノートに入っていた機能ですが、Androidの基本機能になりました。メーカーが独自に入れた機能より安定的にサポートされることが期待できます。この機能により、YouTubeを見ながらメール返信をしたり、英語講座のビデオを見ながら事典アプリを使用したり、電話をしながらメモアプリを実行してメモとることもできでしょう。また、タブレットや大型端末ではウィンドウモードと呼ばれる機能で活用されており、TVなど大きな画面では画面の中に画面が入るPIP(Picture in Picture)機能を使うことができます。

記事の更新情報を受け取る

活用のしかたが増えるのはユーザーにとっては良いが、開発者が注意すべきことも増えます。アプリではマルチウィンドウを処理する方法の設定をすることができます。ただし、マルチウィンドウのライフサイクルとアプリをマルチウィンドウモードに設定する時に必要なレイアウトプロパティを知っている必要があります。

新しいマルチウィンドウ機能がうまく動作するには、アプリによっては今まで以上の作りこみが必要になります。アップデートされたばかりの機能だからユーザーがこの機能を活用するまでにはいくつかの時間がかかるかもしれません。

ARTが「AOT + JIT」になる

多く実行されている部分のみをネイティブコードに変換するJITを搭載したDalvikに比べ、全てのコードを変換するAOTを使っているARTはいくつかの主要な長所と短所を持っています。全てのコードを変換するので多くの場合より高速に動作するが、アプリの更新やシステムアップデートに時間がかかります。もちろん、ランタイムプロファイリングを利用して改善を行う余地もありません。ヌガーのARTでは、JITとAOTの両方を搭載しました。最初はJITで素早く進行しながら、徐々にAOTに変えます。アプリやシステムをアップデートする時は再度JITで動作することになります。またAOTで全てが変換されたコードもJITを利用してランタイムプロファイリングができます。ヌガーのARTは上手にJITとAOT、二つの刀を振り回します。

ドキュメント

About the content

This content has been published here with the express permission of the author.


Realm Team

At Realm, our mission is to help developers build better apps faster. We provide a unique set of tools and platform technologies designed to make it easy for developers to build apps with sophisticated, powerful features — things like realtime collaboration, augmented reality, live data synchronization, offline experiences, messaging, and more.

Everything we build is developed with an eye toward enabling developers for what we believe the mobile internet evolves into — an open network of billions of users and trillions of devices, and realtime interactivity across them all.

4 design patterns for a RESTless mobile integration »

close