在不使用 Gradle 的情況下建構微型基準

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

雖然 Microbenchmark 程式庫提供 Gradle 外掛程式,可直接與 Android Gradle 外掛程式整合,但您也可以在其他建構系統中使用該外掛程式,例如BazelBuck

本主題說明在使用 Microbenchmark 程式庫時設定非 Gradle 建構系統。

檢測設備測試

在測試資訊清單的檢測區塊中指定 AndroidBenchmarkRunner 或子類別,做為檢測執行器:

<manifest
    package="com.example.library.test" ...>

    <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" />
    ...
</manifest>

如要取得準確的評估結果,基準不得為可進行偵錯。如果可進行偵錯的旗標設定有誤,資料庫就會擲回錯誤,而非回報無效結果。請注意,您可能必須在本機執行作業期間切換這項設定,以便與 Android Studio 分析器搭配使用 (需要 debuggable=true)。

Microbenchmarks 能以兩種方式執行:在自我檢測的 APK 內,或利用測試 APK 檢測另一個 APK。

自我檢測 APK

使用簡易自我檢測 APK (作為 com.android.libraryandroidTest 目錄的 Gradle 輸出),則單一 APK 的 Android 資訊清單必須停用偵錯:

<manifest
    package="com.example.library.test" ...>

    <instrumentation
        android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner"
        android:targetPackage="com.example.library.test"/>

    <application android:debuggable="false"/>
</manifest>

透過測試 APK 檢測的應用程式 APK

如果您的版本輸出兩個 APK,即應用程式 APK 和測試 APK (作為 com.android.appandroidTest 目錄的 Gradle 輸出),您必須將應用程式 APK 設為 debuggable=false。Android OS 會忽略測試 APK 的可偵錯旗標。

<!-- test manifest -->
<manifest
    package="com.example.android.app.test" ...>

    <instrumentation
        android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner"
        android:targetPackage="com.example.android.app"/>
    <!-- debuggable here ignored by OS! -->
</manifest>

<!-- app being tested -->
<manifest
    package="com.example.android.app" ...>

    <application android:debuggable="false"/>
</manifest>

請注意,Android Studio 或 Gradle 不支援應用程式模組 APK 的 Microbenchmark 功能。這是因為支援額外的測試目錄相當複雜,因為這類 APK 仰賴無法偵錯、最佳化或壓縮後的 APK 變化版本,但無需將基準中的中斷呼叫壓縮至應用程式程式碼中。

壓縮與最佳化

我們建議對您的基準使用壓縮和最佳化,以獲得更接近發布版本的效能。如需程式碼範例,請參閱基準範例專案

程式碼涵蓋率

基準必須在停用涵蓋率的情況下執行,而不需要透過 JaCoCo 等工具完成任何程式庫或 DEX 管理。

因此,我們建議您將基準視為與其他檢測測試完全隔離的獨立來源集,並與發布依附元件分開建構。我們也發現這種做法可避免必須重複建立測試,包括涵蓋和不涵蓋範圍。

另請注意,基準所依賴的程式庫偵錯變化版本(尤其是本機上建構的程式庫),可能會在啟用涵蓋率的情況下構建。

執行中

您可以透過指令列執行測試,並指定要使用的類別。

adb shell am instrument -w com.example.benchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner

如要在沒有 Gradle 的執行階段設定 Microbenchmark 程式庫,請參閱檢測引數