ProfileInstaller

  
ART によって読み取られる事前コンパイル トレースをライブラリが事前取り込みできるようにします。
最新の更新 現在の安定版リリース 次のリリース候補 ベータ版リリース アルファ版リリース
2021 年 10 月 27 日 1.0.4 - 1.1.0-beta01 -

依存関係の宣言

ProfileInstaller への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。

アプリまたはモジュールの build.gradle ファイルに、必要なアーティファクトの依存関係を追加します。

Groovy

dependencies {
    implementation "androidx.profileinstaller:profileinstaller:1.1.0-beta04"
}

Kotlin

dependencies {
    implementation("androidx.profileinstaller:profileinstaller:1.1.0-beta04")
}

依存関係について詳しくは、ビルド依存関係の追加をご覧ください。

フィードバック

お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。

新しい問題を報告する

詳細については、Issue Tracker のドキュメントをご覧ください。

バージョン 1.1.0

バージョン 1.1.0-beta01

2021 年 10 月 27 日

androidx.profileinstaller:profileinstaller:1.1.0-beta01 がリリースされました。バージョン 1.1.0-beta01 に含まれる commit については、こちらをご覧ください

  • 1.1.0-alpha07 からの変更はありません。

バージョン 1.1.0-alpha07

2021 年 10 月 13 日

androidx.profileinstaller:profileinstaller:1.1.0-alpha07 がリリースされました。バージョン 1.1.0-alpha07 に含まれる commit については、こちらをご覧ください。

新機能

  • Android N で profm のサポートを追加

バージョン 1.1.0-alpha06

2021 年 9 月 29 日

androidx.profileinstaller:profileinstaller:1.1.0-alpha06 がリリースされました。バージョン 1.1.0-alpha06 に含まれる commit については、こちらをご覧ください

バグの修正

  • N、O、O_MR1 における profileinstaller のコード変換の問題を修正しました。(I12d75

バージョン 1.1.0-alpha05

2021 年 9 月 15 日

androidx.profileinstaller:profileinstaller:1.1.0-alpha05 がリリースされました。バージョン 1.1.0-alpha05 に含まれる commit については、こちらをご覧ください

バグの修正

  • Multidex APK の Android Nougat と Android Oreo プロファイルのコード変換を修正しました。

バージョン 1.1.0-alpha04

2021 年 9 月 1 日

androidx.profileinstaller:profileinstaller:1.1.0-alpha04 がリリースされました。バージョン 1.1.0-alpha04 に含まれる commit については、こちらをご覧ください

バグの修正

  • ベースライン プロファイルを使用するアプリで、CompilationMode.BaselineProfile を使って MacroBenchmark を簡単に実行できるよう ProfileInstaller を修正しました。(I42657b/196074999

バージョン 1.1.0-alpha03

2021 年 8 月 18 日

androidx.profileinstaller:profileinstaller:1.1.0-alpha03 がリリースされました。バージョン 1.1.0-alpha03 に含まれる commit については、こちらをご覧ください

バグの修正

  • プロファイルをインストーラでスキップする動作を変更して、PackageInfo.lastUpdatedTime をアプリのファイル ディレクトリ内のファイルに記録し、次回実行時のプロファイルのインストール前に比較するようにしました。(Ib93d1
  • ART の要件を遵守するように P、Q、R デバイスに関するプロファイルの形式を調整しました(I84e89

バージョン 1.1.0-alpha02

2021 年 8 月 4 日

androidx.profileinstaller:profileinstaller:1.1.0-alpha02 がリリースされました。バージョン 1.1.0-alpha02 に含まれる commit については、こちらをご覧ください

Compose 1.1.0-alpha01 との互換性を確保するために更新しました。

バージョン 1.1.0-alpha01

2021 年 7 月 21 日

androidx.profileinstaller:profileinstaller:1.1.0-alpha01 がリリースされました。バージョン 1.1.0-alpha01 に含まれる commit については、こちらをご覧ください

バグの修正

  • 特定の状況で厳格モードがトリガーされるバグを修正しました。

バージョン 1.0

バージョン 1.0.4

2021 年 10 月 13 日

androidx.profileinstaller:profileinstaller:1.0.4 がリリースされました。バージョン 1.0.4 に含まれる commit については、こちらをご覧ください

  • Compose 1.0.4 をサポートするように更新しました

バージョン 1.0.3

2021 年 9 月 29 日

androidx.profileinstaller:profileinstaller:1.0.3 がリリースされました。バージョン 1.0.3 に含まれる commit については、こちらをご覧ください

  • Compose 1.0.3 をサポートするように更新しました

バージョン 1.0.2

2021 年 9 月 1 日

androidx.profileinstaller:profileinstaller:1.0.2 がリリースされました。バージョン 1.0.2 に含まれる commit については、こちらをご覧ください

バグの修正

  • P、Q、R デバイスのプロファイルのコード変換を追加しました。この変更により、これらのデバイスではプロファイルがコード変換され、記述したプロファイルが常に ART で使用できるようになります。以前、これらのプラットフォームではコード変換がスキップされ、ART がソース プロファイルを処理できないことがありました。デベロッパー向け API に変更はありません。

バージョン 1.0.1

2021 年 8 月 4 日

androidx.profileinstaller:profileinstaller:1.0.1 がリリースされました。バージョン 1.0.1 に含まれる commit については、こちらをご覧ください

Compose 1.0.1 との互換性を確保するために更新しました。

バージョン 1.0.0

2021 年 7 月 28 日

androidx.profileinstaller:profileinstaller:1.0.0 がリリースされました。バージョン 1.0.0 に含まれる commit については、こちらをご覧ください

1.0.0 の主な機能

ProfileInstaller は、ライブラリとアプリが「プロファイル ルール」を定義して ART プロファイル情報を APK にバンドルするための新しいライブラリです。このライブラリは、アプリの起動後に該当プロファイルをインストールします。これは、アプリのパフォーマンスの向上に役立ちます。

プロファイル ルールの詳細と仕組みについては、1.0.0-beta01 のリリースノートをご覧ください。

バージョン 1.0.0-rc02

2021 年 7 月 14 日

androidx.profileinstaller:profileinstaller:1.0.0-rc02 がリリースされました。バージョン 1.0.0-rc02 に含まれる commit については、こちらをご覧ください

バージョン 1.0.0-rc01

2021 年 7 月 1 日

androidx.profileinstaller:profileinstaller:1.0.0-rc01 がリリースされました。バージョン 1.0.0-rc01 に含まれるコミットについては、こちらをご覧ください

これはリリース候補版であり、ベータ版からの変更はありません。

バージョン 1.0.0-beta01

2021 年 6 月 16 日

androidx.profileinstaller:profileinstaller:1.0.0-beta01 がリリースされました。バージョン 1.0.0-beta01 に含まれるコミットについては、こちらをご覧ください

ライブラリの目的

ProfileInstaller は、ライブラリとアプリが「プロファイル ルール」を定義して ART プロファイル情報を APK にバンドルするための新しいライブラリです。このライブラリは、アプリの起動後に該当プロファイルをインストールします。これは、アプリのパフォーマンスの向上に役立ちます。

このプロファイルのインストールは、androidx.startup ライブラリで行われます。なんらかの理由でプロファイルのインストールを無効にしたい場合は、マニフェストを変更して削除できます。


       <provider
           android:name="androidx.startup.InitializationProvider"
           android:authorities="${applicationId}.androidx-startup"
           android:exported="false"
           tools:node="merge">
           <meta-data android:name="androidx.profileinstaller.ProfileInstallerInitializer"
                     tools:node="remove" />
       </provider>

これは、アプリの起動要件が複雑で、ProfileInstaller.writeProfile API を使用してプロファイルのインストールを手動でトリガーしたい場合に、特に便利です。

プロファイル ルールとは

  • ライブラリのプロファイル ルールは、src/main または同等のディレクトリにあるテキスト ファイル baseline-prof.txt で指定します。このファイルでは、1 行に 1 つずつルールを指定します。ここでのルールは、ライブラリ内のメソッドまたはクラスとマッチングするパターンです。ルールの構文は、人が読める ART プロファイル形式のスーパーセットで、adb shell profman --dump-classes-and-methods ... を使用する際に使用されます。ルールは、メソッドまたはクラスをターゲットとする 2 つの形式のいずれかを使用します。

  • メソッドルールのパターンは次のようになります。

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • クラスルールのパターンは次のようになります。

    <CLASS_DESCRIPTOR>
    
  • 上記の <FLAGS> は、このメソッドに「ホット」、「起動」、または「起動後」のフラグを付けるかどうかを示す文字 HSP(1 つまたは複数)です。

  • <CLASS_DESCRIPTOR> は、ターゲットとなるメソッドが属するクラスの記述子です。たとえば、クラス androidx.compose.runtime.SlotTable の記述子は、Landroidx/compose/runtime/SlotTable; です。

  • <METHOD_SIGNATURE> はメソッドのシグネチャで、メソッドの名前、パラメータの型、戻り値の型を含みます。たとえば、LayoutNode のメソッド fun isPlaced(): Boolean のシグネチャは、isPlaced()Z です。

  • 1 つのルールに複数のメソッドまたはクラスを含める場合は、これらのパターンにワイルドカード(***?)を使用できます。

ルールの機能

  • フラグ H が付いているメソッドは、このメソッドが「ホット」メソッドであり、事前コンパイルが必要であることを示します。

  • S フラグが付いているメソッドは、このメソッドが起動時に呼び出されるメソッドであり、コンパイルのコストと起動時にメソッドを解釈するコストを回避するために事前コンパイルが必要であることを示します。

  • P フラグが付いているメソッドは、このメソッドが起動後に呼び出されることを示します。

  • このファイルに存在するクラスは、このクラスが起動時に使用されるクラスであり、クラス読み込みのコストを回避するためにヒープで事前割り当てする必要があることを示しています。

ルールの仕組み

  • ライブラリは、AAR アーティファクトにパッケージするルールを定義できます。それらのアーティファクトを含む APK がビルドされると、ルールが結合されます。結合されたルールは、APK に固有のコンパクト バイナリ ART プロファイルをビルドするために使用されます。ART は、アプリの特定のサブセットを事前コンパイルするために、APK がデバイスにインストールされたときにこのプロファイルを利用して、アプリのパフォーマンス(特に初回実行時)を改善できます。なお、これはデバッグ可能なアプリには影響しません。

  • ルールファイルには baseline-prof.txt という名前を付けて、メイン ソースセットのルート ディレクトリに配置する必要があります(AndroidManifset.xml ファイルの兄弟ファイルにする必要があります)。

  • 現時点では、これらのファイルを利用できるのは、Android Gradle プラグイン 7.0 以降を使用し、gradle.properties 内のフラグで有効にしている場合のみです。

    # Enable adding baseline-prof.txt files to AAR artifacts, and binary profiles to APKs
    android.experimental.enableArtProfiles=true
    

プロファイルにはバランスが必要

  • 最良の結果を得るには、起動パスに含まれ、パフォーマンス上重要な役割を果たすメソッドとクラスを正しく優先順位付けするように適切に作成されたプロファイルが必要です。しかし、プロファイルに含めるメソッドまたはクラスの数が多すぎると、メモリ消費とディスク使用の影響で実質的な効果が低下する可能性があります。したがって、独自のプロファイル ルールを定義する場合は、控えめなルールからスタートすることをおすすめします。