サイバーエージェントでは、エンジニアに対して国内外のテックカンファレンス への参加を推奨しています。 Googleが5月に開催した開発者会議「Google I/O 2019」にもエンジニア達が参加し、先日ミクシィさんと合同で報告会を開催しました。そこで、CATSのAndroidエンジニアである降矢(@wasabeef_jp)が要約という形で発表したので、今日はその一部をお届けします。 DSC00016s まずは、Developer Keynoteで発表された「Kotlin」、「Android Q」についてご紹介しました。詳細は動画などをご覧ください。 (Developer Keynote動画)   KotlinDevelopes Keynote 数年前から急速に成長しているKotlinですが、現在Kotlin利用率はAndroidエンジニアにおいて50%を超え、そのGithub上では成長率No1の言語であることが明らかになりました。そのため今年以降もGoogleとしてはKotlin Firstとすることとし、Kotlinを第一言語にすると発表がありました。   この「Kotlin First」とは何を指すのか? スクリーンショット 2019-06-04 15.30.15 Developer Keynoteでもこのような図が出ていました。決して、Javaのサポートが切られるわけではありませんし、Java10までの機能をAndroidで使えるように努力しているということも言っておりましたが、今後新たにGoogleから提供されるライブラリはJetpack Composeを始めとし、Kotlinでしか利用ができないこともあるということでした。、今後はこのようなKotlin Firstの流れが強くなるということです。   Android QDevelopes Keynote Developer Keynoteで忘れてはいけないのが、Android Qの新機能です。これが全てではありませんが、いくつかピックアップして簡単にご紹介します。 スクリーンショット 2019-06-04 15.32.04   Foldable 「Foldable」はタブレット向けが中心になると思いますが、マルチウィンドウやマルチディスプレイの延長線上にあるような技術として発表がありました。 スクリーンショット 2019-06-04 15.41.05 今後「Foldable」を意識したアプリを開発するのであれば、Activity#onConfigurationChangedをこれまで以上に考慮して作る必要があります。これまでに無いアスペクト比がとても増えていてます。その全てのアスペクト比に対応すると、ユーザ体験が保証できない場合などには、minAspectRatioやmaxAspectRatioを設定できるので、これら設定してデザインを担保していきましょう。 マルチウィンドウは、Android Nから利用できる機能となりますが、画面を分割して複数のアプリを起動出来る機能になります。 スクリーンショット 2019-06-04 15.41.57 スクリーンショット 2019-06-04 15.42.54 android:resizableActivity=”true/false”で有効及び無効にできますが、例えば左側でチャットをしながら右側でゲームができる、といったようなことも可能となります。これがAndroid Qからライフサイクルが少し変わります。これまでは、マルチウィンドウで起動されたActivityが複数であっても、RESUMEDとなるのは1つで、それ以外はPAUSEDとなっていましたが、今後は全てのActivityがRESUMEDとなりうるので、動画再生で他のアプリと音声が重なってしまったり、物理カメラ1つを複数のアプリで奪い合うなんてことがないように考慮が必要となりました。 マルチディスプレイは、スマホアプリだけを考慮した場合には対応することが少ないかもしれません。 スクリーンショット 2019-06-04 15.43.37 Chrome OS への対応やスマホとサブディスプレイを併用して使う環境などで、どのディスプレイに表示するかを考慮する必要があるかもしれません。   Live Caption Live Captionは、動画再生時の音声をリアルタイムで認識して、画面上に字幕を行事することができる機能です。 スクリーンショット 2019-06-04 15.44.23   Dark theme 有機ELディスプレイにおいて、画面を暗くすることはバッテリー効率向上にも効果的です。Android Qでは正式にDark themeにシステムサポートしたので、Material Design UI componentsなどでDark themeに考慮した作りに対応していく必要があります。 スクリーンショット 2019-06-04 15.44.55   New location controls スクリーンショット 2019-06-04 15.45.32 これまでは現在地を取得する権限は1つでした。 それをフォアグラウンド及びバックグラウンドのどちらで利用するかは開発者が自由に決めていましたが、今後はそのアプリが知らぬ間にバックグラウンドで位置情報を取得することがないように、権限取得する際に新たなユーザ確認が必要となりました。   Scoped Storage これがAndroid Qの中で最も大きな変化の1つであると捉えています。 ここに図を3パターン用意しました。 スクリーンショット 2019-06-04 15.46.13 これまでは、SDカード内にデータを書き込みする際には、WRITE_EXTERNAL_STORAGEの権限を取得する必要がありました。 今後は、その権限を取得する必要がない代わりに、サンドボックス化という形で、自分のアプリの領域だけ簡単にアクセスができ、他アプリが書き込んだデータにアクセスする場合にはStorage Access Frameworkを利用しないといけません。また、アプリがアンインストールされた場合には、そのサンドボックスも初期化されるため、アンインストール後に前回のアプリデータが残るようなことがなくなりました。   Bubbles これまで、オーバーレイで何かを表示する場合などはSYSTEM_ALART_WINDOWの権限を取得して最前面に表示していましたが、それは表示しているアプリのプロセスが永続的に動作することになるので、バッテリーなどのパフォーマンスがよくない背景からFacebookのメッセンジャーのような表現が可能なBubblesという機能が生まれました。 スクリーンショット 2019-06-04 15.46.59   Gestural Navigation iOSに近いですが、エッジからバックに戻ることができるようになります。ただ、それを実現するためには、基本的にコンテンツはフルスクリーンで表示して欲しいということでした。ステータスバーとナビゲーションのカラーを透過するのが望ましいということです。 スクリーンショット 2019-06-04 15.47.39   この後はJetpackについての総評もお話させていただきました。 スクリーンショット 2019-06-04 15.48.13   そのほかの登壇者からも、各テーマに沿った発表をいたしましたので、ぜひ登壇資料でご確認ください。 『Android @I/O’19』 Daichi Furiya(@wasabeef_jp     『Jetpack Compose』 Taku Semba(@takusemba   『Camera X』 Moyuru Aizawa(@MoyuruAizawa   『Kotlin Coroutinesの対応』 Takahiro Menju(@takahirom   『Android Fireside Chat まとめ』 Yasuhiro Shimizu(@_yshrsmz     サイバーエージェントでは、Androidエンジニアによる勉強会を定期的に開催しており、connpassにて随時公開しています。ぜひフォローください。