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

本頁面說明如何在使用 Microbenchmark 程式庫時設定非 Gradle 建構系統。

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

檢測

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

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

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

如要取得準確的評估結果,基準測試不得為可進行偵錯。如果您未正確設定可進行偵錯的旗標,程式庫會擲回錯誤,而非回報無效的結果。您可能需要在本機執行作業期間將這項設定切換為 debuggable=true,才能與 Android Studio 分析器搭配使用。

您可以建構 Microbenchmark,以兩種方式執行:在自我檢測 APK 中執行,或使用一個測試 APK 檢測另一個 APK。

自我檢測 APK

使用自我檢測 APK (做為 Gradle 針對 com.android.libraryandroidTest 目錄輸出內容) 時,您必須在單一 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 (做為 Gradle 針對 com.android.app 套件中 androidTest 目錄的輸出內容),您必須將應用程式 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"/>
    <!-- This debuggable is ignored by the OS. -->
</manifest>

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

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

Android Studio 和 Gradle 不支援對應用程式模組 APK 執行 Microbenchmark。這是因為支援額外的測試目錄相當複雜,這類目錄會仰賴無法偵錯、經最佳化或壓縮的 APK 變化版本,但不會經由壓縮將基準測試中的呼叫分割到應用程式的程式碼中。

編譯

建議您先使用以下程式碼編譯 Microbenchmark APK,再執行測試: 以下指令:

adb shell cmd package compile -f -m speed com.example.benchmark

壓縮與最佳化

建議您對基準使用壓縮和最佳化,以便獲得更接近正式版的效能。如需程式碼範例,請參閱「基準測試範例專案」。

程式碼涵蓋率

建議您在停用涵蓋率功能的情況下執行基準測試,而且不要使用 JaCoCo 等工具對任何程式庫或 DEX 執行破壞處理。

因此,建議您將基準測試做為獨立於其他檢測設備測試的來源集,並使用正式版依附元件另外建構基準測試。這麼做可讓您不必重複建立測試,不論是否啟用涵蓋率功能都一樣。

基準測試所依賴的程式庫偵錯變化版本 (尤其是在本機建構的變化版本) 可能會在啟用涵蓋率功能的情況下進行建構。

執行測試

您可以透過指令列執行測試,並指定要執行的類別,如以下範例所示:

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

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