雖然 Microbenchmark 程式庫提供 Gradle 外掛程式,可直接與 Android Gradle 外掛程式整合,但您也可以在其他建構系統中使用該外掛程式,例如Bazel或Buck。
本主題說明在使用 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.library
的 androidTest
目錄的 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.app
的 androidTest
目錄的 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 程式庫,請參閱檢測引數。