ProfileInstaller

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

宣告依附元件

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

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

Groovy

dependencies {
    implementation "androidx.profileinstaller:profileinstaller:1.2.0-beta01"
}

Kotlin

dependencies {
    implementation("androidx.profileinstaller:profileinstaller:1.2.0-beta01")
}

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

意見回饋

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

建立新問題

詳情請參閱 Issue Tracker 說明文件

1.2.0 版本

1.2.0-alpha02 版本

2022 年 1 月 26 日

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

這個版本與 1.2.0-alpha01 相同。

1.2.0-alpha01 版本

2022 年 1 月 12 日

androidx.profileinstaller:profileinstaller:1.2.0-alpha01 發布。1.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-beta03 發布。1.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-beta01 發布。1.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-alpha04 發布。1.1.0-alpha04 版本包含這些修訂版本。

修正錯誤

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

1.1.0-alpha03 版本

2021 年 8 月 18 日

androidx.profileinstaller:profileinstaller:1.1.0-alpha03 發布。1.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-alpha01 發布。1.1.0-alpha01 版本包含這些修訂版本。

修正錯誤

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

1.0 版本

1.0.4 版本

2021 年 10 月 13 日

androidx.profileinstaller:profileinstaller:1.0.4 發布。1.0.4 版本包含這些修訂版本。

  • 更新為可支援 Compose 1.0.4

1.0.3 版本

2021 年 9 月 29 日

androidx.profileinstaller:profileinstaller:1.0.3 發布。1.0.3 版本含有這些修訂版本。

  • 更新為可支援 Compose 1.0.3

1.0.2 版本

2021 年 9 月 1 日

androidx.profileinstaller:profileinstaller:1.0.2 發布。1.0.2 版本含有這些修訂版本。

修正錯誤

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

1.0.1 版本

2021 年 8 月 4 日

androidx.profileinstaller:profileinstaller:1.0.1 發布。1.0.1 版本含有這些修訂版本。

已更新為相容於 Compose 1.0.1。

1.0.0 版本

2021 年 7 月 28 日

androidx.profileinstaller:profileinstaller:1.0.0 發布。1.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-rc01 發布。1.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
    

設定檔必須保持平衡

  • 精心設計的設定檔會正確排定需要優先處理的項目,也就是位在啟動路徑上以及對效能有重大影響的方法和類別,這樣一來就能產生最佳成效。不過,若是在設定檔中納入過多方法或類別,可能最終在記憶體和磁碟用量方面反而會造成負面影響。因此,建議在自行定義設定檔規則時,一開始採用保守的做法。