inFablic

Fablic開発者ブログ

Google I/O 2017 セッションまとめ Part 1

f:id:hydrakecat:20170619230331j:plain

こんにちは。Androidエンジニアの黒川(@hydrakecat)です。

Google I/O 2017から既に一ヶ月が経過してしまいましたが、みなさんはどれくらいセッションの動画で見たでしょうか。 この連載記事は、I/O セッションのうち、私が気になったものをピックアップして簡単に解説するものです。今回はAndroidのWhat’s New系セッションをご紹介します。すでに見たものもあるかと思いますが、どの動画を見るか迷っている方の参考になれば幸いです。

What’s New in Android

このセッションでは、Android Oの新機能やKotlinサポートといったAndroidにまつわる大きな変更について解説されています。個人的には以下の点が興味深かったです。

Picture-in-PicutreとMulti-Displayのサポート

Android O Previewのページでも触れられていますが、OからはPicture-in-Pictureがサポートされます。また端末によっては、アプリの画面を別画面に表示することが可能になります。アプリの用途によっては面白い使い方ができそうです。

WebViewのSafe Browsingとマルチプロセス化

WebViewでSafe Browsingがサポートされ安全性が増し、またマルチプロセスになったことで、クラッシュ時にアプリでハンドルすることが出来るようになったようです。また、Renderer Importance APIというのが追加され、端末の空きメモリが低下したときにWebViewがメモリを確保するかどうかを指定できるようになったようです。WebViewで大事な処理をしている方はチェックしてみた方が良いでしょう。

Autofill

こちらもAndroid O Previewのページで触れられていますが、Oではフォームのオートフィルが可能になります。Chromeで既に実装されている機能をアプリにも適用したもので、キーノートでは、新しい端末に移行してTwitterアプリにログインするときに、自動的にユーザー名とパスワードがフィルインされるデモがありました。

いまのところ、開発者が大きく対応する必要はなさそうですが、ユーザーのログインという離脱率が気になるステップを簡略化できる手段として注目したいところです。

Downloadable Fonts, Fonts in XML

こちらも待望の機能かもしれません。Android O以降およびサポートライブラリで、フォントをapkに含めずに動的にロードできるようになりました。また、フォントリソースをXMLで定義できるようになったようです。

Adaptive Icon

こちらは、端末ごとにホーム画面のアイコンの見せ方を変えられるようになったという話です。開発者としては、アイコンが既定の条件を満たすことを担保しなければなりません。詳細はWhat’s new in Notifications, Launcher Icons and Shortcutsというセッションで述べられていました。

通知チャンネル

通知にチャンネルという概念が導入されました。targetSdkVersionがAndroid O以降の場合はチャンネルを設定していないと通知が表示されないようなので、注意が必要です。

Java 7、Java 8標準API

Android O以降限定ですが、Java 7、Java 8の標準APIのうち、つぎのものが新たにサポートされるようです。Android O以降でしか使えないため、まだそれほど恩恵は受けられませんが、java.timeやjava.nio.fileは待ち望んでいる人も多いのではないでしょうか。

  • java.time
  • java.nio.file
  • java.lang.invoke

Architecture Components、Background apps

今回、新たにArchitecture Componentsというアプリのライフサイクルを簡単に扱ったりSQLiteを簡単に扱うことができるライブラリが公開されました。また、Android Oではバックグラウンドの制限が厳しくなっており、対応が必要となるものもあります。

これらについては、個別のセッションで詳しく述べられています。

What’s New in Android Development Tools

こちらのセッションも毎年恒例の、Android Studioの新機能についてのセッションです。私が気になったのはつぎのような内容でした。

Profiler

Android Studioにプロファイラーが組込まれました。いままでもCPUやメモリの使用履歴を見ることは出来ましたが、このプロファイラーではタッチイベントやアクティビティの生成・破棄も同時に見ることができます。 さらに、ネットワーク通信も監視することができ、 Facebook の Stetho のように各通信のリクエストとレスポンスもチェックできるようです。 いままでのCPUモニターやAllocation Trackerがさらに統合されて強化されたもののようです。

Build

Android Studio 3.0からはGradle 4.0がベースになります。一番嬉しいのは、GoogleのMavenレポジトリ maven.google.com が追加されたことでしょう。さらにショートカットが用意され google() というメソッドだけで利用できるようです。

repositories {
  maven { url 'https://maven.google.com' }
// or
  google() // 4.0
}

また、引き続きビルドのパフォーマンスもインクリメンタルビルドおよびビルドキャッシュの観点から図られているようです。 タスクレベルのキャッシュについてはGradle 3.5から入ったものの、まだデフォルトではオンになっておらず、4.2からデフォルトでオンになる予定とのことでした。 面白いのはキャッシュにいくつか種類があるという話で、ローカルキャッシュはブランチを切り替えたときにも再利用可能なキャッシュで、2つ目のディストリビュートキャッシュは、チーム内で共有できるようなキャッシュとのことでした。 どれくらいビルド時間の短縮に効くのか分かりませんが、Android Studio 3.0ではキャッシュ対象をさらに増やすとのことです。

Flavor

Android 3.0では、GradleのCompilation Avoidanceを利用するために、アプリのflavorから依存モジュールのflavorが自動的に選択されるようになりました。 これはこれで良いのですが、一方flavor dimensionの指定が必須となったために、多くのプロジェクトがAndroid Studio 3.0に移行するとflavor dimensionがないよというエラーが出るようです。 詳細はMigrate to the New Plugin | Android Studioにありますので、Android Studio 3.0に移行する人は確認しましょう。

What’s new in Android Support Library

3つ目に取り上げるのは、サポートライブラリの変更点についてのセッションです。

minSdkVersionの引上げ

既にご存知の方も多いと思いますが、サポートライブラリv26からminSdkVersionが14になりました。また、先ほども書きましたGoogleのMavenレポジトリからサポートライブラリもダウンロードできるようになっています。

コントリビューション

この話が公式にされるのは、ちょっと珍しいように思います。Issue Trackerが新しい場所に移り、また今はバグ修正だけらしいですが、パッチを受け付けているようです。 コントリビューションガイドラインは https://android.googlesource.com/platform/frameworks/support にあります。

フォントリソース

リソースにフォントが追加できるようになりました。以前は自分でTypeFaceをコードで指定していたのが、android:fontFamilyで指定できるようになったようです。 またFont XMLという形式がサポートされ、XMLでフォントを定義できるようになりました。

Downloadable Font

FontsContractCompatというクラスを使うことで、使いたいフォントを必要に応じてダウンロードできるようになりました。これを使うことで、複数のアプリで同じフォントを使っているときに、無駄に何度もダウンロードしなくて済むようにできます。さきほどのFont XMLでプロバイダを指定すれば、この FontsContractCompat が使われて自動的にフォントをダウンロードすることもできるようです。

また、Android Studio 3.0ではFont Pickerからフォントを指定することもできます。

https://developer.android.com/preview/features/downloadable-fonts.html

Emoji Compat

絵文字が文字化け(いわゆる豆腐)にならないようにするためには、フォントを更新する必要があります。 EmojiCompatを使えば、自動的に新しい絵文字を使うことが可能です。Downloadable Fontのようにダウンロードすることもできますし、自分でバンドルした絵文字を指定することもできます。 EmojiTextViewというViewが追加されているので、それを使えば自動的にEmojiCompatを使ってくれるようです。

TextView Auto Sizing

TextViewのサイズを変更したときに自動的にフォントサイズが変更するViewです。app:autoSizeTextTypeuniformを指定することで使えます。 他にも細かい属性を指定することでカスタマイズできるようです。

Dynamic Animation

ユーザーのスワイプ速度に応じて揺れ幅が変わるバネの動きのような、動的なアニメーションを簡単に作れるようになりました。こちらについてはAndroid Animations Spring to Lifeというセッションで詳しく述べられるようです。

Vector Drawable Compat

android:fillTypeという属性でSVGのfillタイプを指定けいるようになりました。また、2つのVectorDrawableを指定することで、その間のアニメーションを自動的に生成することも出来るようになったようです。

その他の変更

  • PreferenceDataStoreというクラスが追加されました。これを使ってPreferenceの保存/読込時の挙動を設定できるようになりました
  • FragmentManager#executePendingTransaction()commitNow()FragmentMangaerがトランザクションを実行中に実行された場合にエラーを投げるようになりました
  • FrameMetricsAggregatorというクラスが導入されアプリのフレームレートをチェックすることが出来るようになりました

まとめ

この記事では、つぎの3つのセッションを取り上げて簡単に解説をしました。Google I/Oではこれらのセッションは恒例となっており、Androidアプリ開発者はとりあえず見ておいて損はないと思います。

参考記事


Fablicでは、I/Oで発表されたような最新の技術を積極的に取り入れてAndroidアプリの開発を行っています。共にプロダクトを作り上げていきたいアプリエンジニアの方のご応募もお待ちしております!