Upgrade to Pro — share decks privately, control downloads, hide ads and more …

What’s new in Android Jetpack and Tools

takahirom
June 20, 2021
320

What’s new in Android Jetpack and Tools

アニメーションなどはこちらから確認できるのでこちらからご覧ください。
https://docs.google.com/presentation/d/1oZ9JKsjIEiEb_jhAascpJHFUH9kD8RycGgY4RtgGkcM/edit#slide=id.ge0a6176be0_0_483

takahirom

June 20, 2021
Tweet

Transcript

  1. What’s new in Android Jetpack
    and Tools
    Jetpack and Tools
    1
    takahirom(@new_runnable)
    Google Developers Expert for Android

    View Slide

  2. ● What’s new in Jetpack
    ● Measuring Jank and Startup with
    Macrobenchmark
    セッションの範囲
    ● What’s new in Android development tools
    ● What's new in Android Gradle Plugin
    ● What's new in Android testing tools
    ● What's new in the Design tool
    Jetpack Tool
    2

    View Slide

  3. 全てを紹介することは難しいので、
    各セッションで話されていたテーマを箇条書きにして、
    いくつか印象に残ったところをピックアップして紹介します。
    また、調べたり、試したりして、動画にはない情報🕵も紹介します。
    どう紹介するか
    3

    View Slide

  4. What’s new in Jetpack
    Android Jetpack
    4

    View Slide

  5. What’s new in Jetpack
    JetpackのBeta定義が変わっ

    ライブラリのアップデート
    5
    今まではBetaではAPIの変更
    はしなかったが、
    変更するようになった
    androidx.annotation:annotati
    on-experimentalが追加になっ
    た。
    CameraX
    AppSearch
    Security Crypto
    Hilt
    WorkManager
    Room
    ConstraintLayout
    Fragment
    Navigation
    Google Shortcuts library
    EmojiCompat 2
    Paging
    Macrobenchmark

    View Slide

  6. What’s new in Jetpack
    JetpackのBeta定義が変わっ

    ライブラリのアップデート
    6
    今まではBetaではAPIの変更
    はしなかったが、
    変更するようになった
    androidx.annotation:annotati
    on-experimentalが追加になっ
    た。
    CameraX
    AppSearch
    Security Crypto
    Hilt
    WorkManager
    Room
    ConstraintLayout
    Fragment
    Navigation
    Google Shortcuts library
    EmojiCompat 2
    Paging
    Macrobenchmark

    View Slide

  7. 7
    https://developer.android.com/jetpack/androidx/versions/all-c
    hannel
    6/16のAndroid Jetpackの変更内容より
    Alpha、Betaの更新が
    たくさん行われている

    View Slide

  8. 8
    ● 開発中
    ● APIは追加、変更、削除される
    ● テストされており、ほぼ機能するは
    ず。
    Alpha
    ● 機能の安定化
    ● APIの変更はしない
    ● criticalな問題やコミュニティのフィー
    ドバックに対応するときにはAPIを変
    更する
    → ベータの柔軟性が増えた
    Beta
    しかし成熟に長く時間が必要な機能もあ

    View Slide

  9. APIが実験的な状態であることをユーザーに通知し、ユーザーがオプトインできる
    仕組み
    これによってJetpackのライブラリがもっと早くStableになるようになる
    Experimental Annotation
    androidx.annotation:annotation-experimental
    9

    View Slide

  10. 10
    アノテーションの
    importを忘れると
    KotlinのOptInになっ
    てビルドに失敗する🕵
    (Kotlin環境下)

    View Slide

  11. What’s new in Jetpack
    JetpackのBeta定義が変わっ

    ライブラリのアップデート
    11
    今まではBetaではAPIの変更
    はしなかったが、
    変更するようになった
    androidx.annotation:annotati
    on-experimentalが追加になっ
    た。
    CameraX
    AppSearch
    Security Crypto
    Hilt
    WorkManager
    Room
    ConstraintLayout
    Fragment
    Navigation
    Google Shortcuts library
    EmojiCompat 2
    Paging
    Macrobenchmark

    View Slide

  12. AppSearch
    ローカルに保存されている構造化データを管理するためのデバイス上の検索ライブラリ。
    検索機能を構築するのに使用する。
    androidx.appsearch:appsearch
    12

    View Slide

  13. 13
    AppSearch
    indexやクエリでI/Oの利用が
    少ないので、大きなデータセッ
    トでも低遅延で動く
    単一のクエリで複数のデータタ
    イプから取り出すことができる
    BM25Fのような関連性ランキン
    グ(relevance ranking)や使用
    スコア(usage score)が利用で
    きる
    特徴 Android Sとのインテグレー
    ション
    Android S以降で他のアプリと
    安全にデータを共有できる。
    nativeライブラリに依存しなくて
    良いのでアプリのサイズを減ら
    せる
    (まだJetpackでは利用できな
    い)

    View Slide

  14. 14
    https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:appsearch/l
    ocal-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java;l=78;drc
    =5663cbd3793780f86e41740f7e03926f678080f8
    AppSearch
    https://android.googlesource.com/platform/external/icing/+/39ba960dd
    31a8667dfb3a1cd6ec3dff52f6548ea
    少しだけコードを見に行ったところ
    C++で書かれたライブラリを使っているもよう🕵

    View Slide

  15. 15
    AppSearch
    誰もGitHubなどにサンプルを上げていなかったので動くだけの
    サンプルを用意してみました🕵
    (AOSPのAndroid Testしか見つからなかった)
    https://github.com/takahirom/app-search-sample
    感想
    意外と気軽に使えるので便利そう
    現状、日本語では検索できないみたい?(issue立ててみました)
    https://issuetracker.google.com/issues/191286849
    非同期処理の仕組みがGuavaに依存していそうなので、
    kotlinx-coroutines-guavaを使ってあげると楽に利用できる

    View Slide

  16. What’s new in Jetpack
    JetpackのBeta定義が変わっ

    ライブラリのアップデート
    16
    今まではBetaではAPIの変更
    はしなかったが、
    変更するようになった
    androidx.annotation:annotati
    on-experimentalが追加になっ
    た。
    CameraX
    AppSearch
    Security Crypto
    Hilt
    WorkManager
    Room
    ConstraintLayout
    Fragment
    Navigation
    Google Shortcuts library
    EmojiCompat 2
    Paging
    Macrobenchmark

    View Slide

  17. 17
    FragmentとNavigation
    マルチバックスタックへの対応
    大規模なリファクタリングによりマルチバックスタックに対応
    ボトムナビゲーションがある画面で使われる
    基本的にはNavigation 2.4.0-alpha01とFragment 1.4.0-alpha01以降で
    BottomNavigationViewやNavigationRailViewとの
    連携を利用するとデフォルトで有効に。

    View Slide

  18. 18
    FragmentとNavigation
    マルチバックスタックへの対応
    連携の中では以下のAPIが使われており、
    Fragmentのバックスタックの保存、復元ができるようになった🕵
    今のバックスタックの内容を保存
    → FragmentManager#saveBackStack(id)
    バックスタックをidによりリストア
    → FragmentManager#restoreBackStack(id)
    from:
    https://medium.com/androiddevelopers/multiple-back-stacks-b714d974f134 Multiple back stacks
    saveBackStack(“notifications”)
    restoreBackStack(“profile”)

    View Slide

  19. Measuring Jank and Startup with
    Macrobenchmark
    Android Jetpack
    19

    View Slide

  20. Measuring Jank and Startup with
    Macrobenchmark
    Macrobenchmarkが何を解
    決するか
    どのように動作するか
    20
    ● Analyticsからのフィードバッ
    クはすぐには得られない
    ● 既存のAndroid Jetpack
    Benchmarkはマイクロベン
    チマークなので、スタートアッ
    プの時間などは測れない
    ● 安定したベンチマークを取る
    のが難しい
    ● どのように書くか
    ● どのようなプロセスで行われ
    るか
    androidx.tracingライブラリを
    使って
    trace("name") {...}でトレースで
    きる
    独自のトレースポイントを追加
    する

    View Slide

  21. 21
    Macrobenchmark
    どのように書くか
    以下のようなオプションを指定。
    metrics = アプリの起動時間を見るの
    か、フレームを見るのか
    compilationMode = アプリがコンパイ
    ルされた状態から始まるのか
    startupMode = アプリがプロセスから
    開始なのか、Activityの起動から開始
    なのか

    View Slide

  22. 22
    Macrobenchmark
    どのように書くか
    テスト中に行うことをブロックに
    記述する。
    Homeボタンを押して起動を行っている

    View Slide

  23. 23
    Macrobenchmark
    どのように動作するか
    実際に見てみる
    中央値やパーセンタイルが表
    示される。
    またこのリンクに
    なってるところをクリック
    するとトレースも確認できる!

    View Slide

  24. 24
    Macrobenchmark
    CIでどうやって検出するのか?
    Fighting regressions with benchmarks in CI (Android Dev Summit '19) https://www.youtube.com/watch?v=ynBPcFs6OOk
    Fighting regressions with Benchmarks in CI https://medium.com/androiddevelopers/fighting-regressions-with-benchmarks-in-ci-6ea9a14b5c71
    Macrobenchmarkを利用する
    と、Jsonで結果が利用できる。
    これをStep-fittingというアプ
    ローチで、前後のいくつか結果
    の平均と分散(variance)を使っ
    てうまく検出する🕵
    (過去のAndroid Developers
    の動画やブログで紹介されて
    いる)

    View Slide

  25. Macrobenchmark
    導入方法
    ● モジュールを別に作ってそこにベンチマーク
    の処理を書いてそこからアプリを起動する
    ● https://github.com/android/performance
    -samples にサンプルがある
    ● DroidKaigiの公式アプリでも
    試しに入れてみたので、差分だけ見たい方
    はどうぞ🕵
    ● https://github.com/DroidKaigi/conferenc
    e-app-2021/pull/476

    View Slide

  26. What’s new in Android development
    tools
    26
    Tools

    View Slide

  27. What’s new in Android development tools
    各バージョンのAndroid
    Studioの新機能と命名規則に
    ついて
    3つのテーマ
    27
    ● 4.1
    ● 4.2
    ● Android Studio Arctic Fox
    2020.3.1 (バージョンの命名
    の変更)
    ● Android Gradle Plugin
    :7.0.0 (バージョンの命名の
    変更)
    ● 迅速なUIデザイン
    ○ Composeのための機能
    ○ ...
    ● 新しいデバイス。大きな端末も小さな端末も
    ○ フォルダブル、AndroidTV、WearOSへの対応 (別にイベント
    があるのでスキップ)
    ○ ...
    ● 開発者の生産性の向上
    ○ WorkManager Inspector
    ○ Migrate to Non-Transitive R Classes…
    ○ ...

    View Slide

  28. What’s new in Android development tools
    各バージョンのAndroid
    Studioの新機能と命名規則に
    ついて
    3つのテーマ
    28
    ● 4.1
    ● 4.2
    ● Android Studio Arctic
    Fox 2020.3.1 (バージョンの
    命名の変更)
    ● Android Gradle Plugin
    :7.0.0 (バージョンの命名の
    変更)
    ● 迅速なUIデザイン
    ○ Composeのための機能
    ○ ...
    ● 新しいデバイス。大きな端末も小さな端末も
    ○ フォルダブル、AndroidTV、WearOSへの対応 (別にイベント
    があるのでスキップ)
    ○ ...
    ● 開発者の生産性の向上
    ○ WorkManager Inspector
    ○ Migrate to Non-Transitive R Classes…
    ○ ...

    View Slide

  29. 新しいAndroid Studioの命名規則
    29
    Arctic Fox 2020.3.1
    ベースとなっている
    IntelliJのバージョン
    codename。ABC順
    新しいバージョンが分かる
    Android Studioの
    メジャーバージョン

    View Slide

  30. 新しいAndroid Gradle Pluginのバージョン規則
    30
    7.0.0
    Gradle 7.xと動作することを
    意図している
    Android Studioの命名規則から切り離されて7.0.0に。
    こちらはセマンティックバージョニングを採用している。

    View Slide

  31. What's new in Android development tools
    各バージョンのAndroid
    Studioの新機能と命名規則に
    ついて
    3つのテーマ
    31
    ● 4.1
    ● 4.2
    ● Android Studio Arctic Fox
    2020.3.1 (バージョンの命名
    の変更)
    ● Android Gradle Plugin
    :7.0.0 (バージョンの命名の
    変更)
    ● 迅速なUIデザイン
    ○ Composeのための機能
    ○ ...
    ● 新しいデバイス。大きな端末も小さな端末も
    ○ フォルダブル、AndroidTV、WearOSへの対応 (別にイベント
    があるのでスキップ)
    ○ ...
    ● 開発者の生産性の向上
    ○ WorkManager Inspector
    ○ Migrate to Non-Transitive R Classes…
    ○ ...

    View Slide

  32. What's new in Android development tools
    迅速なUIデザイン
    32
    Jetpack Compose Live Literalによって
    文字列などの変更がすぐに見られる
    Enable literal decorationsで
    対応できるところを明示できる
    Peview Emulator
    Code

    View Slide

  33. What's new in Android development tools
    迅速なUIデザイン
    33
    ● ライトテーマやダークテーマの確認が@Preview
    を使うことでかんたんにできる
    ● プレビューの左の歯車(Gutter icon)からかんた
    んに設定を変更できる。
    ● アニメーションのPreviewが表示でき(Animation
    inspector)、速度を落としてアニメーションを再生
    できる。
    ● 他にもComposeのConstraintLayoutの
    プレビューができたり、プレビュー上でクリックす
    ると
    その要素に飛べたりたくさんの機能がある。

    View Slide

  34. What's new in Android development tools
    迅速なUIデザイン
    34
    ● ライトテーマやダークテーマの確認が@Preview
    を使うことでかんたんにできる
    ● プレビューの左の歯車(Gutter icon)からかんた
    んに設定を変更できる。
    ● Interactive mode
    ● アニメーションのPreviewが表示でき
    (Animation inspector)、速度を落としてアニ
    メーションを再生できる。
    ● 他にもComposeのConstraintLayoutの
    プレビューができたり、プレビュー上でクリックす
    ると
    その要素に飛べたりたくさんの機能がある。

    View Slide

  35. What's new in Android development tools
    35
    いくつかの機能はPreferences | Experimentalを開いて有効にしないといけない機能もあるので注意
    🕵
    (最初見つけられなくてハマった)

    View Slide

  36. What's new in Android development tools
    各バージョンのAndroid
    Studioの新機能と命名規則に
    ついて
    3つのテーマ
    36
    4.1
    4.2
    Android Studio Arctic Fox
    2020.3.1 (バージョンの命名の
    変更)
    Android Gradle Plugin :7.0.0
    (バージョンの命名の変更)
    ● 迅速なUIデザイン
    ○ Composeのための機能
    ○ ...
    ● 新しいデバイス。大きな端末も小さな端末も
    ○ フォルダブル、AndroidTV、WearOSへの対応 (別にイベント
    があるのでスキップ)
    ○ ...
    ● 開発者の生産性の向上
    ○ WorkManager Inspector
    ○ Migrate to Non-Transitive R Classes…
    ○ ...

    View Slide

  37. Migrate to Non-Transitive R Classes
    37
    ● Android StudioでNon-Transitive R Classesに
    移行するリファクタリングが追加になった。
    Non-Transitive R Classesとは?
    Android Studioの機能

    View Slide

  38. Non-Transitive R Classesとは
    38
    マルチモジュールでの環境では、
    ライブラリのRクラスがマージされていくのでリソースの重複がおこり、
    これがビルド時間などに影響する。
    これをライブラリのRクラスを直接見るようにすることで、
    マージしないようにできる。
    大規模なアプリだとRクラスのフィールドの数が1万を超えることも。
    Transitive R Class
    Non Transitive R Class

    View Slide

  39. Migrate to Non-Transitive R Classes
    39
    Android Gradle Pluginには昔から android.namespacedRClassという名前であった機能🕵
    Androidでは有名なエンジニアの
    Jake Whartonさんも褒めていた。 (19%
    フィールドを少なくできたそう)
    Non-Transitive R Classesとは?
    https://twitter.com/JakeWharton/status/1032396431787794432 より
    https://developer.android.com/studio/releases/gradle-plugin?hl=lt&skip_cache=true#4-1-0 より

    View Slide

  40. Migrate to Non-Transitive R Classes
    40
    移行ソースコード
    DroidKaigiの公式アプリでも試しに入れてみたので、ど
    んな差分か見たい方はどうぞ🕵
    移行するときには
    Rクラスが重複することになるので
    Kotlinだとうまくimport aliasを駆使すると良い
    (そこまでは移行してくれない)
    https://github.com/DroidKaigi/conference-app-2021/pull/508

    View Slide

  41. What's new in Android Gradle Plugin
    41
    Tools

    View Slide

  42. What's new in Android Gradle Plugin
    新機能の紹介 Variant API
    42
    ● Configuration caching
    ● Non-transitive R classへの
    対応でLintが追加になった
    ● Lintがモジュールごとに
    キャッシュされるように
    ● ドキュメントが利用可能に
    ○ https://developer.androi
    d.com/reference/tools/g
    radle-api
    動的な動作のための
    androidComponents DSLが
    追加され、
    そこでvariantに対して、より柔
    軟な設定ができるようになった
    Legacy Transform APIは柔軟
    性に優れていたが、複雑だった
    パフォーマンスが高く、もっとか
    んたんに利用できる
    ASM API

    View Slide

  43. What's new in Android Gradle Plugin
    新機能の紹介 Variant API
    43
    ● Configuration caching
    ● Non-transitive R classへの
    対応でLintが追加になった
    ● Lintがモジュールごとに
    キャッシュされるように
    ● ドキュメントが利用可能に
    ○ https://developer.androi
    d.com/reference/tools/g
    radle-api
    動的な動作のための
    androidComponents DSLが
    追加され、
    そこでvariantに対して、より柔
    軟な設定ができるようになった
    Legacy Transform APIは柔軟
    性に優れていたが、複雑だった
    パフォーマンスが高く、もっとか
    んたんに利用できる
    ASM API

    View Slide

  44. What's new in Android Gradle Plugin
    Configuration caching
    44
    Configuration phaseのTask Treeなどの情報を
    キャッシュでき、かなりビルド時間が短縮できる
    ./gradlew --configuration-cache
    を走らせると、configuration cacheに問題があれば
    問題があるプラグインなどをhtmlレポートで教えてくれる 🕵
    org.gradle.unsafe.configuration-cache=true
    上記をgradle.propertiesで宣言すると常に有効になる https://youtu.be/AZBW5StgF8o?t=40

    View Slide

  45. What's new in Android Gradle Plugin
    Configuration caching
    45
    DroidKaigiの公式アプリで
    ./gradlew --configuration-cache
    assembleDebug して表示されたレポート
    Kotlin NativeとLicense pluginがひっかかった模様。
    License pluginのほうは対応されているみたい。
    https://youtrack.jetbrains.com/issue/KT-43293

    View Slide

  46. What's new in Android Gradle Plugin
    新機能の紹介 Variant API
    46
    ● Configuration caching
    ● Non-transitive R classへの
    対応でLintが追加になった
    ● Lintがモジュールごとに
    キャッシュされるように
    ● ドキュメントが利用可能に
    ○ https://developer.androi
    d.com/reference/tools/g
    radle-api
    動的な動作のための
    androidComponents DSLが
    追加され、
    そこでvariantに対して、より柔
    軟な設定ができるようになった
    Legacy Transform APIは柔軟
    性に優れていたが、複雑だった
    パフォーマンスが高く、もっとか
    んたんに利用できる
    ASM API

    View Slide

  47. What's new in Android Gradle Plugin
    Variant API
    47
    Variant関連のAPIを作り直してより柔軟に設定できるようになった。
    onVariant() {}ではGradleのProvider/Propertyを使うAPIが追加されている
    そもそもGradleのProvider/Propertyとはなにか?
    From:
    https://youtu.be/AZBW5StgF8o?t=340

    View Slide

  48. What's new in Android Gradle Plugin
    GradleのProvider/Propertyとはなにか?
    今までのやり方が何が問題だったのか🕵
    48
    ● Gradleのビルドの中のプロパティの値がいつ利用できるようになるのかよく分からない。
    ○ 例: とりあえずproject.afterEvaluate{} 呼んだり、タスクに依存してみたりしている。
    ● タスクの依存関係を設定しつつ、outputFileとinputFileなどをつなげる必要がある。
    ○ 例: 設定がうまくいかず、うまく取得できなかったりする。
    ● Configuration phaseでファイルを読み込んだりして、タスクに設定するとConfiguration phaseが重たく
    なる。
    ○ 例: Version nameに設定するためにgitコマンドからバージョンとったり。。
    でもcleanのときには必要ないタスクもある。
    これをLazy Configuration = Provider/Propertyで解決できる。 https://docs.gradle.org/current/userguide/lazy_config
    uration.html#lazy_properties より

    View Slide

  49. What's new in Android Gradle Plugin
    今までのやり方
    49
    タスク同士がdependsOnで繋げる方法
    From Gradle properties to AGP APIs (Android Dev Summit '19)
    https://youtu.be/OTANozHzgPc?t=328
    これからのやり方
    GradleのProvider、Propertyというのをタス
    クに宣言しておき、それでつなげることで
    Lazy Configurationが使える!

    View Slide

  50. What's new in Android Gradle Plugin
    Variant API
    50
    右の例ではVariant APIの
    onVariants{} を利用して、
    ファイルに文字列を書き出し、
    それを利用して
    applicationIdを設定している
    What’s new in Android Gradle plugin https://youtu.be/AZBW5StgF8o?t=379

    View Slide

  51. What's new in Android Gradle Plugin
    ASM API
    51
    コード変換を行うAPI
    Transform APIは柔軟性に優れていたが、複雑だった
    AGP 4.2にバイトコード変換専用の新しいAPIが追加された
    コードを少なくでき、ビルド速度も速くなる。
    https://github.com/android/gradle-recipes で
    サンプルコードが利用できる
    Android Code Searchで検索したところすでにDagger Hiltの
    コード生成で利用されているようだった🕵
    https://cs.android.com/search?q=AsmClassVisitorFactory
    What’s new in Android Gradle plugin https://youtu.be/AZBW5StgF8o?t=562

    View Slide

  52. What's new in Android testing tools
    Tools
    52

    View Slide

  53. What's new in Android testing tools
    GradleとAndroid Studioのテ
    ストランナーの統合
    Unified Test Platform (UTP)
    53
    同じテスト環境で実行されるよ
    うになった
    テストを大規模に実施するための拡張可能な
    テスト実行のための仕組み
    テストで失敗した時のEmulator
    のスナップショットが利用できる
    Test retention
    Gradle Managed
    Devices
    Gradleでエミュレーター
    を管理できる
    Test Matrix
    複数の端末でテストを
    並行に実行できる

    View Slide

  54. What's new in Android testing tools
    GradleとAndroid Studioのテ
    ストランナーの統合
    Unified Test Platform (UTP)
    54
    同じテスト環境で実行されるよ
    うになった
    テストを大規模に実施するための拡張可能な
    テスト実行のための仕組み
    テストで失敗した時のEmulator
    のスナップショットが利用できる
    Test retention
    Gradle Managed
    Devices
    Gradleでエミュレーター
    を管理できる
    Test Matrix
    複数の端末でテストを
    並行に実行できる

    View Slide

  55. What's new in Android testing tools
    GradleとAndroid Studioのテストランナーを統合
    55
    今までAndroid Studio上で実行したときとGradle上で実行したとき
    で結果が異なる場合があった
    From: https://developer.android.com/studio/preview/features#automated-test-snapshots
    同じGradle Test Runnerで実行するように
    Android Studio Arctic Fox : Unit Testでの統合
    Android Studio Bumblebee : Instrumentation Testでの統合
    (Android Studio上で設定が必要)
    Android Studio上で結果が確認できる。

    View Slide

  56. What's new in Android testing tools
    GradleとAndroid Studioのテ
    ストランナーの統合
    Unified Test Platform (UTP)
    56
    同じテスト環境で実行されるよ
    うになった
    テストを大規模に実施するための拡張可能な
    テスト実行のための仕組み
    テストで失敗した時のEmulator
    のスナップショットが利用できる
    Test retention
    Gradle Managed
    Devices
    Gradleでエミュレーター
    を管理できる
    Test Matrix
    複数の端末でテストを
    並行に実行できる

    View Slide

  57. What's new in Android testing tools
    Unified Test Platform (UTP)
    57
    旧称 Nitrogen
    テストを大規模に実施するための拡張可能な
    テスト実行のための仕組み
    プラグインのモジュールによって
    拡張が可能になっている。

    View Slide

  58. What's new in Android testing tools
    GradleとAndroid Studioのテ
    ストランナーの統合
    Unified Test Platform (UTP)
    58
    同じテスト環境で実行されるよ
    うになった
    テストを大規模に実施するための拡張可能な
    テスト実行のための仕組み
    テストで失敗した時のEmulator
    のスナップショットが利用できる
    Test retention
    Gradle Managed
    Devices
    Gradleでエミュレーター
    を管理できる
    Test Matrix
    複数の端末でテストを
    並行に実行できる

    View Slide

  59. What's new in Android testing tools
    59
    GradleのDSLで管理する
    テスト中に仮想デバイスのイ
    メージのダウンロード、デバイ
    スの作成シャットダウン、
    キャッシュまでGradleが管理
    する
    testOptionsに右のように
    記述
    Gradle Managed Devices
    ./gradlew -Pandroid.experimental.androidTest.useUnifiedTestPlatform=true
    pixel2api29DebugAndroidTest

    View Slide

  60. What's new in Android testing tools
    GradleとAndroid Studioのテ
    ストランナーの統合
    Unified Test Platform (UTP)
    60
    同じテスト環境で実行されるよ
    うになった
    テストを大規模に実施するための拡張可能な
    テスト実行のための仕組み
    テストで失敗した時の
    Emulatorのスナップショットが
    利用できる
    Test retention
    Gradle Managed
    Devices
    Gradleでエミュレーター
    を管理できる
    Test Matrix
    複数の端末でテストを
    並行に実行できる

    View Slide

  61. What's new in Android testing tools
    61
    UTPによる機能。
    テストで失敗した時のEmulatorのスナップショットが利用できる
    Test retention

    View Slide

  62. View Slide

  63. View Slide

  64. テスト結果のフォルダに
    大きいスナップショットファイルが保存される

    View Slide

  65. テスト結果のフォルダにあったtest-result.pbのprotobufファイルをインポートできる

    View Slide

  66. View Slide

  67. View Slide

  68. What's new in Android testing tools
    UTPがどう拡張可能になっているのか
    プラグインの仕組みを少しだけ見てみる🕵
    68
    https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:build-system/gradle-core/src/main/java/com/android/build/gradle/internal/testing/utp/UtpConfigFactory.kt;l=310-333;drc=2d2dacf249752a1e382b9b1ea47940ef1c10bea1
    どうやらHostPluginというinterfaceがあり、
    それを実装することによってプラグインを作ること
    ができるようで、
    それによってTest retention (コード上はIcebox)な
    どさまざまな実装がされており、拡張可能になって
    いそうでした。

    View Slide

  69. What's new in design tools
    Design & Tools
    69

    View Slide

  70. What's new in the Design tool
    ツール系新機能 ConstraintLayout &
    MotionLayout
    70
    ● Accessibility integration
    ● Layout Validation
    ● Motion Editor
    ● Layout Inspector
    ● AVD Preview
    ConstraintLayout 2.0
    ● Flow virtual layoutで複雑な画面が
    作れるように
    ● Companion Motion Editor
    ConstraintLayout 2.1
    ● Baseline constraintの指定方法や
    マイナスのmargin指定などの新し
    い機能の追加
    ● Carousel
    ● MotionEffect
    ● など
    ConstraintLayout in Compose
    ● ConstraintSetを抜き出すことがで
    きる。
    MotionLayout Light
    ComposeでMotionLayoutができるも
    の(未完成)
    Composeのプレビューの機能
    Compose ConstraintLayout

    View Slide

  71. What's new in the Design tool
    ツール系新機能 ConstraintLayout &
    MotionLayout
    71
    ● Accessibility integration
    ● Layout Validation
    ● Motion Editor
    ● Layout Inspector
    ● AVD Preview

    ConstraintLayout 2.0
    ● Flow virtual layoutで複雑な画面が
    作れるように
    ● Companion Motion Editor
    ConstraintLayout 2.1
    ● Baseline constraintの指定方法や
    マイナスのmargin指定などの新し
    い機能の追加
    ● Carousel
    ● MotionEffect
    ● など
    ConstraintLayout in Compose
    ● ConstraintSetを抜き出すことがで
    きる。
    MotionLayout Light
    ComposeでMotionLayoutができるも
    の(未完成)
    Composeのプレビューの機能
    Compose ConstraintLayout

    View Slide

  72. What's new in the Design tool
    ヘルパーオブジェクトの追加
    72
    Carousel
    非常に複雑な外観を持つインパクトが大きい美しい
    アニメーションをかんたんに作成できる
    ほとんどプログラミングする必要がない

    View Slide

  73. What's new in the Design tool
    ヘルパーオブジェクトの追加
    73
    MotionEffect
    MotionLayoutで利用できるヘルパー
    オブジェクト
    アニメーションの動く
    方向を単方向に制限することで
    快適なイメーションを作れる
    MotionEffectなし MotionEffectあり

    View Slide

  74. What's new in the Design tool
    ツール系新機能 ConstraintLayout &
    MotionLayout
    74
    ● Accessibility integration
    ● Layout Validation
    ● Motion Editor
    ● Layout Inspector
    ● AVD Preview

    ConstraintLayout 2.0
    ● Flow virtual layoutで複雑な画面が
    作れるように
    ● Companion Motion Editor
    ConstraintLayout 2.1
    ● Baseline constraintの指定方法や
    マイナスのmargin指定などの新し
    い機能の追加
    ● Carousel
    ● MotionEffect
    ● など
    ConstraintLayout in Compose
    ● ConstraintSetを抜き出すことがで
    きる。
    MotionLayout Light
    ComposeでMotionLayoutができるも
    の(未完成)
    Composeのプレビューの機能
    Compose ConstraintLayout

    View Slide

  75. What's new in the Design tool
    ConstraintLayout in Compose
    75
    Composeの
    ConstraintLayoutに機能が増
    えているので、
    ちょっと基本的なところから見
    ていきます。

    View Slide

  76. ConstraintLayout in Compose
    76
    constrainAsで制約を書くこと

    画像のようにレイアウトを書くこ
    とができる

    View Slide

  77. ConstraintLayout in Compose
    77
    レイアウトの制約(ConstraintSet)をレ
    イアウトと
    分離して書くことができる

    View Slide

  78. ConstraintLayout in Compose
    78
    このConstraintSet(レイアウト
    の制約)はjsonから作ることが
    できる。
    (サーバーから取得した値とか
    も使えるかも??)

    View Slide

  79. MotionLayout Lite🕵
    79
    Composeで、
    MotionLayoutを使って
    ConstraintSetを2つ作って
    progressを渡すことで、
    間をアニメーションさせることが
    できる。
    (このスライドを書いている時ま
    だ未リリース)
    GitHubのコードにはマージ済

    View Slide

  80. What's new in the Design tool
    80
    ConstraintLayoutのリポジトリに
    CarouselやMotionEffectや
    MotionLayout Liteなどを
    試せるプロジェクトが置いてある🕵
    https://github.com/androidx/constraintlay
    out
    ConstraintLayoutのリポジトリにい
    ろんなサンプルが🕵

    View Slide

  81. Summary
    81
    What’s new in Jetpack
    Measuring Jank and Startup with
    Macrobenchmark
    What’s new in Android development tools
    What's new in Android Gradle Plugin
    What's new in Android testing tools
    What's new in the Design tool
    Jetpack
    Tool
    下記のJetpackとToolについてと、
    試してみて発見したことなどを見ていき
    ました🕵

    View Slide

  82. 82
    And so
    much more...

    View Slide

  83. Thank you!
    83
    takahirom(@new_runnable)
    Takahiro Menju
    Google Developers Expert for Android
    CyberAgent, Inc. ABEMA
    DroidKaigi App Owner

    View Slide