2021年2月18日10:00AM(現地時間)、GoogleよりAndroid 12 Developer Preivew1が発表されました。最新のAndroid 12(Android S)の変化点をダイジェストでお伝えします。
主にセキュリティの強化(アプリ制限の追加)およびコミュニケーション機能です。例年どおりであればDeveloper Preview 1(DP1)は動作確認のための最低限の変更が適用されています。今後のプレビューリリースでは更なる新機能が追加されるでしょう。DP1では特にAndroid OSとしてのSecurity・プライバシー機能強化が目立つ内容となり、この傾向はAndroid 11までの流れを汲んでいます。
大きなトピックとして現在のAndroid OSの提供機能はセキュリティ・プライバシーやOSアップデートといったOSライクなものへと変化させていっており、これまでOSの責務であったUIや互換性維持といった役割をライブラリやKotlin言語の機能に切り離しつつあります。この変化は進化スピードが要求されるアプリ開発を支えるためのものです。とくにUIの変更はOSと独立したJetpackでの提供が進んでおり、2020年2月現在では、新しいネイティブUIツールキットのJetpack Composeの1.0リリースが近づいています。
2021年2月24日開催予定の開発者向けイベント#TheAndroidShowのテーマにJetpack Composeが選ばれており、今回のAndroid 12 DP1の公開と合わせてJetpackライブラリを利用する開発者へのサポートも注力していくことになります。
本記事ではリファレンスやマイルストーン、変更点一覧を開発者向けに解説します。続きをどうぞ。
開発者向けの公式リファレンス
記事執筆にあたって参照したリファレンス集です。
- Android 12 Depeloper Preview 1公開ブログ
- Android開発者向けのイベント The Android Show
- Android 12新機能概要
- アプリのAndroid 12対応スケジュール
- リッチコンテンツ向けAPIなど新機能の紹介
- Android 12でのアプリへの影響
- すべてのアプリ:https://developer.android.com/about/versions/12/behavior-changes-all
- Target SDK = S(Android 12)のアプリ:https://developer.android.com/about/versions/12/behavior-changes-12
- APIリファンレスのDiff
今後のマイルストーン
Android 12は2021年2月公開のDeveloper Preview 1を皮切りに、5月にはBeta 1、8月にBeta 4をリリース予定としています。2021年8月以降はAndroid SDK APIの変更が確定する安定版(Platform Stability)に移行するスケジュールです。
新機能・変更点の要約
Android 12 DP1の主な変更点はプライバシーとセキュリティが中心です。これはAndroid 11までの傾向を踏襲しています。変更点の中にはアプリ向け新機能を示唆するものもありますが、次のような信頼性・安全性の取り組みが特徴的です。
- WebViewのSameSite cookie対応
- MACアドレスへのアクセス制限をさらに強化
- アプリケーションの安全性強化
新機能にはメディアエンコーディング、アプリケーションのリッチコンテンツ連携が挙げられています。次のスクリーンショットは新しいコンテンツ受信APIのデモです。
これら以外にもanimated GIFとWebPのデコード改善(イメージデコーダーの改善)、オーディオに合わせて触覚フィードバックを発生させることも可能です。詳細は公式ブログおよび新機能紹介を参考にして下さい。
アプリ挙動への影響
アプリケーションそのものへの影響は大きくありません。しかしAndroid 11から12への変更にあわせて細かな点で差分が発生しています。特に知っておくとよい内容をピックアップしました。
アプリへの影響を考えるときには2種類、つまりtargetSdkVersionがS(Android 12)のもの、Android 11までのSDKでビルドしたものの2つの区分がありますが機能差異の理解を優先するために区別していません。詳細はリファレンス(すべてのアプリに影響/Android 12をTargetにしたアプリで影響)で把握することをお勧めします。
- ジェスチャーナビゲーションの改善:没入モード(immersive mode)での操作を1回のスワイプで移動できます。これは通常のアプリ操作と一致するようにあわせた変更です
- 特定の種類のアプリのみフォアグラウンドサービスの通知が最大10秒遅延されます。短時間のタスクでは通知バーでのアイコン点滅のようにみえてしまい、ユーザーに不審に感じさせていました。それを抑止します
- 特定のforegroundserviceTypeをもったアプリが対象です
- 不審なタッチイベントのブロック:オーバレイによるタッチイベント消費を防ぎます(アクセシビリティやアシスタント、IMEによるView表示は適用対象外です)
- アプリ内での利用や完全に見えないWindow、透明なWindowなどはタッチは許可します(例外の一覧)
- システムダイアログへの干渉が禁止になりましたACTION_CLOSE_SYSTEM_DIALOGSインテントはSecurityExceptinを返却します
- 非SDKインターフェイスへのアクセス制限が強化されました
毎回、手が加えられている通知(ノーティフィケーション)では表示の仕方を変えるカスタマイズ範囲が大きく変わっています。
見た目が大きく異なるとユーザーが混乱してしまうという背景から、targetSdkVersionがSのアプリでは通知レイアウトは標準のスタイル+指定したViewStyleという扱いに変わりました。
フォアグラウンドサービスについても新たな制限が加えられています。Android 12をTargetとしたアプリではバックグラウンド動作している状態からフォアグラウンドサービスを起動できなくなります。影響を受けるアプリの場合、例外をのぞいてJobSchedulerやWorkManagerへの移行を促しています。
この挙動の変更についてはPendingIntentの制限も影響しており、公式リファレンスではパフォーマンスの課題とも紹介されています。説明を読む限り、Serviceや通知のタップをきっかけにしたアプリ起動(これは次に示す場合は対象外です。たとえば表示状態のActivityがあるケースやFirebase CloudMessagingによる高優先呼び出し、ジオフェンスによる起動、Activityを持つバブルやウィジェットからの呼び出しといった想定ユースケースを除いた)
Activityなしで常駐しようとする試みを抑止しています。
Android 11まではNotification trampolines(通知トランポリン)というPendingIntentを介した手法でバックグラウンドからでもフォアグラウンドサービスを起動できていました。しかし、この挙動はバッテリやパフォーマンスに影響が大きいためAndroid 12からは禁止されます。
Android 12への備え
ここまで紹介してきた Android 12 Developer Preview 1はDP1の名前が示すとおり、今後の開発者のフィードバックを期待するものです。頻繁に動作が変更される可能性が高いため更新情報を注視してください。
安定版の提供はマイルストーンによると2021年8月、正式なリリースは例年であれば9月~10月の時期であるため余裕がありますが互換性検証のための機能も用意されています。
互換性検証ツールは、Android 12にアプリを対応する際の検証やデバッグを助ける心強い味方となるはずです。
おまけ:Android 12 API Diffs Report
実はAndroid 12 Developer Preview 1とAndroid 11の間での差分も公開されています。APIリファレンスの変化からどんな機能が実装予定なのか、読み解いていきましょう。
なお筆者の独断と偏見による予想であるため今後の提供を保証するものではありません(通知バブルはAndroid 10では提供が間に合わず、11まで正式リリースが遅れたりしました)。
- android.app.appsearch:プライバシー保護の観点からアプリケーション情報が取得できなくなった背景があったため新しいインターフェイス提供のため追加するのかもしれない
- android.graphics:プラットフォームAPIを透過的に扱うため、どんどんアトミックなAPIが公開されていっている(Android 10~11にかけてほぼ完了しているがfontのグリフ範囲取得などは追加されてるし、TextRunShaperというテキストレンダリングすら露出し始めている)。Jetpack Composeなどでの効率的なレンダリングを可能にする変更は今後も入りそう
- android.os:BugreportManagerという特権機能っぽいものが追加されている
Android 12のAndroid RuntimeにはGoogle Playストアアプリを経由したシステムの部分アップデートなどの新機能も取り入れられています(System Updateを経由せずにパッチが当たったり、セキュリティアップデートが適用できるようになりそうです)。Androidの普及に伴い、モノリシックなOSではなく要素ごとに最適化が進んでいます。
- Google Playストアを活用したOS機能の更新
- 随時最新を取り入れることができるKotlin言語機能
- 新機能提供および互換性を確保するJetpackライブラリ群
また新しいネイティブUIツールキットのJetpack Composeも控えています。すべての利用シーンをカバーするにはまだ十分ではないかもしれませんが、全体をみるとアグレッシブな進化が続いています。#TheAndroidShowを始めとして開発者とのオンラインコミュニケーションも始まり、執筆時点では詳細が伝えられていないAndroid Studioの更新など今後の情報が楽しみです。
今回の記事は公式リファレンス、ブログ記事の初出情報を元にしており、Google I/Oのような開発者との直接的なディスカッションがないものです。可能な限り正確な表記を心がけていますが誤りを含んでいる場合があるかもしれません。もし見つけたらTwitterなど @mhidaka までご連絡ください。