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

Stay organized with collections Save and categorize content based on your preferences.

雖然 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 程式庫,請參閱檢測引數