Mokelab Blog

#61 I/O 2021 - What's new in Android

Androidの最新状況をお知らせする毎年恒例のセッションです。

Android 12

Deprecatedアノテーション

Developer Preview 1で@Deprecatedの利用が非推奨になっていました。つまりDeprecatedアノテーションの定義に@Deprecatedが付けられるという、「お前はいったい何を言ってるんだ」状態になっていました。これはドキュメント生成ツールのバグのせいだったようです。Google I/O 2021のタイミングでベータ版になり、ツールのバグが直されたようで、アノテーションは再び使ってもよいことになりました。

カラーパレット

Theme.DeviceDefaultTheme.DeviceDefault.DayNightを使うことで、システムで提供しているカラーパレットにアクセスできるようになります。基調講演でも触れられていた「Material You」に関連するトピックです。通知やウィジェットの色を設定する際、システムのパレットの色を使うことで調和のとれた体験を提供できるようになるでしょう。

クラッシュ時の動作

動画ではクラッシュしたあと、すぐ再起動できるようになっているとありましたが、手元のベータ版ではよくわからず。RuntimeExceptionを投げるアプリで確認してみたところ、たしかに「xxxは停止しました」のダイアログは出ませんでしたが。。。

ウィジェット

84%のユーザーがホームに少なくとも1つのウィジェットを置き、66%ほどのユーザーが2つ以上置いているようです。Google検索ウィジェットと時計で2つというカウントなのでしょうか。。。?

Android 12ではウィジェットを置くのが簡単になるようです。ウィジェットの検索が可能になっていました。また、ウィジェットのスタイルも新しいものとなるようです。

RemoteViewを構築するための新しいAPIが追加されるようです。詳しくはRefreshing Widgetセッションで。

起動アニメーション

iOSでは最初からスプラッシュスクリーン機能があり、アプリそのものの読み込み時に任意の画面を表示できます。この機能がAndroidにもやってきます。プロセスが立ち上がってないときに起動アニメーションが表示されます。デフォルトでアプリアイコンが表示されますが、この部分もカスタマイズできます。

通知

テンプレートの再設計が行われました。カスタムのRemote Viewを使っている人は対応が大変かもしれません。また、フルカスタムな方法は非推奨になります。

また、通知タップ時は直接アクティビティを起動することが必須になります。いろんな理由でサービスやブロードキャストを叩き、そこからアクティビティを起動する「通知トランポリン」は動作しなくなります。既にトランポリンの仕組みを使っているアプリは対応が必要になります。

トースト

どのアプリがトーストを出そうとしたか、今までユーザーはわからなかったのでアプリアイコンが表示されるようになりました。

アイコン付きトースト

アイコンがついたせいなのか、表示されるテキストの量も減っています。1〜2行程度になるよう調整しましょう。

また、トーストの表示回数に関し、レート制限が入ります。延々とトーストが出続けるみたいな状況はAndroid 12で減るでしょう。

Picture in Picture

なめらかな遷移のためのAPIが追加されています。公式ドキュメントはこちらです。

非ビデオ系のために、setSeamlessResizeEnabled(false)を使うことでクロスフェードのアニメーションになります。

コンテンツのぼかし

実はAPI 1あたりにあり、特殊なチップが必要だったため廃止された機能の復活のようです。setRenderEffect()を使うことで、ぼかし効果をつけることができます。

リスト表示に関する改善

リストの端に到達した際、リストの項目がちょっとだけ伸び縮みするグロー効果が入ります。すべてのアプリでデフォルトONとなり、手元のベータ版だとTwitterアプリでもグロー効果を確認することができました。ビューを重ねてるようなアプリだと修正が必要になるようで、Facebook Messengerだと背景部分がおかしなことになっています。。。

リストタップ時のリップル効果で、両端にパーティクル(キラキラ)が表示されるようになりました。

キラキラ

AVIF

新しい画像フォーマットとしてAVIFがサポートされます。詳しくはAndroid mediaセッションにて。

動画の自動トランスコード

アプリが新しい動画の形式に対応できない場合、H.264形式に自動でトランスコードしてくれます。アプリでXMLファイルを用意し、どの形式がサポートしてないかをシステムに伝えることでこの機能が有効になります。

オーディオの触覚効果

再生中のオーディオトラックをAPIに渡すことで、振動や触覚パターンが生成されます。この機能は機種によっては使えない可能性があるので、事前チェックが必要。

プライバシー

位置情報

今まで、Bluetoothのスキャンをする際、位置情報の権限が必要でしたが、Android 12ではBluetoothの権限を使うことで、スキャンの際に位置情報の権限が不要となります。

ユーザーは、アプリに正確な位置情報を与えない選択を設定からできるようになります。

クリップボード

既にiOSでは実現されている機能ですが、クリップボードで貼り付けをした際、どのアプリでセットされたデータなのかをトーストで表示するようになりました。

フォアグラウンドの制限

フォアグラウンドサービスを使うと通知がでますが、数秒で終わるタスクでも通知がでてしまい、気づいたときには通知が消えていて「あれ?」となることがありました。Android 12では10秒以内に終わった場合、通知が表示されないよう修正されました。

すぐ実行したいジョブがある場合、WorkManagerのExpedited Jobsを使いましょう。Android 12より前ではフォアグラウンドサービスを使って実行してくれます。

プライバシーに関するセッション

次の3つがあります。

コンテンツの挿入

今まではコンテンツの挿入に関するコールバックが3つ分かれていましたが、Android 12ではsetOnReceiveContentListener()の1箇所で扱えるようになりました。Android X版は今対応中とのこと。

パフォーマンス

新しいJetpackライブラリとしてmacrobenchmarkが加わりました。

Wear

Now is the time What's new with Wearというセッションを見ましょう。

ツール

次の3セッションがあります。

Jetpack

What's new in Jetpackというセッションを見ましょう。

Jetpack Compose

次の2セッションがあります。2021年7月に1.0リリースの予定。

まとめ

今年のWhat's new in Androidセッションは概要のみが多く、詳細を知るには各セッションを見ていく必要がありそうです。本ブログでもなるべく解説していきたいと思います。

本サイトではサービス向上のため、Google Analyticsを導入しています。分析にはCookieを利用しています。