Help us understand the problem. What is going on with this article?

Google I/O 2017で驚いたところ(Android多め)

More than 3 years have passed since last update.

概要

個人的なメモとして一通り書いていたのを軽くまとめたものです。
割とAndroidの開発者視点のものが多いと思います。

太字が特に驚いたところです。
言っている場所のYouTubeのURLを貼るので、詳細が気になったらそれを開いてみてください!
間違えているものがあればご指摘お願いします。(英語勉強します。)

Keynote

みんな見ている気がするので省略
Google lensでWiFiのパスワード入れられるのめっちゃ便利。AIファースト。

Developer Keynote

動画: https://www.youtube.com/watch?v=EtQ8Le8-zyo

repositories{  
 maven {  
  // Google Maven Repository  
  url "https://maven.google.com"  

What's new in Android

  • Android O
    • Picture in pictureがスマホ対応
      Picture in pictureに入るのに、ManifestファイルにresizableActivity="true"はいらなくなり、supportPictureInPicture="true"とactivity.enterPictureInPicture()を呼び出すだけらしい
    • findViewByIdに型のキャストがいらなくなりました。(これはcompileSdkVersionを変えるだけで適応されると思われるのでバージョンにかかわらず利用できるのではと思います。まだソースがダウンロードできないので検証できない)(知っていましたが反響が大きかったので、、)
    • 色やショートカット、通知についてはそのセッションについてで、、
  • Support Library v26
    • そのセッションについてで

Architecture Components - Introduction (Google I/O '17)

https://youtu.be/FrteWKKVyzI

  • "Big changes to how we recommend that you build application"
    推奨しているアプリケーションの作り方を変えた! https://youtu.be/FrteWKKVyzI?t=14

Architecture Componentsに登場したものは基本的に驚きました。。

  • Lifecycle Made Easy
    https://youtu.be/FrteWKKVyzI?t=647
    • LifecycleOwner
      → Lifecycleを管理しているクラス、getLifecycle()でLifecycleクラスを返す、LifecycleActivityやLifecycleFragment(それぞれLifecycleOwnerを継承している)を継承して通常は利用する
    • LifecycleObserver
      → Lifecycle.addObserver()で追加するもの。(正確にはLifecycleRegistryで管理されていて)ライフサイクルに変化があった時に@OnLifecycleEvent(ON_START)などがついているメソッドが呼び出される。
    • LiveData(RxJavaを見たことがあればObservableをイメージすると分かりやすいです。)
      → ライフサイクルを検知するObservable(変更が検知できる)。 startとstopだけ書けば動く。(中ではLifecycleObserverを利用している)
    • ViewModel
      → LiveDataで保持していた値を画面回転後も持っていたい
      → ActivityやFragmentでデータを保持しておきたい時に使う

Lifecycleに関する個人的なメモUML:
image.png

  • データの永続化

    • https://youtu.be/FrteWKKVyzI?t=1276
    • Roomというライブラリを作った
      • RoomはSQLiteのためのマッピングライブラリ
      • ボイラープレートがいらない
      • SQLite
      • コンパイル時にSQLを検証してくれる
      • データの変更を検知してLiveDataで返せる
      • RxJava2をサポート
        Retrofitっぽく書けるのも個人的にとても良いです!
  • アーキテクチャ

    • https://youtu.be/FrteWKKVyzI?t=1677
    • 良いアプリケーションを書く事ができると信じているが、従う必要はない。
    • UIコントローラ(Acctivity, Fragment) , View Model, Repository, Datasourceから構成される
    • DIについて公式からあった
    • RetrofitやDaggerが公式サンプルで登場
    • Daggerでなくて、Service Locatorを使う方法もあると説明。
  • アプリを書き直すべきか?
    あなたが満足しているのであれば書き直す必要はない。

Architecture Components - Solving the Lifecycle Problem

https://www.youtube.com/watch?v=bEKNi1JOrNs

  • LifecycleOwnerのLyfecycleActivityやLifecycleFragmentは将来的にはAppCompatActivityやSupport LibraryのFragmentに統合
  • Custom LifecycleOwnerを使うとテストが出来る
  • LiveDataクラスを継承して自分でLiveDataを作れる 作り方はRxJavaのObservableを作る感じ LiveDataはonPause後に勝手に流れなくなったりonDestroyで消したり管理してくれる
  • LiveDataはRxJavaでは?

  • RxJavaから移行するべきか?

  • 新しいプロジェクトではどうするべきか?

  • LiveData.postValueでmainThread以外からも値をpostできる

  • LiveDataReactiveStreams

    • https://youtu.be/bEKNi1JOrNs?t=1315
    • compile "android.arch.lifecycle:reactivestreams:1.0.0-alpha1"
    • fromPublisher, toPublisherで使える
    • RxJavaなどとの連携がスムーズに!
  • LiveDataは基本的にHolderであってStreamではない

  • ViewModelはFragment間でのデータの受け渡しでも使える!

    • https://youtu.be/bEKNi1JOrNs?t=1762
    • ViewModelProviders.of(getActivity())// ここでActivityスコープなのでFragment間で受け渡しができる
      .get(SharedViewModel.class)
  • ViewModelは絶対にViewのインスタンス、Activity、resource(draweableなど)を持ってはいけない
    https://youtu.be/bEKNi1JOrNs?t=1788

Architecture Components - Persistence and Offline (Google I/O '17)

https://www.youtube.com/watch?v=MfHsPGQ6bgE
* 簡単にかける!
https://youtu.be/MfHsPGQ6bgE?t=234

@Dao
interface FeedDao {
  @Query("SELECT * FROM feed WHERE title = :query")
  Feed loadFeeds(String query);
}

@Database (entities={Feed.class},version=1) 
abstract class Database {
}
  • @Insert
    https://youtu.be/MfHsPGQ6bgE?t=341
    引数に複数入れられるし、コンフリクトのときのストラテジーも設定できる
  • @Update@Delete出来る
  • 引数にArrayを渡して、SQLiteのIN(:ids)などで複数指定したり出来る
  • Room Speaks SQL
  • Roomで1カラムを受け取るときはStringとかに返り値をすることも可能
  • roomのTypeAdapter
    • https://youtu.be/MfHsPGQ6bgE?t=621 TypeComberters(MyConverter.class)
      をDatabaseやDaoクラスにつけて、型の変換することが出来る
      問い合わせなどではDate型を使って、SQLiteの中ではUnixタイムを使うということが出来る
  • Embeddedをつけると、同じテーブルにフィールドの中の値を入れられる
    →2つあるとエラーになる@Embedded(prefix=“seen_")とかつけてあげれば、その中にあるfieldをすべてprefixつけて解決できる
  • Observability
    • https://youtu.be/MfHsPGQ6bgE?t=1119
      Listではなく、LiveDataオブジェクトを返してあげるように書くと、アップデートを受け取れる 同様にFlowableにも変えられる
  • Entityの中にEntityは書けるか?
    • https://youtu.be/MfHsPGQ6bgE?t=1536
      どこまで取ってくるかが難しい。
      SQLiteで普通にJOINなどして、複数のテーブルから取得してきて、表示用のEntityを用意して、それにいれてあげるのが良い(理由は動画で見てね)
  • Room @Entity(foreignKeys=...)とかちゃんとリレーションも設定できる。
  • @Entity(indices= {@Index("title","subTitle")})とかでインデックスも貼れる
  • RoomのTest
  • MockitoでDaoのMockを作ってもテストできる
  • マイグレーションの方法 https://youtu.be/MfHsPGQ6bgE?t=2119
addMigrations(new Migration(1, 2){
            migrate(){
                executeSQL("ALTER TABLE...")
            }
   })
  • マイグレーションのテストも出来る
    MigrationTestHelper.runMigrationsAndValidateメソッドで出来る

What's new in the support library

https://www.youtube.com/watch?v=V6-roIeNUY0

  • Support Library minSdkVersion 14に
  • Support LibraryがGoogleのMavenに移動したのでSDKManagerから落とす必要なくなった
  • New issue trackerに移行された
  • Font in XML res/fontが使えるように。TextViewにandroid:fontFamily="@font/myfont"
    • https://youtu.be/V6-roIeNUY0?t=440
      コードからセットするときはResourceCompat.getFontしてtextView.SetTypeface
      800種類のgoogleのfontがGoogle Play Servicesによって使えるように
  • Android Studio 3.0でダウンロードfontを設定すると自動でダウンロードのxmlとか書いてくれる!
  • Emoji Compatibility Library
    • support-emoji ダウンロード版と、バンドル版がある バンドル版は7mbあるので注意してね
    • support-emoji API Level 19
  • TextView auto sizing
    TextViewにautoSizeTextType=“uniform”でできる 細かいサイズの設定もできる
  • Dynamic Animation
    SpringAnimation anim.getSpring().setDampingRatio
  • VerctorDrawableCompat Fillできるようになった?もっと細かい指定ができる
  • AnimatedVectorDrawableCompat
  • PathInterpolator
    <pathInterpolator android:pathData=“M 0.0…"
    <objectAnimator android:interpolator=“@…"
  • new Wear Support Livrary Module
    WearRecyclerView
    BoxInsetLayout など
  • LeanbackにDetailViewが追加 かっこいい
  • PreferenceDataStore
    Preferenceの保存先とか保存処理を自分で実装できるらしい

What's New in Android Development Tools (Google I/O '17)

What's New in Android Design Tools - New Features for Rapid UI Development

https://www.youtube.com/watch?v=nYb4FUdlLZE
* ConstraintLayout 1.1.0 beta1はBarriers, Group, Placeholder, Percent dimensionsが追加
* https://youtu.be/nYb4FUdlLZE?t=677
* Android Studio 3.0でapp/sampledataフォルダに文字列が書いてあるファイルを置くとtools:text="@tools:sample/strings"で参照できたりする(試してみたけどうまく動かない??)
* ConstraintSetを使うとレイアウトやViewからConstraintを取得して、他のレイアウトやViewにセットが出来る これでRotation対応ができる(ちょっとよく分かっていない)
* https://youtu.be/nYb4FUdlLZE?t=1737
* ConstraintSet + beginDelayedTransitionで楽々アニメーションができそう

What's New in Notifications, Launcher Icons, and Shortcuts

https://www.youtube.com/watch?v=TB-K6OniF68

  • Launcher Icon APIは直径66dpが安全ゾーンで、それ以外は切り取られる可能性があるので注意が必要。そこには大切なものを入れないほうが良さそう。
  • mipmap-anydpiにic_launcher.xmlにLauncher Icon用のxmlを置いて、O未満用のはmipmap-xxhdpiなどにic_launcher.pngなどで置く
  • insetを入れて再利用してあげることで、古いアイコンを使って新しいアイコンを作れるので、APKサイズに優しく出来る
  • Android Oのランチャーの設定からアイコンを丸く切り抜くとか選べる
  • Android Oではcom.android.launcher.action.INSTALL_SHORTCUTが無効化された。かわりにrequestPinShortcutを使う。

Behavior Changesにも書いてありました。
https://developer.android.com/preview/behavior-changes.html

The com.android.launcher.action.INSTALL_SHORTCUT broadcast no longer has any effect on your app, because it is now a private, implicit broadcast. Instead, you should create an app shortcut by using the requestPinShortcut() method from the ShortcutManager class.

  • AppWidgetManager.requestPinAppWidgetでウォジェットが置けるダイアログが表示させられる Oが普通になれば、ウィジェット復権ありえますね。
  • 通知の順番ソートが変わる
    • https://youtu.be/TB-K6OniF68?t=1031
    • 以下の順番(ちょっとよく分かっていないのでコードが出て時間があればコードを読みたい)
    • Major Ongoing
      • 重要な現在進行中のタスク
      • Media notification
      • Foreground Service
        • setColorizedで通知に色がつけられる
    • People to People
      • MessagingStyle
      • Default SMS App
    • General
    • BTW
  • cannel(コード上) = category(UI上)単位でユーザーが通知を拒否できる
  • categoriesは飛行機のアプリであればFlight updatesやExcutive proguramなどにする
  • カテゴリに対して振動するかどうかなどの細かい設定ができる(ユーザーも変更できる)
  • カテゴリはアプリの文脈によって部屋であったり、タイトルであったり、送信者であったりする

Speeding Up Your Android Gradle Builds (Google I/O '17)

https://www.youtube.com/watch?v=7ll-rkLCtyk

以下のQiitaがよくまとまっています。
http://qiita.com/rkowase/items/808064f16272e131be63
* 追記するのであれば、DexInProcessが有効になっていれば、javaMaxHeapSizeは意味がないので、消したほうが良いという話がありました。

  • Android Gradle Pluginの話

    • https://youtu.be/7ll-rkLCtyk?t=1364
    • app -> lib1 -> lib2と言うかたちで依存していた時を思い浮かべてください(compile project(":lib1")みたいな形)
    • ABI(Application Binary Interface)
      • これは主にpublicメソッドなどのことを指す
    • 3.0未満ではlib2などでABIが変わっておらず中身の実装が変わった時も、依存しているモジュールapp,lib1でビルドが走る
    • 3.0からはABIが変わった時以外は再ビルドしない。
    • 3.0でもABIがかわったらapp, lib1で再ビルドがかかる
      • なぜappも再ビルドしなくてはいけないのか?
        • appがlib1もlib2も見える状態になっているから
        • なので、compileの代わりにimplementationが登場!

Android Gradle Plugin 3.0からはdependenciesのcompileはdeprecatedになり、apiとimplementationになる
→ apiはこれまで通り
→ implementationはappからlib2が見えないような形(つまりtransitive dependencyが発動しない)

Prototyping to Production Bridging the Gap with a Common Tool

https://www.youtube.com/watch?v=BJCqRpvvTrM

カードの画像を見た時に
デザイナはマテリアルコンポーネントのカードだなと思って
開発者はBoxに影があって、端っこが丸くて、ボタンが有ると思う。
言語の違いがある。

→それをうめるのにFlatterを使う。
開発もデザイナも同じコードベースを見る感じ

Flutter にはマテリアルデザインのコンポーネントがたくさん用意されている
FlutterでRippleさせるにはInkWell。iOSでもRippleする

ちなみに文法はKotlinのAnkoっぽかったです。
image.png

Machine Learning APIs by Example

https://www.youtube.com/watch?v=ETeeSYMGZn0
Video , Vision , Speech , Natural Language, TranslationのAPIの紹介という感じだった ここにそれぞれのサンプルコードがあるみたい https://github.com/sararob/ml-talk-demos

Single codebase, Two Apps!

https://www.youtube.com/watch?v=w2TcYP8qiRI

Flutterを始めるには?

git clone -b alpha https://github.com/flutter/flutter.git 
// flutterへのパスを通す
flutter doctor

reactに似ている

Flatterによるアプリ開発
370行で画像のアップロードまで出来るチャットアプリが作れる。AndroidでもiOSでもOK
すごい

Understanding color

https://www.youtube.com/watch?v=r8NeG0wmFXM
本当に色の話をしていました。
RGBにも色んな種類があり、Android Oからそれを変換したり出来るよという話でした。

種類が違うと全然画像の見え方が違いました。
また広い色域を使いたい場合は<activity android:colorMode="wideColorGamut"でできるそうです。

まとめ

初めてのGoogle I/Oでしたが、さまざまなセッションがあり、
たくさんのセッションを集中的に見る機会は少ないため、知見にあふれていてとても良い機会になりました。
英語力の足りなさを実感できたので、強化して、ぜひまた行きたいです!

takahirom
Google Developers Expert for Android
cyberagent
サイバーエージェントは「21世紀を代表する会社を創る」をビジョンに掲げ、インターネットテレビ局「AbemaTV」の運営や国内トップシェアを誇るインターネット広告事業を展開しています。インターネット産業の変化に合わせ新規事業を生み出しながら事業拡大を続けています。
http://www.cyberagent.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした