ProfileInstaller

  
在 ART 讀取時間編譯追蹤記錄之前,讓程式庫預先填入。
最近更新時間 穩定版 候選版 Beta 版 Alpha 版
2024 年 9 月 4 日 1.3.1 1.4.0-rc01 - -

宣告依附元件

如果要為 ProfileInstaller 新增依附元件,您必須將 Google Maven 存放區新增至專案。詳情請參閱 Google 的 Maven 存放區

在應用程式或模組的 build.gradle 檔案中,新增所需構件的依附元件:

Groovy

dependencies {
    implementation "androidx.profileinstaller:profileinstaller:1.3.1"
}

Kotlin

dependencies {
    implementation("androidx.profileinstaller:profileinstaller:1.3.1")
}

如要進一步瞭解依附元件,請參閱「新增建構依附元件」一文。

意見回饋

您的意見可協助我們改善 Jetpack。如果您發現新問題,或是有改進這個程式庫的建議,請告訴我們。回報新問題前,請先查看這個程式庫的現有問題。只要按一下星號按鈕,即可投票給現有的問題。

建立新問題

詳情請參閱 Issue Tracker 文件

1.4 版

1.4.0-rc01 版本

2024 年 9 月 4 日

發布 androidx.profileinstaller:profileinstaller:1.4.0-rc01,該版本與上一個 Beta 版沒有差別。1.4.0-rc01 版包含這些修訂版本

1.4.0-beta01 版本

2024 年 8 月 21 日

發布 androidx.profileinstaller:profileinstaller:1.4.0-beta01,該版本與上一個 Alpha 版沒有差別。1.4.0-beta01 版包含這些修訂版本

1.4.0-alpha02 版

2024 年 8 月 7 日

發布 androidx.profileinstaller:profileinstaller:1.4.0-alpha02。1.4.0-alpha02 版包含這些修訂版本

新功能

  • 為設定檔安裝程式新增 API 35 支援。(6f9f6fa)。

修正錯誤

  • 由於使用 R8 搭配 AGP 7.3 以上版本 (例如 R8 3.3) 時,以及所有使用 AGP 8.1 以上版本 (例如 D8 8.1) 的建構作業,這項作業會自動透過 API 模型建立,因此我們不再手動列出新平台 API 的存取權。針對非使用 AGP 的用戶端,建議更新至 D8 8.1 以上版本。詳情請參閱這篇文章。(If6b4cb/345472586)

1.4.0-alpha01 版

2024 年 2 月 7 日

發布 androidx.profileinstaller:profileinstaller:1.4.0-alpha011.4.0-alpha01 版包含此連結所列的修訂項目

修正錯誤

  • 針對未嵌入設定檔驗證器的個人資料新增錯誤代碼。(Ifb109b/313928520)
  • 修正在 Android U (API 34) 和模擬器中捨棄著色器時發生的當機問題。(I031cab/274314544)
  • 已在設定檔安裝程式中啟用 Android U 支援功能。(Iaf177)。
  • 修正了程序啟動時,Android U 上的設定檔安裝程式失敗的問題。(Ie3899)。
  • 修正 V_015S 設定檔格式的方法點陣圖轉碼。(aosp/2906631) 和 (aosp/2847740)

1.3 版本

1.3.1 版本

2023 年 5 月 3 日

發布 androidx.profileinstaller:profileinstaller:1.3.1查看 1.3.1 版的修訂項

修正錯誤

  • 已在設定檔安裝程式中啟用 Android U 支援功能 (Iaf177)
  • 修正了程序啟動時,Android U 上的設定檔安裝程式失敗的問題。(Ie3899)。

1.3.0 版本

2023 年 3 月 22 日

發布 androidx.profileinstaller:profileinstaller:1.3.01.3.0 版包含此連結所列的修訂項目。

自 1.2.0 版以來的重要異動

  • 修正了 ProfileInstallReceiver 中發生的 NullPointerException。(b/243851384)。
  • 新增 ProfileVerifier API,在應用程式中檢查是否已編譯、排程或缺少基準設定檔 (I263a4b/246653809)
  • 新增殼層播送,這可讓 Macrobenchmark 將記憶體內設定檔資料全部清除至磁碟,以包含在基準設定檔產生中。此為必要步驟,才能使用 Macrobenchmark 程式庫透過 BaselineProfileRule 擷取基準設定檔,並使用 CompilationMode.Partial(warmupIterations) 評估設定檔效能。
  • 新增診斷程式碼,用於偵測壓縮的基準設定檔。在 Macrobenchmark 或實際工作環境中,Profileinstaller 無法安裝經過壓縮的基準設定檔,因為 CPU 負擔過重,所以在建構應用程式時,應更新至 Studio/AGP Electric Eel 或 bundletool 1.13.1(I86413b/261998144)
  • 新增了 Macrobenchmark 的掛鉤,用於擷取設定檔並捨棄著色器快取,在未取得 Root 權限的裝置上產生基準設定檔或 Macrobenchmark 時必須使用 (Ie0a7db/250083467b/253094958) (Ia5171b/231455742)

1.3.0-rc01 版本

2023 年 3 月 8 日

發布 androidx.profileinstaller:profileinstaller:1.3.0-rc01,該版本與上一個 Beta 版沒有差別。查看 1.3.0-rc01 版的修訂項

1.3.0-beta01 版本

2023 年 2 月 8 日

發布 androidx.profileinstaller:profileinstaller:1.3.0-beta011.3.0-beta01 版包含此連結所列的修訂項目。

API 變更

  • 移除處理已壓縮設定檔的支援功能:在啟動期間,開啟及解壓縮程序會導致 CPU 使用率有 10 毫秒的迴歸,因此新增診斷功能,方便找出未正確壓縮的基準設定檔。(I86413b/261998144)

1.3.0-alpha03 版

2023 年 1 月 11 日

發布 androidx.profileinstaller:profileinstaller:1.3.0-alpha031.3.0-alpha03 版包含此連結所列的修訂項目。

修正錯誤

  • 可處理經壓縮或未壓縮的基準設定檔 (Ic61a0)
  • 修正 MacrobenchmarkScope.dropShaderCache() 問題,修正 profileinstaller 資訊清單中播送登錄檔的問題 (I5c728b/258619948)

1.3.0-alpha02 版本

2022 年 11 月 9 日

發布 androidx.profileinstaller:profileinstaller:1.3.0-alpha02查看 1.3.0-alpha02 版的修訂項

API 變更

  • 為基準新增了掛鉤,用於捨棄著色器快取,確保冷啟動的效能保持一致,特別是在透過暖身疊代的設定檔編譯時。這項更新必須使用 benchmark-macro-junit4:1.2.0-alpha05 以上版本才能評估冷啟動。如需瞭解基準程式庫的 API 變更,請參閱基準 1.2.0-alpha07 頁面(Ia5171b/231455742)

1.3.0-alpha01 版本

2022 年 10 月 24 日

發布 androidx.profileinstaller:profileinstaller:1.3.0-alpha01查看 1.3.0-alpha01 版的修訂項目

API 變更

  • 新增了 ProfileVerifier API,用於在應用程式中檢查是否已編譯、排程或缺少基準設定檔 (I263a4b/246653809)
  • 新增殼層播送,這可讓 Macrobenchmark 將記憶體內設定檔資料全部清除至磁碟,以包含在基準設定檔產生中。此為必要步驟,才能使用 Macrobenchmark 程式庫透過 BaselineProfileRule 擷取基準設定檔,並使用 CompilationMode.Partial(warmupIterations) 評估設定檔效能。(Ie0a7db/250083467b/253094958)

1.2.2 版本

1.2.2 版本

2023 年 1 月 11 日

發布 androidx.profileinstaller:profileinstaller:1.2.21.2.2 版包含以下修訂項目。

修正錯誤

  • 可處理經壓縮或未壓縮的基準設定檔 (Ic61a0)

1.2.1 版本

1.2.1 版本

2022 年 12 月 7 日

發布 androidx.profileinstaller:profileinstaller:1.2.1查看 1.2.1 版的修訂項目

新功能

  • 為 S_V2 (API 32) 和 TIRAMISU (API 33) 啟用 profileinstaller (b/254900303)。

1.2.0 版本

1.2.0 版本

2022 年 7 月 27 日

發布 androidx.profileinstaller:profileinstaller:1.2.01.2.0 版包含此連結所列的修訂項目。

自 1.1.0 版以來的重要異動

  • 支援 Android 12 以上版本使用的 ART 設定檔格式。
  • ProfileInstallReceiver 中新增 API,即可在使用基準設定檔時取得更多與 Macrobenchmarks 一致的結果。

1.2.0-rc01 版本

2022 年 6 月 15 日

發布 androidx.profileinstaller:profileinstaller:1.2.0-rc01查看 1.2.0-rc01 版的修訂項目

  • 這個版本與 androidx.profileinstaller:profileinstaller:1.2.0-beta03 相同。

1.2.0-beta03 版本

2022 年 6 月 1 日

發布 androidx.profileinstaller:profileinstaller:1.2.0-beta031.2.0-beta03 版包含此連結所列的修訂項目。

1.2.0-beta02 版

2022 年 5 月 18 日

發布 androidx.profileinstaller:profileinstaller:1.2.0-beta021.2.0-beta02 版包含此連結所列的修訂項目。

  • 無變更,為支援 Compose 1.2.0-beta02 版本所需。

1.2.0-beta01 版本

2022 年 5 月 11 日

發布 androidx.profileinstaller:profileinstaller:1.2.0-beta01查看 1.2.0-beta01 版的修訂項

API 變更

  • ProfileInstallReceiver 中新增 API,即可在使用基準設定檔時取得更多與 Macrobenchmarks 一致的結果。(If2ae5b/215740637)

修正錯誤

  • 嘗試在 Android 12 以上版本使用中繼資料 V_001 格式時,設定檔安裝程式會擲回有用的訊息。(aosp/1978526b/217502387)
  • 設定檔安裝程式現在使用的是 androidx.startup 1.1.1 版。(aosp/2077099b/229828376)

1.2.0-alpha02 版本

2022 年 1 月 26 日

發布 androidx.profileinstaller:profileinstaller:1.2.0-alpha021.2.0-alpha02 版包含此連結所列的修訂項目。

這個版本與 1.2.0-alpha01 相同。

1.2.0-alpha01 版本

2022 年 1 月 12 日

發布 androidx.profileinstaller:profileinstaller:1.2.0-alpha011.2.0-alpha01 版包含此連結所列的修訂項目。

新功能

  • 支援 Android 12 以上版本使用的 ART 設定檔格式。

1.1.0 版本

1.1.0 版本

2022 年 2 月 9 日

發布 androidx.profileinstaller:profileinstaller:1.1.0查看 1.1.0 版的修訂項

1.1.0-rc01 版本

2021 年 12 月 15 日

發布 androidx.profileinstaller:profileinstaller:1.1.0-rc01,且自 1.1.0-beta04 版以來皆無更新。1.1.0-rc01 版包含此連結所列的修訂項目。

1.1.0-beta04 版

2021 年 12 月 1 日

發布 androidx.profileinstaller:profileinstaller:1.1.0-beta04查看 1.1.0-beta04 版的修訂項

1.1.0-beta03 版本

2021 年 11 月 17 日

發布 androidx.profileinstaller:profileinstaller:1.1.0-beta031.1.0-beta03 版包含此連結所列的修訂項目。

修正錯誤

  • 更新為可支援 Compose 1.1.0-beta03

1.1.0-beta02 版本

2021 年 11 月 3 日

發布 androidx.profileinstaller:profileinstaller:1.1.0-beta02查看 1.1.0-beta02 版的修訂項

修正錯誤

  • 更新為可支援 Compose 1.1.0-beta02

1.1.0-beta01 版本

2021 年 10 月 27 日

發布 androidx.profileinstaller:profileinstaller:1.1.0-beta011.1.0-beta01 版包含此連結所列的修訂項目。

  • 自 1.1.0-alpha07 起沒有變更。

1.1.0-alpha07 版本

2021 年 10 月 13 日

發布 androidx.profileinstaller:profileinstaller:1.1.0-alpha07查看 1.1.0-alpha07 版的修訂項

新功能

  • 支援 Android N 的 Profm 功能

1.1.0-alpha06 版本

2021 年 9 月 29 日

發布 androidx.profileinstaller:profileinstaller:1.1.0-alpha06查看 1.1.0-alpha06 版的修訂項

修正錯誤

  • 修正 N、O 和 O_MR1 上的 profileinstaller 轉碼問題。(I12d75)。

1.1.0-alpha05 版本

2021 年 9 月 15 日

發布 androidx.profileinstaller:profileinstaller:1.1.0-alpha05查看 1.1.0-alpha05 版的修訂項

修正錯誤

  • 修正 multidex APK 的 Android Nougat 和 Android Oreo 設定檔轉碼問題。

1.1.0-alpha04 版本

2021 年 9 月 1 日

發布 androidx.profileinstaller:profileinstaller:1.1.0-alpha041.1.0-alpha04 版包含此連結所列的修訂項目。

修正錯誤

  • 修正 ProfileInstaller,方便應用程式使用基準設定檔透過 CompilationMode.BaselineProfile 執行 MacroBenchmarks。(I42657b/196074999)

1.1.0-alpha03 版本

2021 年 8 月 18 日

發布 androidx.profileinstaller:profileinstaller:1.1.0-alpha031.1.0-alpha03 版本包含以下修訂項目。

修正錯誤

  • 將 profileinstaller 略過行為改為記錄 應用程式檔案目錄的 PackageInfo.lastUpdatedTime 並在下次執行安裝設定檔前加以比較。(Ib93d1)
  • 調整 P、Q、R 裝置的設定檔格式,以符合 ART 規定 (I84e89)

1.1.0-alpha02 版本

2021 年 8 月 4 日

發布 androidx.profileinstaller:profileinstaller:1.1.0-alpha02查看 1.1.0-alpha02 版的修訂項

更新為可支援 Compose 1.1.0-alpha01。

1.1.0-alpha01 版本

2021 年 7 月 21 日

發布 androidx.profileinstaller:profileinstaller:1.1.0-alpha011.1.0-alpha01 版包含以下修訂項目。

修正錯誤

  • 修正在某些情況下會觸發嚴格模式的錯誤。

1.0 版本

1.0.4 版本

2021 年 10 月 13 日

發布 androidx.profileinstaller:profileinstaller:1.0.41.0.4 版包含此連結所列的修訂項目。

  • 更新為可支援 Compose 1.0.4

1.0.3 版本

2021 年 9 月 29 日

發布 androidx.profileinstaller:profileinstaller:1.0.31.0.3 版包含此連結所列的修訂項目。

  • 更新為可支援 Compose 1.0.3

1.0.2 版本

2021 年 9 月 1 日

發布 androidx.profileinstaller:profileinstaller:1.0.21.0.2 版包含此連結所列的修訂項目。

修正錯誤

  • 為 P、Q、R 裝置新增設定檔轉碼。這項變更表示這些裝置會將設定檔轉碼,確保寫下的設定檔隨時可供 ART 使用。以往在這些平台上,系統會略過轉碼,有時這會造成 ART 無法處理來源設定檔。開發人員 API 沒有任何變更。

1.0.1 版本

2021 年 8 月 4 日

發布 androidx.profileinstaller:profileinstaller:1.0.11.0.1 版包含以下修訂項目。

更新為可支援 Compose 1.0.1。

1.0.0 版本

2021 年 7 月 28 日

發布 androidx.profileinstaller:profileinstaller:1.0.01.0.0 版包含此連結所列的修訂項目。

1.0.0 的主要功能

設定檔安裝程式是新的程式庫,可讓程式庫和應用程式定義「設定檔規則」,並將 ART 設定檔資訊與 APK 組合在一起,這個程式庫會在應用程式啟動後安裝這些設定檔。這可以用來改善應用程式效能。

如要進一步瞭解這些設定檔規則是什麼,其運作方式又是如何,請參閱 1.0.0-beta01 的詳細版本資訊。

1.0.0-rc02 版

2021 年 7 月 14 日

發布 androidx.profileinstaller:profileinstaller:1.0.0-rc02查看 1.0.0-rc02 版的修訂項

1.0.0-rc01 版

2021 年 7 月 1 日

發布 androidx.profileinstaller:profileinstaller:1.0.0-rc011.0.0-rc01 版包含以下修訂項目。

此為 RC 版本,沒有變更 Beta 版任何內容。

1.0.0-beta01 版

2021 年 6 月 16 日

androidx.profileinstaller:profileinstaller:1.0.0-beta01 發布。1.0.0-beta01 版包含此連結所列的修訂項目。

程式庫用途

設定檔安裝程式是新的程式庫,可讓程式庫和應用程式定義「設定檔規則」,並將 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 內進行指定。該檔案會每行指定一個規則,這裡的規則是指對應至程式庫方法或類別的模式。這些規則所用語法是人類可讀形式的 ART 設定檔格式的超集,使用 adb shell profman --dump-classes-and-methods ... 時會用到這類格式。這些規則會採用兩種形式之一來指定方法或類別。

  • 方法規則將採用以下模式:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • 類別規則將採用以下模式:

    <CLASS_DESCRIPTOR>
    
  • 此處的 <FLAGS>HSP 之中的一或多個字元,用於指出這個方法應標記為「Hot」、「Startup」或「Post Startup」。

  • <CLASS_DESCRIPTOR> 是指定方法所屬的類別描述元。舉例來說,androidx.compose.runtime.SlotTable 類別的描述元是 Landroidx/compose/runtime/SlotTable;

  • <METHOD_SIGNATURE> 是方法的簽名,含有該方法的名稱、參數類型和傳回類型。舉例來說,LayoutNode 上的 fun isPlaced(): Boolean 方法含有 isPlaced()Z 簽名。

  • 這些模式可包含萬用字元 (***?),以便讓單一規則涵蓋多種方法或類別。

規則有何作用?

  • 方法中如果帶有 H 標記,表示這個方法是「Hot」方法,應該預先完成編譯。

  • 方法中如果帶有 S 標記,表示這是系統會在啟動時呼叫的方法,應該預先完成編譯,以免啟動時耗費資源處理編譯作業及解析方法。

  • 方法中如果帶有 P 標記,表示這是系統在啟動之後才會呼叫的方法。

  • 如果類別顯示在這個檔案中,表示系統會在啟動期間使用該類別,因此應該要事先在堆積中分配該類別,以免耗費載入類別的成本。

服務簡介

  • 程式庫可以定義這些規則,並會包裝於 AAR 構件中。當建構包含這些構件的 APK 時,這些規則將合併在一起,合併後的規則會用於建構該 APK 專用的精簡二進制 ART 設定檔。當 APK 安裝在裝置上時,ART 便可以利用這個設定檔預先編譯特定應用程式子集,藉此提高應用程式效能,特別是首次執行的效能。請注意,這項設定對於可進行偵錯的應用程式不會產生任何影響。

  • 規則檔案應命名為 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
    

設定檔必須保持平衡

  • 精心打造的設定檔可以為啟動路徑中的方法和類別正確排定優先順序,並對效能至關重要。不過,如果在設定檔中包含過多方法或類別,可能會對記憶體用量和磁碟用量造成淨負面影響,因此建議您在定義自己的設定檔規則時謹慎地開始。