$30 off During Our Annual Pro Sale. View Details »

Android Tools & Performance

Android Tools & Performance

takahirom

June 05, 2022
Tweet

More Decks by takahirom

Other Decks in Programming

Transcript

  1. Android Tools & Performance takahirom

  2. セッションの範囲

  3. 時間の関係で、網羅性よりも開発へのインパクトや、 技術的な面白さが個人的にあった部分を選出して紹介します。 また、調べたり、試したりして、動画にはない情報🕵も紹介します。 どう紹介するか

  4. 時間の関係で、網羅性よりも開発へのインパクトや、 技術的な面白さが個人的にあった部分を選出して紹介します。 また、調べたり、試したりして、分かったことなど、 動画にはない情報も紹介します。 今回の2大推し機能はLive Editと Baseline Profileです。 どう紹介するか

  5. Tools What’s new in Android development tools

  6. 基本的にこれまでの Android Studioの おさらい Android Studio Bumblebee Android Studio Chipmunk

    Roadmap
 01 バージョンに関係なく、 便利な機能を いろいろ山盛りでデモで紹介 Demo 02 最後にDemoで触れた内容に少し 触れて、DolphinとElectric Eelに触 れる。 Update 03 What’s new in Android development tools
  7. 基本的にこれまでの Android Studioの おさらい Android Studio Bumblebee Android Studio Chipmunk

    Roadmap
 01 バージョンに関係なく、 便利な機能を いろいろ山盛りでデモで紹介 Demo 02 最後にDemoで触れた内容に少し 触れて、DolphinとElectric Eelに触 れる。 Update 03 What’s new in Android development tools デモから注目ポイントを紹介
  8. What’s new in Android development tools Android Studioの バージョン紹介 アルファベット順になっていて、動物の名前がついている。

    Android Studio Bumblebee 🐝 | 2021.1.1 必要なAndroid Gradle Plugin: 3.2-7.1 Android Studio Chipmunk 🐿 | 2021.2.1 必要なAndroid Gradle Plugin: 3.2-7.2 Android Studio Dolphin 🐬 | 2021.3.1 必要なAndroid Gradle Plugin: 7.3-xxx (現在 Beta) Android Studio Electric Eel ⚡ | 2022.1.1 必要なAndroid Gradle Plugin: 7.4-xxx (現在 Canary)
  9. What’s new in Android development tools 連携していると、クラッシュしている箇所がコード 上で警告が表示される。 そこからクラッシュ数などが確認できる。 クラッシュ一覧をAndroid

    Studio上で確認して、 スタックトレースからコードを追うことも可能。 Firebase Crashlyticsとの連携 https://youtu.be/RFv8GkLd5OY?t=1865 より Android Studio Electric Eelの機能⚡
  10. What’s new in Android development tools Build Analyzerに Check Jetifierが追加

    Jetifierとは、AndroidXの前のライブラリ”Support Library”と”AndroidX”を 一緒に使えるようにライブラリ内のパッケージ名を変換する仕組み。 これが有効になっているとビルドが遅くなる。 Android Studio Chipmunkの機能🐿 android.support.* androidx.* → Jetifierによる変換
  11. What’s new in Android development tools Build Analyzerに Check Jetifierが追加

    ライブラリがSupport Libraryに依存しているとJetifierをオフにできないが、 これまではどのライブラリが昔のSupport Libraryに依存しているかが簡単に分からな かった。 Android Studio Chipmunkの機能🐿
  12. What’s new in Android development tools ビルドが終わると Build Analyzerへのリンクが出ている これをクリックする

    Android Studio Chipmunkの機能🐿
  13. What’s new in Android development tools Warningのリストへ Android Studio Chipmunkの機能🐿

  14. What’s new in Android development tools Warningのリスト ここではJetifierが必要に なっている という警告が出ている

    Android Studio Chipmunkの機能🐿
  15. What’s new in Android development tools どのライブラリが昔の Support Libraryに 依存しているかが簡単にわかるように

    Android Studio Chipmunkの機能🐿
  16. What’s new in Android development tools ライブラリをアップデートする前に、 アップデートするときにどのバージョンがいいのか QuickFixでGoogle Play

    SDK Indexが確認でき るように Android Studio Electric Eelの機能⚡
  17. What’s new in Android development tools SDKの利用データなどを利用して、SDK を選ぶのを助けるサイト。 実際ここではこのURLが開かれた。🕵 https://play.google.com/sdks/details/com-googl

    e-firebase-firebase-auth そのSDKの一般的に導入されている バージョンなどが確認できる。 Google Play SDK Indexとは?
  18. What’s new in Android development tools Androidはフレームごとに描画しているが、処理 時間がフレームを超えるとそのフレームはそのま まになり、もたつくような動き (=

    Jank)になる。 UI jank detection Android Studio のChipmunk機能🐿
  19. What’s new in Android development tools Android StudioのプロファイラでJankが出ている 部分を教えてくれる。 フレームのデッドラインも表示して、超えた部分

    が赤く表示されて改善するべき場所がかなり分 かりやすい。 UI jank detection 改善するべき場所 デッドライン Android Studio のChipmunk機能🐿
  20. What’s new in Android development tools ログレベルで色分けされたり、コンパクトモードなどが選べ る さまざまなフィルタが使える •

    package:mineで自分のプロセスを見る • tag:タグなどでタグの絞り込み • tag:tag1 -tag:tag2でtag2を含まずtag1だけ検索す る。 • level:ERRORでエラーのみ • is:stacktrace スタックトレースのみの絞り込みがで きる(“is:” フィルタはElectric Eel Alpha 02だとまだ 動かないがいろいろ頑張ると動くが待つのが良さそ う🕵) 新しいLogcat Android Studio Dolphinの機能🐬
  21. What’s new in Android development tools • 実機端末をつないでいるときに Android Studio内で画面が見られるの

    で開発が楽になる。 • 複数端末もつなぐことができる。 Device Mirroring https://www.youtube.com/watch?v=RFv8GkLd5OY より Android Studio Electric Eelの機能⚡
  22. What’s new in Android development tools • 一見通常のエミューレーターのように見え ますが、上からレイアウトの切り替えができ る

    • これによって異なる画面サイズでの確認が 簡単に • それぞれのサイズを最初に開くときにちょっ と重いけど、最初だけだそうです。 Resizable Emulator https://www.youtube.com/watch?v=RFv8GkLd5OY より Android Studio Electric Eelの機能⚡
  23. What’s new in Android development tools Visual Lint • レイアウトで右からLayout

    Validation を 開いて、そこから⚠ボタンを押す。 • Bottom app barは小さい画面にのみ 推奨などが表示される。 • 今はAndroid Viewのみだが、今後 Composeも対応予定 https://www.youtube.com/watch?v=RFv8GkLd5OY より Android Studio Electric Eelの機能⚡
  24. What’s new in Android development tools • Jetpack ComposeはRecompositionがたくさん起きると、 パフォーマンスが悪化する

    Recomposition Count Android Studio Dolphinの機能🐬
  25. What’s new in Android development tools • Jetpack ComposeはRecompositionがたくさん起きると、 パフォーマンスが悪化する

    • LayoutInspectorでRecomposition Countsにチェックを入れると見られる。 Recomposition Count Android Studio Dolphinの機能🐬
  26. What’s new in Android development tools • Recomposeが起きた場所が赤く表示される。 • またRecomposeが起きたカウントが確認できる

    • (DroidKaigiのアプリ、お気に入りするとだいたい全部Recomposeしている😇) Recomposition Count Android Studio Dolphinの機能🐬
  27. What’s new in Android development tools • Recomposeが起きた場所が赤く表示される。 • またRecomposeが起きたカウントが確認できる

    • (DroidKaigiのアプリ、お気に入りするとだいたい全部Recomposeしている😇) Recomposition Count 🕵うまくスキップできた カウントも表示される Android Studio Dolphinの機能🐬
  28. Composeの変更を瞬時に反映する Live Edit Android Studio Electric Eelの機能⚡

  29. Preview Emulator Android Studio Electric Eelの機能⚡

  30. What’s new in Android development tools • Jetpack Composeでの変更を瞬時に反映できる •

    実機でも動く • Previewでも動く • Interactive Previewでも動く • 変更したコードのみをコンパイルするため、 プロジェクトサイズが大きくなってもビルド速度に影響しない Live Editができること Android Studio Electric Eelの機能⚡
  31. Android What’s new in Android development tools • 🕵 簡単に言うとLive

    Editで挙動を変更するためにクラスを入れ替えて、コンパイ ルしたコードをそのクラスに送って、そのクラスの挙動を変えている。 ◦ ART Tools Interface(ART TI)のRetransformClassesを使って、LiveEditStubsクラスを呼ばせるようにして、そのクラスにビルド し たBytecodeのクラスを流し込んで、その BytecodeをJavaコード上でインタプリタ実行することで、実行時に動作を差し替えているよ うに見える。 Live Editの仕組みと制約 Android Studio アプリ Composable関数の 実際のスコープラムダ LiveEditStubs RetransformClass Java bytecode
  32. What’s new in Android development tools 実際にコードを変えているわけではないので、さまざまな制約がこの仕組みのため生 じる。 Live Editの仕組みと制約

  33. What’s new in Android development tools • Live Editを使っている場所はパフォーマンスに影響するのでパフォーマンス計測に適さない ◦

    → Release buildでProfilable apkなどを使う • 例えばNavigationでリスト画面から詳細画面に移動した後に LiveEditするとリストの画面に戻 る ◦ → 部分的なCompositionができるように開発中 • 実機では関数名の変更などができない。 ◦ → Previewではその部分をコンパイルしなおすため Live Editで変更できる。 など Live Editが現状できないこと 参考: https://developer.android.com/studio/run#limitations
  34. Performance Performance best practices for Jetpack Compose

  35. Adobe Stock#243026154 releaseでR8を使ってパフォーマンスの 検証を行ってください。デバッグではデ バッグの体験を良くするために最適化 をオフしているため。 Configuration たくさんのJetpack Composeの パフォーマンスを最適化できる

    ポイント Gotchaは落とし穴みたいな意味で使 われるようです。 Gotchas Performance best practices for Jetpack Compose
  36. Adobe Stock#243026154 releaseでR8を使ってパフォーマンス の検証を行ってください。デバッグでは デバッグの体験を良くするために最適 化をオフしているため。 Configuration たくさんのJetpack Composeの パフォーマンスを最適化できる

    ポイント Gotchaは落とし穴みたいな意味で使 われるようです。 Gotchas Performance best practices for Jetpack Compose
  37. Adobe Stock#243026154 releaseでR8を使ってパフォーマンスの 検証を行ってください。デバッグではデ バッグの体験を良くするために最適化 をオフしているため。 Configuration たくさんのJetpack Composeの パフォーマンスを最適化できる

    ポイント Gotchaは落とし穴みたいな意味で使 われるようです。 Gotchas Performance best practices for Jetpack Compose
  38. • (ディライブと読む) derivedStateOf{}を使って Recomposeを減らす Performance best practices for Jetpack Compose

  39. Proprietary + Confidential “上にスクロールボタン”を ちょっとスクロールしていたら出したい https://youtu.be/EOQB8PTLkpY?t=304 より

  40. Proprietary + Confidential 最初に見えているItemが1個目じゃなければ ボタンを表示。。。 https://youtu.be/EOQB8PTLkpY?t=304 より

  41. Proprietary + Confidential このComposable関数の中で listStateを読み込むと 不必要にスクロールのフレームごとに このComposable関数全体を再度実行する😂 https://youtu.be/EOQB8PTLkpY?t=304 より

  42. Proprietary + Confidential derivedStateOf{}で スクロールの変化があったときにこのラムダ内 だけ実行して、計算結果が変わったときだけ 外側のComposable関数が再実行される https://youtu.be/EOQB8PTLkpY?t=304 より

  43. ComposeにはComposition -> Layout -> Drawというフェーズがあり、もし Compositionをもう一度行うと、すべてフェーズが実行される なるべく後のフェーズを利用する Performance best practices

    for Jetpack Compose https://youtu.be/EOQB8PTLkpY?t= 558 より
  44. なるべく後のフェーズを利用する Performance best practices for Jetpack Compose https://youtu.be/EOQB8PTLkpY?t=633 より 色のアニメーションをしたいときに、これだと色が変わるたびに

    Composition -> Layout -> Drawが走る。
  45. なるべく後のフェーズを利用する Performance best practices for Jetpack Compose https://youtu.be/EOQB8PTLkpY?t=633 より drawBehind{}のラムダ内でColorの値を

    使うと
 colorが変わったときに
 CompositionとLayoutを飛ばして、
 Drawフェーズだけ再度行うことができる

  46. Performance Lazy Layouts in Compose

  47. • RecyclerViewと似ている。 • たくさんの表示するアイテムが あったとしても、必要に応じてコ ンテンツを作ってくれて、パ フォーマンスを最適化する。 • 現在、LazyColumnや LazyRow、LazyGridが存在す

    る。 一般的な ユースケース
 01 • LazyLayoutという新しいコ ンポーネント • Item animations 新機能 02 いくつかのTips 最適化Tipsと Performance について 03 Lazy Layouts in Compose
  48. • RecyclerViewと似ている。 • たくさんの表示するアイテムが あったとしても、必要に応じてコ ンテンツを作ってくれて、パ フォーマンスを最適化する。 • 現在、LazyColumnや LazyRow、LazyGridが存在す

    る。 一般的な ユースケース
 01 • LazyLayoutという新しいコ ンポーネント • Item animations 新機能 02 いくつかのTips 最適化Tipsと Performance について 03 Lazy Layouts in Compose
  49. LazyLayout 今のLazyColumnなどでサポートされていないものを利用した いときに利用する。
 例えばWearのスクロールで大きさが変わるレイアウト ScalingLazyColumnが
 これを使って作られている。
 
 RecyclerViewに対するLayoutManagerに似ている。
 Lazy Layouts

    in Compose https://developer.android.com/codelabs/compose-for- wear-os?hl=ja#6 より Compose 1.2.0 alpha08〜の機能

  50. Item animations https://youtu.be/1ANt65eoNhQ?t=722 より 並び替えのアニメーションに対応している。
 アニメーションのスペックのカスタマイズも可能。
 itemにkeyを渡すことを忘れないようにする。
 itemに渡すkeyはStringなどの他に、parcelableである必要が あるが、この理由は画面回転を通して生き残るために rememberSavable{}が中で使われているから。


    
 
 Lazy Layouts in Compose Compose 1.1の機能

  51. • RecyclerViewと似ている。 • たくさんの表示するアイテムが あったとしても、必要に応じてコ ンテンツを作ってくれて、パ フォーマンスを最適化する。 • 現在、LazyColumnや LazyRow、LazyGridが存在す

    る。 一般的な ユースケース
 01 • LazyLayoutという新しいコ ンポーネント • Item animations 新機能 02 いくつかのTips 最適化Tipsと Performance について 03 Lazy Layouts in Compose
  52. 0ピクセルアイテムを使わない 例えば、LazyColumnでは上からア イテムを埋めていくが、 0の高さだと いくらでも入るので、 全部のアイテムを作ってしまう。 そして、それぞれのアイテムで画像 が読み込まれて、その後見えるとこ ろ以外は破棄する動きになる。 😇

    → 固定の大きさを入れておくと良 い。 Lazy Layouts in Compose https://youtu.be/1ANt65eoNhQ?list=PLWz5rJ2EKKc_gLZhqjTRn0 vGssFiP_4Kb&t=850 より
  53. Content Typeを渡すAPIが追加 に Lazy Layouts in Compose https://youtu.be/1ANt65eoNhQ?list=PLWz5rJ2E KKc_gLZhqjTRn0vGssFiP_4Kb&t=1302 より

    Compositionを同じコンテントタイプ間で使い回 す。これによって同じような構造をitemが持つと きにもっと効率的になる。 Compose 1.2の機能
  54. Tools & Performance What's new in app performance

  55. • Android Studioのプロファイラ とWebツールのPerfettoがあ り、相互運用可能。 • Perfettoだとtrace processorを 使うとSQLベースで詳細な分析 ができる。

    • Google PlayのAndroid Vitals も利用できる。実際のデバイス でのパフォーマンスが見られ る。なにか異常があったときに 通知が受け取れる。 Performance tools
 01 • ユーザーにいい第一印象 やそうでない印象を与えら れる場所。 • Cold/Warm/Hot Startup。 TTID/TTFD。 Activity#reportFullyDraw n() • Macrobenchmark • Baseline profiles • App Startup Library • JankとJank Stats App Startup / Jank 02 • Mainlining ART • 新しいGarbage Collector(GC) • Runtimeの改善 Runtimeの改 善 03 What's new in app performance
  56. • Android Studioのプロファイラ とWebツールのPerfettoがあ り、相互運用可能。 • Perfettoだとtrace processor を使うとSQLベースで詳細な分 析ができる。

    • Google PlayのAndroid Vitals も利用できる。実際のデバイス でのパフォーマンスが見られ る。なにか異常があったときに 通知が受け取れる。 Performance tools
 01 • ユーザーにいい第一印象 やそうでない印象を与えら れる場所。 • Cold/Warm/Hot Startup。 TTID/TTFD。 Activity#reportFullyDraw n() • Macrobenchmark • Baseline profiles • App Startup Library • JankとJank Stats App Startup / Jank 02 • Mainlining ART • 新しいGarbage Collector(GC) • Runtimeの改善 Runtimeの改 善 03 What's new in app performance
  57. • Android Studioのプロファイラ とWebツールのPerfettoがあ り、相互運用可能。 • Perfettoだとtrace processorを 使うとSQLベースで詳細な分析 ができる。

    • Google PlayのAndroid Vitals も利用できる。実際のデバイス でのパフォーマンスが見られ る。なにか異常があったときに 通知が受け取れる。 Performance tools
 01 • ユーザーにいい第一印象 やそうでない印象を与えら れる場所。 • Cold/Warm/Hot Startup。 TTID/TTFD。 Activity#reportFullyDraw n() • Macrobenchmark • Baseline profiles • App Startup Library • JankとJank Stats App Startup / Jank 02 • Mainlining ART • 新しいGarbage Collector(GC) • Runtimeの改善 Runtimeの改 善 03 What's new in app performance
  58. App Startup ユーザーにいい第一印象やそうでない印象を与えられる場所。 なぜ早くする必要があるのか今回は省略します。 What's new in app performance

  59. App Startup TTID/TTFD • TTID : Time to initial display

    プロセスが起動 Objectが初期化 Activityが作成された状態 Layoutが作成された状態 最初のフレームが表示された状態 What's new in app performance ActivityManager: Displayed com.android.myexample/.StartupTiming: +3s534ms https://developer.android.com/topic/performance/vitals/launch-time よ り
  60. App Startup TTID/TTFD • TTFD: Time to full display すべての関連するデータがロードされている。ユーザーが操作可能。

    What's new in app performance https://developer.android.com/topic/performance/vitals/launch-time よ り
  61. App Startup TTID/TTFD • TTFD: Time to full display すべての関連するデータがロードされている。ユーザーが操作可能。

    OSにはTTFDのタイミングがわからない。 AndroidにActivity#reportFullyDrawn()を呼ぶことで、教えることができる。 What's new in app performance
  62. App Startup TTID/TTFD • TTFD: Time to full display すべての関連するデータがロードされている。ユーザーが操作可能。

    OSにはTTFDのタイミングがわからない。 AndroidにActivity#reportFullyDrawn()を呼ぶことで、教えることができる。 startup metricsを収集するのに利用でき、 それだけでなくahead of time(AOT) or just in time(JIT)コンパイラに最適化さ れるべきコードパスの情報をAndroidフレームワークに提供する。 つまり一行追加するだけで、パフォーマンスが改善できる。 What's new in app performance
  63. “Every application should be using this API” Google Android Team

    Activity#reportFullyDrawn()について https://android-developers.googleblog.com/2021/11/improving-app-startup-facebook-app.html
  64. Macrobenchmark アプリのユースケースをテストできる。アプリの起動やスクロールのパフォーマンスなど。 CIで継続的にチェック可能。 App StartupではCold、Warm、Hot startupを見られる。 Android Studio Bumblebee 🐝よりNew

    moduleから簡単に追加できるようになった。 What's new in app performance
  65. Macrobenchmark ベンチマークビルドは難読化するべきではないので、don't obfuscateを含む別のProguard Ruleファイ ルを作る。 app/benchmark-rules.pro -dontobfuscate What's new in

    app performance val benchmark by creating { initWith(release) signingConfig = signingConfigs.getByName("debug") matchingFallbacks.add("release") proguardFiles("benchmark-rules.pro") } https://github.com/android/nowinandroid より
  66. Profileを提供することで、パフォーマンスの改善できる Baseline Profile

  67. Baseline Profile AndroidのAhead of time(AOT)コンパイラに情報を与えることができるツール。 与えられた情報はAndroid runtimeによってクリティカルパスをプリコンパイルするために 使われる。 アプリの起動時間を改善する。
 Jank

    frameも軽減する。
 ライブラリでも提供でき、Composeなどはすでに提供している。 What's new in app performance
  68. Baseline Profileの作成方法は? ドキュメントを参考にすれば簡単にできる。 https://developer.android.com/topic/performance/baselineprofiles 基本的には2ステップ • Macrobenchmarkを動かしてプロファイルを作る • プロファイルをアプリに入れてリリースする Android

    StudioにMacrobenchmarkモジュールを追加してくれる機能があ るので比較的楽にできる。 What's new in app performance
  69. Baseline Profileの作成方法は? • Macrobenchmarkのためのモジュールを作る • Baseline Profileを作成するためのBaselineProfileRuleを利用したテストを追加す る。 • エミュレーターを起動する。(Managed

    Gradle Devicesでも可) • ベンチマークで効果を確認してみる。 • テストで実行するとadb pullコマンドが表示されるので、それを実行して、取得した プロファイルをbaseline-prof.txtにリネームしてソースフォルダ app/src/main/ に置 く。 • ProfileInstaller libraryをdependenciesに追加。 • ビルドしてリリースする。 What's new in app performance
  70. “AndroidのAhead of time(AOT)コンパイラに情報を与 える”っていうのは何を提供するの? 起動時に使われているメソッドのリスト。 Baseline ProfileはMacrobenchmarkで実際にアプリを動かして 使われたメソッドのリストを作る。 前についているHSPは H

    = Hot S = Startup P = Post Startup を示す。 What's new in app performance baseline-prof.txtの中身
  71. Composeなどはすでにライブラリで提供しているってこ とだったけど、アプリではやらなくていいってこと? アプリ内のメソッドについては事前コンパイルされないので、アプリでもできればやったほうが良い。 ちなみにアプリのものとライブラリのものがマージされるみたい。 What's new in app performance

  72. Baseline Profileが向いているアプリとかある? 頻繁にリリースするアプリに向いている。数ヶ月に一回ならいらなそうかも。 なぜなら、クラウドプロファイルという仕組みがあり、リリースから数日経つとGoogle Playから同じ仕組み でプロファイルが提供されるため。 (Cloud Profile) What's new

    in app performance
  73. 勝手にCloud Profileで最適化されるなら、Baseline Profileいらなくない? Google Mapでは週1リリースしていて、Baseline Profileを入れることで30%起動を改善できたみたいで、 実績があるようです。 > Collecting and

    aggregating the profiles usually takes several days, which is a problem when many apps update on a weekly basis. 使えるようになるのに数日かかるため。 参考: https://android-developers.googleblog.com/2022/01/improving-a pp-performance-with-baseline.html 参 考:https://developer.android.com/topic/performance/baselinepro files What's new in app performance
  74. Macrobenchmarkでは難読化しないっていうことだった けど、それでプロファイル作ったら、難読化されずに aab/ apkにプロファイル入っちゃわない? 実際にaab/apkにアプリに組み込まれるときにマッピングファイルを見て、置き換えするので、問題ないよ うです。 What's new in app

    performance
  75. 7〜最新OSまで対応。 おそらくユーザーの90%以上はいるはず。 7〜8.1に関してはクラウドプロファイルにも対応していないので、 Baseline Profileを使う以外に最適化する方法がない。 What's new in app performance

    対応OSは?Android 12以降だけ?
  76. What's new in app performance GDEのすたぜろさんがGitHubActionsで動かす例を書いてくれています。 これをリリースのタイミングに動かすのが良いかもしれません。 https://github.com/STAR-ZERO/DagashiApp/blob/main/.github/workflows/baseline-profile.yml#L55-L57 継続的にBaseline Profileを


    更新していくには?
  77. Baseline Profileのハマりポイントは?1 • なるべく新しいライブラリを使おう ◦ うまくベンチマークが取れないことがある(Microbenchmark 1.1.0-rc02以上) ◦ aabにprofileが含まれないバグ(AGP 7.2.1以上)

    ◦ https://issuetracker.google.com/issues/230361284 ◦ Primary dexしかみられないバグ(AGP 7.3.0-beta01以上) ▪ そこまで大きな影響はないかも ▪ > Baseline profiles are only correctly packaged for the primary classes.dex file ▪ https://developer.android.com/topic/performance/baselineprofiles#known-issues What's new in app performance
  78. Baseline Profileのハマりポイントは?2 • Marcobenchmarkによる生成のハマりポイント • Google Playがないエミュレーターで実行する必要がある。(root権限が必要) • Android 12Lなどだと動かなかったりする

    (自分はAPI Level 30で動いた) • Macrobenchmarkを動かすビルドタイプのproguardは-dontobfuscateを使う。難読化されたプロ ファイルは使えない。(リリースでは-dontobfuscateしないようにしてください。リリースとは別のビル ドタイプを作っておくと良いです) • プロダクトフレーバーがある場合は、benchmarkのモジュールが同じプロダクトフレーバーを持つよ うにしないとビルドできないので、benchmarkのモジュールにもフレーバーを追加する • 途中から動かなくなって内部エラーみたいなので落ちる場合にプロファイルたくさん録っているせいで 容量不足になっている場合があるので adb shellして、cd /sdcardして、find .したりして、大きいファイルを探してみる。 What's new in app performance
  79. Thank you! Google Developers Expert for Android DroidKaigi Co-Organizer ABEMA

    Native Team / CyberAgent Developer Experts @new_runnable takahirom(Takahiro Menju) Thanks Yuji Hato, Seiya Kokushi for the review and suggestions.