X

Google I/O 2015 Android M Developer Previewが登場

2015年5月29日(現地時刻)、GoogleはAndroid M Developer Previewを発表しました。

Android MはLollipopから多くの改善を行った新バージョンです。
数千のバグを修正したほか、バッテリの持ちの改善など着実な性能向上が行われています。
あわせて開発環境の更新が行われ、Android Studio 1.3がリリース、ついにNDK(C/C++)開発がサポートされています。Gradleの高速化や新しいメモリアナライザなども追加されました。

App Permissionによるアクセス権管理

特に重要な要素としてApp Permissionsが導入されました。
パーミッションモデルをシンプルにして、初めて使うときにパーミッション認証画面が表示されます。ユーザーがアプリケーションのアクセス権を管理できます。Android Mからはパーミッションを宣言していてもユーザーが拒否した場合、その機能にアクセスできません(実際はAndroid 4.2で導入されたAppOpsと同様の挙動、つまり空のデータがとれたりダミーとしての挙動が行われ、アプリケーションへの影響は最小限に抑えられています)。

AppLinks、指紋認証、サポートライブラリなどは続きから

アプリ間連携の強化とバッテリの改善

AppLinksとよばれるアプリ間のリンク機能が追加されています。いままではリンクを開く際に、毎回ユーザーに連携先を聞いており、場合によっては最適なユーザ体験を提供できているとは言い難い状況でした(常に選ぶ羽目になり、もしくは決められた1つにしかアクセスできなかった)。AppLinksを使えば、プロンプトなしにアプリケーション同士の遷移を可能にします。

Android Mでは、Dozeとよばれる新しい機能を導入しています。Dozeは、デバイスの利用状況を学習して、放置されているような状態を検出するとより深いスリープに入ります。この機能により、Android Mのバッテリ使用時間はおおよそ2倍の向上を果たしました。またUSB TypeCの採用により、充電時間の短縮、またAndroid端末自体が他のデバイスに電源を供給するチャージャー機能も追加されました。

ユーザ体験を向上するNow on Tapと指紋認証APIの提供

Google Nowの機能強化としてNow on Tapが追加されました。Now on Tapはどんな時にも動作します。たとえばアプリケーションが起動している時、LINEのようなメッセンジャーアプリであっても同様です。タップするだけで表示されたコンテキストを理解して、最適な回答を行います。

たとえばご飯の話題であれば、タップするだけでおすすめの料理やレストランが表示されます。Now on Tapはアプリに依存せず、コンテキストを理解して、Actionまでの動線を短くする、サジェスト機能です(※著者注:Android OSの機能として、現在表示しているViewを読み込み、内容を解析して、リコメンドしているのだと思います)。

Android Mでは指紋認証APIも提供します。また指紋認証を利用した決済機能Android Payもあわせて用意されています。指紋認証は、デバイスのアンロックやGoogle Playストアでの決済、アプリケーションでもAPIを通じて追加できるようになりました。

サポートライブラリの更新

サポートライブラリではMaterial Design対応を強化、マテリアルデザインの重要な要素である Floating Action Button(FAB)、Snackbar(スナックバー), Navigation View(ナビゲーションビュー), モーション付きのToolbar(ツールバー)など多くの要素が追加されました。

※著者注:公式情報ではありませんが、日本のエンジニアが頑張った仕事みたいです!

Cloud Test Lab

Androidのテスト環境としてCloud Test Labが登場しました。Android Developer Consoleと統合され、クラウド上でAndroidの自動テストが行えます。また、Developer ConsoleにはInstallまでの動線を確認するアナライザや、インストールの動線を確認するABテスト環境が提供されます。

新しいデータバインディング

Android M Developer PreviewではXMLへのデータバインディングが導入されました。ライブラリを経由して以下のような@{・・・}かたちで表記できます。

<TextView android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@{user.firstName}"/>

このようにデータをレイアウトと接続する利点は自由度の高さですが、データ構造やバインディングの有用性についてGoogleはフィードバックを求めています。Previewらしい実験的な機能です。以下のURLに詳しい解説があります。

API Overview

(追記)Android M Developer Previewのローンチページが公開されました。Android Mの詳細な紹介を追加してお届けします。

ここではOverviewのなかから注目すべき項目をピックアップして紹介します。本記事の内容はPreviewであるため今後変更される可能性があります。

Auto Backup for Apps

Auto Backup for Appsは、Googleドライブにアプリをバックアップして、機種変更などアップデート時にアプリをリストアする手段を提供します。Android 2.2のときに提供されていたData Backup(SharedPreferenceのバックアップ)の発展版といえるでしょう。

Direct Share API

コンテンツ共有のための仕組みです。共有メニューに送りたい人を直接選ぶAPIです。

たとえば今までは共有メニューから、ハングアウトを指定してハングアウト内で検索してから人を選んでいました。Direct Share APIでは、共有したい人を直接選択できます。また実装にはChooserTargetServiceを使います。以下はAndroidManifestへの登録例です。

■AndroidManifest.xml

<service android:name=".ChooserTargetService"
        android:label="@string/service_name"
        android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
    <intent-filter>
        <action android:name="android.service.chooser.ChooserTargetService" />
    </intent-filter>
</service>

音声対話型API

android.app.VoiceInteractorクラスが追加されました。音声により対話的に操作ができるようになるAPIです。アプリケーションごとにVoiceActionの設定が必要です。

Assist API

Google Nowのようなアシスタントとアプリケーションのコンテンツを連携させるためのAPIです。Now on Tapのように連携する場合、ユーザー操作(ホームボタン長押し)で許可できます。もしアプリケーション側で連携を拒否したい場合はFLAG_SECUREフラグを使うことでアシスタントからは見れなくなります。android.app.Activity.AssistContentクラスは、コンテンツ共有のための新しいクラスです。

アシストAPIに対応するためには、Application.OnProvideAssistDataListenerを実装し、EXTRA_ASSIST_CONTEXTインテントが飛んできたとき用にActivity.onProvideAssistDataメソッドをoverrideしてください。アシストに必要な情報を引き渡すことができます。

Notification

Android MのNotificationは更に改善が進みました。NotificationManager.getActiveNotifications()メソッドを追加。いま表示され続けている通知が分かるようになっています。サンプルコードはこちらから。

また、Notification.BuilderにsetLargeIcon(Icon)、setSmallIcon(Icon)が追加されています。android.graphics.drawable.IconはAndroid Mから追加されたクラスで、Drawableリソースのコンテナが役割です。ベクタデータ、JPEG、PNG、形式を問わず統一的に扱うことができます。ニーズに合わせて画像を提供します(つまり、小さいアイコンが欲しいなら小さいデータを、大きいアイコンが欲しいなら大きなデータを渡す)。

指紋認証APIとトピックス

指紋認証のためにandroid.hardware.fingerprint.FingerprintManagerクラスが追加されました。指紋認証APIを利用する際はパーミッションが必要です。

<uses-permission android:name="android.permission.USE_FINGERPRINT" />

サンプルコードが指紋認証APIの実装時の参考になります。しかし現時点では指紋認証APIをもった実機がないためエミュレータでしか動作しません。

またAndroid Mでは以下のような機能も追加されました。

  • Bluetoothスタイラスをサポート
  • BLEのスキャン方法を改善(API追加)
  • 4K Display Modeによるアップコンバート対応
  • マルチメディア
    • オーディオ:MIDI対応、Android TVとのI/Fとしてマイクサポート。
    • ビデオ:MediaSyncの導入により音と映像の同期タイミングがとれるように。
  • Camera2 APIの改善
    • フラッシュ制御(Torch API
    • リプロセッシング対応によるRAW撮影の実現
      (ImageWriter経由で画像を取得して自由に処理して書き戻せる)
  • Android for Work
    • ファクトリリセットの制限
    • データ転送量のトラッキング
    • 操作不要のプロビジョニング
      (Googleアカウントを必要としない&デバイスへのサイレントインストール等)
    • Work status通知(プロファイルに指定されたアプリが実行状態であれば通知)

更に詳しい内容はAPIリファレンスやOverviewで確認できます。

以上、おつかれさまでした。

mhidaka: Software Engineerだよ。DroidKaigi Organizer / Androidと組込とRe:VIEW。techbooster主宰。mhidaka's writings http://booklog.jp/users/mhidaka 技術書典! http://techbookfest.org