Slide 1

Slide 1 text

Android Tools & Performance takahirom

Slide 2

Slide 2 text

セッションの範囲

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Tools What’s new in Android development tools

Slide 6

Slide 6 text

基本的にこれまでの 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

Slide 7

Slide 7 text

基本的にこれまでの 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 デモから注目ポイントを紹介

Slide 8

Slide 8 text

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)

Slide 9

Slide 9 text

What’s new in Android development tools 連携していると、クラッシュしている箇所がコード 上で警告が表示される。 そこからクラッシュ数などが確認できる。 クラッシュ一覧をAndroid Studio上で確認して、 スタックトレースからコードを追うことも可能。 Firebase Crashlyticsとの連携 https://youtu.be/RFv8GkLd5OY?t=1865 より Android Studio Electric Eelの機能⚡

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

What’s new in Android development tools Build Analyzerに Check Jetifierが追加 ライブラリがSupport Libraryに依存しているとJetifierをオフにできないが、 これまではどのライブラリが昔のSupport Libraryに依存しているかが簡単に分からな かった。 Android Studio Chipmunkの機能🐿

Slide 12

Slide 12 text

What’s new in Android development tools ビルドが終わると Build Analyzerへのリンクが出ている これをクリックする Android Studio Chipmunkの機能🐿

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

What’s new in Android development tools ライブラリをアップデートする前に、 アップデートするときにどのバージョンがいいのか QuickFixでGoogle Play SDK Indexが確認でき るように Android Studio Electric Eelの機能⚡

Slide 17

Slide 17 text

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とは?

Slide 18

Slide 18 text

What’s new in Android development tools Androidはフレームごとに描画しているが、処理 時間がフレームを超えるとそのフレームはそのま まになり、もたつくような動き (= Jank)になる。 UI jank detection Android Studio のChipmunk機能🐿

Slide 19

Slide 19 text

What’s new in Android development tools Android StudioのプロファイラでJankが出ている 部分を教えてくれる。 フレームのデッドラインも表示して、超えた部分 が赤く表示されて改善するべき場所がかなり分 かりやすい。 UI jank detection 改善するべき場所 デッドライン Android Studio のChipmunk機能🐿

Slide 20

Slide 20 text

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の機能🐬

Slide 21

Slide 21 text

What’s new in Android development tools ● 実機端末をつないでいるときに Android Studio内で画面が見られるの で開発が楽になる。 ● 複数端末もつなぐことができる。 Device Mirroring https://www.youtube.com/watch?v=RFv8GkLd5OY より Android Studio Electric Eelの機能⚡

Slide 22

Slide 22 text

What’s new in Android development tools ● 一見通常のエミューレーターのように見え ますが、上からレイアウトの切り替えができ る ● これによって異なる画面サイズでの確認が 簡単に ● それぞれのサイズを最初に開くときにちょっ と重いけど、最初だけだそうです。 Resizable Emulator https://www.youtube.com/watch?v=RFv8GkLd5OY より Android Studio Electric Eelの機能⚡

Slide 23

Slide 23 text

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の機能⚡

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

What’s new in Android development tools ● Jetpack ComposeはRecompositionがたくさん起きると、 パフォーマンスが悪化する ● LayoutInspectorでRecomposition Countsにチェックを入れると見られる。 Recomposition Count Android Studio Dolphinの機能🐬

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

Composeの変更を瞬時に反映する Live Edit Android Studio Electric Eelの機能⚡

Slide 29

Slide 29 text

Preview Emulator Android Studio Electric Eelの機能⚡

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

What’s new in Android development tools 実際にコードを変えているわけではないので、さまざまな制約がこの仕組みのため生 じる。 Live Editの仕組みと制約

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

Performance Performance best practices for Jetpack Compose

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

● (ディライブと読む) derivedStateOf{}を使って Recomposeを減らす Performance best practices for Jetpack Compose

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

ComposeにはComposition -> Layout -> Drawというフェーズがあり、もし Compositionをもう一度行うと、すべてフェーズが実行される なるべく後のフェーズを利用する Performance best practices for Jetpack Compose https://youtu.be/EOQB8PTLkpY?t= 558 より

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

なるべく後のフェーズを利用する Performance best practices for Jetpack Compose https://youtu.be/EOQB8PTLkpY?t=633 より drawBehind{}のラムダ内でColorの値を 使うと
 colorが変わったときに
 CompositionとLayoutを飛ばして、
 Drawフェーズだけ再度行うことができる


Slide 46

Slide 46 text

Performance Lazy Layouts in Compose

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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〜の機能


Slide 50

Slide 50 text

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


Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

0ピクセルアイテムを使わない 例えば、LazyColumnでは上からア イテムを埋めていくが、 0の高さだと いくらでも入るので、 全部のアイテムを作ってしまう。 そして、それぞれのアイテムで画像 が読み込まれて、その後見えるとこ ろ以外は破棄する動きになる。 😇 → 固定の大きさを入れておくと良 い。 Lazy Layouts in Compose https://youtu.be/1ANt65eoNhQ?list=PLWz5rJ2EKKc_gLZhqjTRn0 vGssFiP_4Kb&t=850 より

Slide 53

Slide 53 text

Content Typeを渡すAPIが追加 に Lazy Layouts in Compose https://youtu.be/1ANt65eoNhQ?list=PLWz5rJ2E KKc_gLZhqjTRn0vGssFiP_4Kb&t=1302 より Compositionを同じコンテントタイプ間で使い回 す。これによって同じような構造をitemが持つと きにもっと効率的になる。 Compose 1.2の機能

Slide 54

Slide 54 text

Tools & Performance What's new in app performance

Slide 55

Slide 55 text

● 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

Slide 56

Slide 56 text

● 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

Slide 57

Slide 57 text

● 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

Slide 58

Slide 58 text

App Startup ユーザーにいい第一印象やそうでない印象を与えられる場所。 なぜ早くする必要があるのか今回は省略します。 What's new in app performance

Slide 59

Slide 59 text

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 よ り

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

“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

Slide 64

Slide 64 text

Macrobenchmark アプリのユースケースをテストできる。アプリの起動やスクロールのパフォーマンスなど。 CIで継続的にチェック可能。 App StartupではCold、Warm、Hot startupを見られる。 Android Studio Bumblebee 🐝よりNew moduleから簡単に追加できるようになった。 What's new in app performance

Slide 65

Slide 65 text

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 より

Slide 66

Slide 66 text

Profileを提供することで、パフォーマンスの改善できる Baseline Profile

Slide 67

Slide 67 text

Baseline Profile AndroidのAhead of time(AOT)コンパイラに情報を与えることができるツール。 与えられた情報はAndroid runtimeによってクリティカルパスをプリコンパイルするために 使われる。 アプリの起動時間を改善する。
 Jank frameも軽減する。
 ライブラリでも提供でき、Composeなどはすでに提供している。 What's new in app performance

Slide 68

Slide 68 text

Baseline Profileの作成方法は? ドキュメントを参考にすれば簡単にできる。 https://developer.android.com/topic/performance/baselineprofiles 基本的には2ステップ ● Macrobenchmarkを動かしてプロファイルを作る ● プロファイルをアプリに入れてリリースする Android StudioにMacrobenchmarkモジュールを追加してくれる機能があ るので比較的楽にできる。 What's new in app performance

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

“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の中身

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

勝手に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

Slide 74

Slide 74 text

Macrobenchmarkでは難読化しないっていうことだった けど、それでプロファイル作ったら、難読化されずに aab/ apkにプロファイル入っちゃわない? 実際にaab/apkにアプリに組み込まれるときにマッピングファイルを見て、置き換えするので、問題ないよ うです。 What's new in app performance

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

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を
 更新していくには?

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

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

Slide 79

Slide 79 text

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.