本セッションの登壇者
セッション動画(YouTubeチャンネル登録もお願いします。)
あんざいゆきです。
私からは次のAndroid OSのメジャーバージョンであるAndroid 13について紹介します。
まずAndroid 13のリリーススケジュールですが、2月に最初のDeveloper Previewがリリースされ、その後Beta版がリリースされ、Platform Stabilityを経て、秋ごろに最終版がリリースされます。先日のGoogle I/OのタイミングでBeta2がリリースされています。
Android 13を試す一番お手軽な方法はエミュレータです。Tiramisuという名前のイメージを使います。
実機にAndroid13を入れる場合は、今まではPixel 4/5/6でしか試せませんでしたが、Bata2では他のメーカーもいくつか対応しています。
Android 13の機能をアプリで試す
Android 13で新しく追加された機能をアプリに組み込むには、アプリでAndroid 13をターゲットにする必要があります。
Android gradle plugin 7.0以降の場合は、compileSdkPreviewと、targetSdkPreviewにTiramisuを指定します。
Android 13の変更点
ここからは変更や機能を紹介します。
まずターゲットSDKバージョンに関係なく、Android 13のデバイス上のすべてのアプリに影響する変更です。一部詳しく紹介します。
・FGS Task Manager
通知のdrawer(ドロワー)からforeground(フォアグラウンド)サービスを停止できるようになります。動いているフォアグラウンドサービスはActive appsにリストされ、アプリの横にStopボタンが表示されます。このStopボタンが押されると、フォアグラウンドサービスだけでなくアプリ全体が停止します。
・Notification用のランタイムパーミッション
Notification(ノーティフィケーション)を送るのにパーミッションが必要になりました。
Android 12まではアプリをインストールすると、デフォルトでNotificationの送信が許可されている状態でしたが、Android 13からはデフォルトではNotificationの送信が許可されていません。そのため、Notificationを送る前にはパーミッションをリクエストする必要があります。
Android 13以降をターゲットとするアプリでは、他のパーミッションと同じようにAndroidManifestにPOST_NOTIFICATIONSパーミッションを宣言する必要があります。これをしないと、そもそもノーティフィケーションを送れるようになりません。
Android 13以降をターゲットとするアプリでは、カメラなどのruntime permissionと同じように、任意のタイミングでNotificationを送るパーミッションをリクエストできます。ユーザーがアプリの機能を体験したり、通知の必要性を感じたタイミングなどパーミッションをリクエストすることで、許可してもらえる可能性が上がります。
Android 12以前をターゲットとするアプリをAndroid 13が走っているデバイスに新たにインストールした場合、Notificationチャンネルが作られた後で最初のアクティビティが開始されるとき、またはアクティビティを開始して最初のNotificationチャンネルを作ったときにパーミッションダイアログが自動で表示されます。パーミッションをリクエストするタイミングを調整できないので、ユーザーに拒否されることが増えるかもしれません。
「Android 12以前をターゲットとするアプリがすでにインストールされているAndroid 12デバイスを、Android 13にアップデートした」という場合、アップデートする前に通知がオンになっていれば、パーミッションダイアログが表示されるまで一時的許可状態になります。この状態では通知を普通に出すことができます。
アップデート後にアプリを起動すると、先ほどと同じタイミングでパーミッションダイアログが表示されます。ここでユーザが許可または拒否を選択しないでダイアログをそのまま閉じた場合、一時的許可状態が続きますがパーミッションダイアログが表示されます。
・Android 13以降をターゲットとするアプリに影響する変更
次はAndroid 13以降をターゲットとするアプリに影響する変更です。Android 12以前をターゲットとするアプリには影響しません。パーミッション系の変更が多いです。一部紹介します。
新しくNotification用のパーミッションが導入されましたが、Notificationパーミッションを許可した場合、そのアプリのフォアグラウンドサービスはForeground Service Task Managerには表示されますが、通知エリアには表示されなくなります。
近くのWi-Fiをスキャニングする場合、これまではロケーションの権限が必要でしたが、新しくnearby Wi-Fi devicesというruntimeパーミッションが用意されたので、Wi-Fiのためにロケーションの権限をリクエストしなくてよくなりました。
Android 13からはREAD_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGEの代わりに新しく追加された、READ_MEDIA_IMAGES, READ_MEDIA_VIDEOS, READ_MEDIA_AUDIO permissionを使う必要があります。
Android 13で新たに実装された機能
次はAndroid13で新しく入った機能をいくつか紹介します。
・Private back gesture
バックジェスチャーをしたときに戻り先のプレビューが見れて、そのままバッグを続けるかやめるかできるようになる機能です。Android 13のファイナルリリースからデベロッパーオプションを有効にすると使えます。
Android 13以降の次のメジャーバージョンまでに対応することが推奨されているので、次のメジャーバージョンでは通常のユーザーも使えるようになると思います。
・Themed app icons
ホーム画面のアプリアイコンを単色にするモードがあります。
Android 12のランチャーでもBeta版が使えたりします。これに対応するには単色用のアプリアイコンを用意してadaptive-iconのmonochromeに指定します。
・新しいPhoto Picker
新しい Photo Pickerが利用できるようになっています。画像と動画を取得することができ、最大取得数も指定することができます。利用するには、メディアストアのACTION_PICK_IMAGESを使います。
・アプリごとの言語設定
システム全体での言語設定に加えて、アプリごとに言語を設定できるようになりました。ユーザは設定アプリのアプリ情報の画面や、言語と入力の設定画面からアプリ毎の言語を選択できます。
アプリごとの言語設定を自分のアプリで利用する場合は、対応する言語を記述したファイルを用意して、それをAndroidManifestで指定します。
・日本語の折り返し位置の改善
日本語の改行位置を文節に合わせる設定がTextViewに追加されています。残念ながらJetpack Composeはまだサポートされていません。
まとめ
まとめです。
Android 13で自分のアプリを実行して問題がないか確認しましょう。またAndroid 13の新しい機能を試してみましょう。とくにNotification用のパーミッションには早めに対応した方が良いと思います。
ありがとうございました。