2020年6月10日(現地時間)、GoogleよりAndroid 11 Beta 1と開発環境のアップデートが発表されました。
Android 11の新機能は人とのコミュニケーション・プライバシー・デバイスコントロールに焦点が充てられています。またこれらの開発を支えるAndroid Studioをはじめとした開発環境も改善が行われており、同時に発表されたAndroid Studio 4.2 Canaryでは Kotlin Symbol Processingなどビルドシステムのリプレース(KAPTとの入れ替え)を始めとした最適化が行われています。またエコシステムを支えるJetpack ライブラリによる互換性確保の取り組み、そして新UIツールキットJetpack ComposeのDeveloper Preview2の登場など話題が盛りだくさんです。
- Unwrapping the Android 11 Beta, plus more developer updates
- Android 11 Beta is here
- 公式動画の再生リスト(1番目、2番目はイベントキーノート)
オンラインでの発表ですので上記ブログポスト・公式サイトですべての情報にアクセスできます。本記事ではこれら新機能の解説を目的に導入に至った背景をAndroid 開発者の目線でお伝えします。
主なトピックは次のとおりです
- Android 11 Beta 1リリース:バブルやプライバシー機能が強化
- Jetpack Compose Developer Preview 2が登場
- Android Studio 4.2 Canaryリリース:Composeサポートなど強化
- Dagger HiltやApp startupがJetpackファミリーに追加
- Google Play Consoleが大規模リニューアル。β版を6/5から提供
Android 11 Talks
Android 11の公開といっしょに公式の技術的な解説動画12本も掲載されています。英語の動画であるため(例年、しばらくするといくつかが日本語化されて翻訳テロップが付いていました。今回、いくつか確認したところ最初から日本語字幕がありました)ここでは新機能とともに概要を紹介します。気になったものは動画もみてください。
注目のJetpack ComposeもDeveloper Preview 2が公開
新しいUIツールキット Jetpack Composeのロードマップも公開されるなど、新しい情報が目白押しです。Jetpack Composeの更新内容の紹介はこのあとも続きますが、Basicな動作を確認できるチュートリアルは理解に役立つのでぜひ上記のリンクからダウンロードして試してみてください。
Android 11の新機能
人中心のコミュニケーション・プライバシー・デバイスコントロール
コミュニケーションについては次の動画でのSystemUIの変化をもとにコミュニケーションとデバイスコントロールの2点について解説しています。
- Android 11ではコミュニケーション専用の通知エリアを追加
- 画面にフローティングするBubblesの正式追加
Bubblesは Android 10で開発者オプション機能として導入されていましたが、この度、正式に新機能化しました。デバイスコントロールはIoT機器向けのAPIセットです。UIそのものは端末の電源ボタンを長押しすることで一元的に、利用者が迷わないようにまとめられています。Androidをインターフェイスとして様々なIoT機器と連携する前提の変化です。
コミュニケーション(Conversation Aria)、デバイスコントロール以外にもメディアプレイヤー向けの通知領域も確保するなどそれぞれのコンテキストに合わせた使い方を提案したいという意図がうかがえます。
Android 11におけるプライバシー強化
プライバシーはユーザーによる管理をよりわかりやすく、直感に反しないよう扱われます。パーミッション管理ではAndroid 10で「フォアグラウンドのみ許可」が多いとの調査からより強化されています。アプリ起動時のみ有効なワンタイムパーミッションを導入し、バックグラウンドでの位置情報取得を制限します。
バックグラウンドでの位置情報取得制限は2021年までを猶予として以後、対応を必須化される見込みです。
Android 11からはOSがアプリが使われてないと判断した場合、すべてのパーミッション許可を取り消します。ユーザーは次にアプリを使ったときにパーミッションダイアログをみて再度許可を与えなければなりません。
プライバシーへのケアは自身の位置情報だけでなく、 マイクやカメラもフォアグラウンドアプリでのみ利用できる制限が増えました。ユーザーが自分の情報を、より適切に管理(アプリへ提供するか否かを判断)できるようになっています。
これら以外にもアプリがセンシティブなデータにアクセスしないか、管理するためのAPIを追加しています。
- Callback on data access
- Feature tagging
アプリが巨大化した場合に自分自身がどのようにセンシティブなデータを扱っているのか、わからないときが発生します(スーパーアプリやサードパーティSDKの利用によるブラックボックスを想定しているようです)。この場合にデータアクセスを監視してソースコードの複雑性を管理する機能として役に立ちます。
プライバシーやアプリのセキュリティ強化を踏まえ、
Android 11からはApp Storageは他のアプリケーションからアクセスできないように自分自身のみが使えるPrivateに変更されました。ファイラー(エクスプローラやFinderのような端末にある全てのファイルを操作したいツール )はAll Files Accessという新規APIを使わなければなりません。この場合、Play Storeではマニュアルレビューが実施されるなど公開のハードルもあがります。
モダンな開発への進化
Android Studio 4.1 Beta & 4.2 Canaryをリリース
開発環境の面では開発者を助ける機能として次のものが追加されました。いくつかはAndroid Studio 4.0や4.1のころからあったものですが認知が進んでいないため動画でも何度も解説しています。
- ワイヤレスでのADBデバッグ
- AndroidエミュレータをAndroid Studioに内蔵
- Kotlin Symbol ProcessingによるGradleタスクのキャッシュ(ビルド高速化)
- Jetpack Compose DP2サポート(Android Studio 4.2のみ)
What’s new in Android Development ToolsではAndroid Studioのプロダクトマネージャが Layout InspectorやBuild AnalzerなどAndroid Studioを操作してのデモを紹介しています。とくに動画5:50付近からはじまるJetpack ComposeのPreview機能(Compose対応のUIは通常のViewと異なったプレビュー機能があります)は、デプロイやエミュレータ越しの操作ではなくAndroid Studioからそのままロジックやレイアウトを検証できる強力なツールで、デモは一見の価値があります。
デザインツールの充実
Android Studioで画像や動きを扱う際に便利なツールの紹介動画です。Resource Manager、Navigation Editor、Layout EditorそしてMotion Editorを取り扱っており、こちらも使い方デモが中心です。
言語・ライブラリでの開発改善アプローチ
Play Storeの内部統計データから2020年のトップ1000アプリのうち70%がKotlinを利用していることに触れ、開発改善のためにKotlin言語の開発チームと協力しながら新しいIRバックエンド・フロントエンドコンパイラなど新機能を作っていると紹介。
- Javaへのサポートにも触れ、Java8のサポートやD8によるdesugaringがAndroid Studio 4.2で標準となる
- KotlinのOSSプロジェクトとしてgRPCとProtoBufが進行中(5:23頃)
Kotlin 1.4 Preview(M1,M2を指していると推測)への協力に加え、Gradleプラグインのインクリメンタルコンパイル を改善中とのことです。Kotlin Sympol Processing(KSP, goo.gle/ksp )ではDeveloper Previewながらアノテーションプロセッサの速度を30~40%高速化するなど期待が持てます。
コルーチンが非同期処理手法として公式に推奨
Coroutinesを推奨することとともにJetpackでもCoroutinesを積極的に利用していくことも合わせて示しています。本日すでにLifecycleおよびWorkManager、Room の3つのライブラリがコルーチンに対応しています。
What’s new in Android Jetpack
JetpackはAndroidの互換性維持や一貫したAPIを提供するライブラリ集です。DI(依存性注入)が一般的に使われるようになったことからDaggerをAndroidに特化して使いやすくなったDagger Hiltを紹介、新しいJetpackライブラリとして初期起動の最適化を図るApp Startupが登場しました。
それら以外にもCamera X Beta、WebKitのバージョン1.2.0、Game SDKなど盛りだくさんの内容でJetpackの役割を広げていることが伺えます。
マルチスクリーン対応を見据えたJetpack Window Managerのセッションです。これまで利用していたDisplay APIsでは不十分となりAndroid 11ではDeprecated APIsが増えています。Foldableのようにヒンジ(曲がる部分がディスプレイ上にある)場合のレイアウトなども考慮して今後は実装だけでなく画面構成の考え方も学ぶ必要があるでしょう。
新しいUIツールキット Compose
リアクティブプログラミングに対応した新しいUIツールキットとして期待されているJetpack ComposeのAndroidの大きな変化として捉えられています。これまでのViewとは根本的に異なり、Androidのプログラミングパラダイムをより生産性を高くできると考えられているためです。
Jetpack ComposeではUIを宣言的に(これまでのXMLとは異なってソースコード上の)関数として表現するため簡単にUIを表現できます。描画に関わる手間をツールキットに任せられることもメリットです。動画やチュートリアルをみてもらえるとどうしてこれが動くのだろう、と少し不思議な感覚になるかもしれません。
ComposeでUIを作った結果としてXMLは不要となり、表示されているか確認するのに実機にデプロイして動作確認をすることは随分と減るはずです。Android Studio上でPreview表示して動作確認したり、UIのテストもエスプレッソなどを使わなくてもソースコード上で完結できるようになります。
今回の発表で次の機能が追加されました。
- Viewとの相互運用(new!)
- アニメーション機能 (new!)
- テスティングAPIの追加(new!)
- ConstraintLayoutに対応(new!)
- アダプターリスト(フィルタリングなど)への対応(new!)
- テキスト表示および編集可能テキスト(new!)
- マテリアルコンポーネント、テーマ、グラフィックAPI(以前から)
- ウインドウマネジメントへの対応(以前から)
- インプット・ジェスチャーへの対応(動作不安定ながら以前から対応)
ロードマップも公開されてました。2020年の夏にAlpha版、2021年に1.0版を予定しています。まだAlpha版にも達していないので気が早いですが今後に期待ができる機能であることには間違いありません。
アプリをグロースするGoogle Play
Google Play Consoleの大規模リニューアルが発表されました。大きな変更としてアプリの公開フロー・チームメンバーの権限管理が見直されており、ベータ版を6月5日(現地時間)から利用可能です。
Google Play Consoleのアップデートは6:50から紹介しています。動画では、Google Play PassやGoogle Play PointといったPlay Storeでのグロース施策の紹介に続いて、Android App Bundleが2021年から新アプリで対応必須になるなど開発者に気になるニュースを発表しています。
What’s new in Play CommerceではPlay Storeでのマネタイズ手法についてアップデートを紹介します。New Trust Policyでは価格表記ルールが変わり、規約がそばに表示されており、アクセス可能であるUIが求められます。
またコンビニからGoogle Playへ現金でのチャージが可能になる(セブンイレブンやファミリーマートが動画で紹介されています)Cash Play Balance top up が6月6日より日本でも利用になることも合わせて紹介されました。サブスクリプションのリテンション施策も変化があると様々なユースケースを見通した課金体系の整理・拡充が行われています。
Billing Library Version 3も合わせて発表がありました。リリースノートは次からアクセス可能です。
Androidを取り巻く環境の変化
これまで12本の動画とブログポスト、および各種メディアから得た情報を総合的に解釈し、開発者の目線でアップデート内容をお送りしまいた。Google I/Oではなくオンラインでの発表となったため、いつもと違う形で記事化しています。
2020年のAndroid 11 BetaとAndroid Studioを始めとした開発環境のトピックはこれまでより大きなものへと変化してきていると感じています。
Android 11の新機能という意味では目をみはるという形ではなくなってきましたが、どちらかというとOSの機能が増えるに従い、セキュリティやプライバシーなど根本から守るべきものへ役割が代わってきたといったほうがいいかも知れません。
Androidを取り巻くエコシステムをみるとビジネスの場としてもGoogle Play(そしてPlay Service API)の役割は重要なままですし、開発者にとって最も熱い話題であるJetpack ComposeもGoogle I/O 2019で発表された動くコンセプトモデルから2020年はAlpha版を目指すなど着実に成長し、 来年にはプロダクションレディです。Android Studioの改善はIDEの枠に留まらず、Kotlinという言語機能へのコントリビューションも行うほどであり、エコシステムの幅の広がりを感じるものになりました。
今やJetpackライブラリがAndroidの互換性問題をカバーする(いわゆるラッパー機能に近い)役割を持っており、OSは原始的なAPIを提供し(直近でもJetpack Composeのために露出したAPIなども散見されていますがこの流れは歴代のAPI Deffを見る限り、随分前から進んでいたと思います)、機能の提供はアップデートが容易なライブラリとアプリへと緩やかながら確実な変化を感じます。
今回の記事は開発者との直接的なディスカッションがないものです。可能な限り正確な表記を心がけていますが誤りを含んでいる場合があるかもしれません。もし見つけたらTwitterなど @mhidaka までご連絡ください。