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

What’s new in Android Jetpack and Tools

takahirom
June 20, 2021
360

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
  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
  3. 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
  4. 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
  5. 8 • 開発中 • APIは追加、変更、削除される • テストされており、ほぼ機能するは ず。 Alpha •

    機能の安定化 • APIの変更はしない • criticalな問題やコミュニティのフィー ドバックに対応するときにはAPIを変 更する → ベータの柔軟性が増えた Beta しかし成熟に長く時間が必要な機能もあ る
  6. 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
  7. 13 AppSearch indexやクエリでI/Oの利用が 少ないので、大きなデータセッ トでも低遅延で動く 単一のクエリで複数のデータタ イプから取り出すことができる BM25Fのような関連性ランキン グ(relevance ranking)や使用

    スコア(usage score)が利用で きる 特徴 Android Sとのインテグレー ション Android S以降で他のアプリと 安全にデータを共有できる。 nativeライブラリに依存しなくて 良いのでアプリのサイズを減ら せる (まだJetpackでは利用できな い)
  8. 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
  9. Measuring Jank and Startup with Macrobenchmark Macrobenchmarkが何を解 決するか どのように動作するか 20

    • Analyticsからのフィードバッ クはすぐには得られない • 既存のAndroid Jetpack Benchmarkはマイクロベン チマークなので、スタートアッ プの時間などは測れない • 安定したベンチマークを取る のが難しい • どのように書くか • どのようなプロセスで行われ るか androidx.tracingライブラリを 使って trace("name") {...}でトレースで きる 独自のトレースポイントを追加 する
  10. 21 Macrobenchmark どのように書くか 以下のようなオプションを指定。 metrics = アプリの起動時間を見るの か、フレームを見るのか compilationMode =

    アプリがコンパイ ルされた状態から始まるのか startupMode = アプリがプロセスから 開始なのか、Activityの起動から開始 なのか
  11. 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 の動画やブログで紹介されて いる)
  12. Macrobenchmark 導入方法 • モジュールを別に作ってそこにベンチマーク の処理を書いてそこからアプリを起動する • https://github.com/android/performance -samples にサンプルがある •

    DroidKaigiの公式アプリでも 試しに入れてみたので、差分だけ見たい方 はどうぞ🕵 • https://github.com/DroidKaigi/conferenc e-app-2021/pull/476
  13. 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… ◦ ...
  14. 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… ◦ ...
  15. 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… ◦ ...
  16. What's new in Android development tools 迅速なUIデザイン 32 Jetpack Compose

    Live Literalによって 文字列などの変更がすぐに見られる Enable literal decorationsで 対応できるところを明示できる Peview Emulator Code
  17. What's new in Android development tools 迅速なUIデザイン 33 • ライトテーマやダークテーマの確認が@Preview

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

    を使うことでかんたんにできる • プレビューの左の歯車(Gutter icon)からかんた んに設定を変更できる。 • Interactive mode • アニメーションのPreviewが表示でき (Animation inspector)、速度を落としてアニ メーションを再生できる。 • 他にもComposeのConstraintLayoutの プレビューができたり、プレビュー上でクリックす ると その要素に飛べたりたくさんの機能がある。
  19. 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… ◦ ...
  20. Migrate to Non-Transitive R Classes 37 • Android StudioでNon-Transitive R

    Classesに 移行するリファクタリングが追加になった。 Non-Transitive R Classesとは? Android Studioの機能
  21. 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 より
  22. Migrate to Non-Transitive R Classes 40 移行ソースコード DroidKaigiの公式アプリでも試しに入れてみたので、ど んな差分か見たい方はどうぞ🕵 移行するときには

    Rクラスが重複することになるので Kotlinだとうまくimport aliasを駆使すると良い (そこまでは移行してくれない) https://github.com/DroidKaigi/conference-app-2021/pull/508
  23. 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
  24. 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
  25. What's new in Android Gradle Plugin Configuration caching 44 Configuration

    phaseのTask Treeなどの情報を キャッシュでき、かなりビルド時間が短縮できる ./gradlew --configuration-cache <task> を走らせると、configuration cacheに問題があれば 問題があるプラグインなどをhtmlレポートで教えてくれる 🕵 org.gradle.unsafe.configuration-cache=true 上記をgradle.propertiesで宣言すると常に有効になる https://youtu.be/AZBW5StgF8o?t=40
  26. 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
  27. 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
  28. 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
  29. 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 より
  30. 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が使える!
  31. 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
  32. 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
  33. What's new in Android testing tools GradleとAndroid Studioのテ ストランナーの統合 Unified

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

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

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

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

    Test Platform (UTP) 58 同じテスト環境で実行されるよ うになった テストを大規模に実施するための拡張可能な テスト実行のための仕組み テストで失敗した時のEmulator のスナップショットが利用できる Test retention Gradle Managed Devices Gradleでエミュレーター を管理できる Test Matrix 複数の端末でテストを 並行に実行できる
  39. What's new in Android testing tools 59 GradleのDSLで管理する テスト中に仮想デバイスのイ メージのダウンロード、デバイ

    スの作成シャットダウン、 キャッシュまでGradleが管理 する testOptionsに右のように 記述 Gradle Managed Devices ./gradlew -Pandroid.experimental.androidTest.useUnifiedTestPlatform=true pixel2api29DebugAndroidTest
  40. What's new in Android testing tools GradleとAndroid Studioのテ ストランナーの統合 Unified

    Test Platform (UTP) 60 同じテスト環境で実行されるよ うになった テストを大規模に実施するための拡張可能な テスト実行のための仕組み テストで失敗した時の Emulatorのスナップショットが 利用できる Test retention Gradle Managed Devices Gradleでエミュレーター を管理できる Test Matrix 複数の端末でテストを 並行に実行できる
  41. 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)な どさまざまな実装がされており、拡張可能になって いそうでした。
  42. 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
  43. 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
  44. What's new in the Design tool ヘルパーオブジェクトの追加 72 Carousel 非常に複雑な外観を持つインパクトが大きい美しい

    アニメーションをかんたんに作成できる ほとんどプログラミングする必要がない
  45. What's new in the Design tool ヘルパーオブジェクトの追加 73 MotionEffect MotionLayoutで利用できるヘルパー

    オブジェクト アニメーションの動く 方向を単方向に制限することで 快適なイメーションを作れる MotionEffectなし MotionEffectあり
  46. 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
  47. What's new in the Design tool ConstraintLayout in Compose 75

    Composeの ConstraintLayoutに機能が増 えているので、 ちょっと基本的なところから見 ていきます。
  48. What's new in the Design tool 80 ConstraintLayoutのリポジトリに CarouselやMotionEffectや MotionLayout

    Liteなどを 試せるプロジェクトが置いてある🕵 https://github.com/androidx/constraintlay out ConstraintLayoutのリポジトリにい ろんなサンプルが🕵
  49. 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についてと、 試してみて発見したことなどを見ていき ました🕵