Tạo Microbenchmarks mà không cần tới Gradle

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Tuy thư viện Microbenchmark sẽ chuyển một trình bổ trợ Gradle để tích hợp trực tiếp với trình bổ trợ Android cho Gradle, nhưng bạn cũng có thể sử dụng trình bổ trợ này trong các hệ thống xây dựng khác, chẳng hạn như Bazel hoặc Buck.

Chủ đề này mô tả cách định cấu hình hệ thống bản dựng không dựa trên Gradle khi sử dụng thư viện Microbenchmark.

Khả năng đo lường

Sử dụng AndroidBenchmarkRunner hoặc một lớp con làm trình chạy công cụ đo lường bằng cách chỉ định trình bổ trợ trong khối đo lường của tệp kê khai kiểm thử:

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

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

Để đo lường chính xác, điểm chuẩn cần tắt tính năng có thể gỡ lỗi. Nếu cờ gỡ lỗi không được đặt đúng cách, thư viện sẽ hiển thị lỗi, thay vì báo cáo kết quả không hợp lệ. Hãy lưu ý rằng bạn có thể cần bật/tắt tùy chọn cài đặt này trong các lần chạy cục bộ để sử dụng cùng các trình phân tích tài nguyên của Android Studio, vốn yêu cầu debuggable=true.

Bạn có thể tạo Microbenchmarks để chạy theo hai cách: trong một tệp APK tự đo lường hoặc trong một tệp APK kiểm thử có hỗ trợ một tệp APK khác.

APK tự đo lường

Với một tệp APK tự đo lường đơn giản (dưới dạng đầu ra do Gradle cho thư mục androidTest trong com.android.library), tệp kê khai Android của một tệp APK phải tắt tính năng có thể gỡ lỗi:

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

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

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

Tệp APK ứng dụng do tệp APK kiểm thử đo lường

Nếu bản dựng của bạn tạo ra hai tệp APK, một tệp APK ứng dụng và một tệp APK kiểm thử (do Gradle cung cấp cho thư mục androidTest trong com.android.app), thì bạn phải đặt tệp APK của ứng dụng thành debuggable=false. Hệ điều hành Android sẽ bỏ qua cờ có thể gỡ lỗi của tệp APK kiểm thử này.

<!-- 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>

Xin lưu ý rằng Android Studio hoặc Gradle chưa hỗ trợ microbenchmarking APK mô-đun ứng dụng. Nguyên nhân là do tính phức tạp của việc hỗ trợ một thư mục kiểm thử bổ sung, vốn phụ thuộc vào một biến thể không thể gỡ lỗi, được tối ưu hóa hoặc giảm kích thước của tệp APK, mà không giảm số lệnh gọi từ điểm chuẩn vào mã ứng dụng.

Giảm thiểu và tối ưu hóa

Bạn nên sử dụng phương pháp giảm thiểu và tối ưu hóa cho điểm chuẩn để có được hiệu suất gần với bản phát hành hơn. Để xem mã ví dụ, hãy xem thêm Dự án mẫu điểm chuẩn.

Mức độ bao phủ của mã

Điểm chuẩn sẽ chạy khi vô hiệu quá mức độ bao phủ mà không có thư viện hoặc hoạt động quản lý DEX nào do công cụ như JaCoCo thực hiện.

Vì vậy, bạn nên dùng điểm chuẩn như là một nhóm tài nguyên tách biệt hoàn toàn với các quy trình kiểm thử đo lường khác và được tách riêng với các phần phụ thuộc của bản phát hành. Chúng tôi cũng thấy điều này tránh được việc phải tạo quy trình kiểm thử nhiều lần: cả kèm theo và không kèm theo mức độ bao phủ.

Ngoài ra, xin lưu ý rằng bạn có thể kèm theo mức độ bao phủ khi xây dựng các biến thể gỡ lỗi của thư viện mà điểm chuẩn của bạn phụ thuộc, đặc biệt là những thư viện được tạo cục bộ.

Chạy

Bạn có thể chạy quy trình kiểm thử thông qua dòng lệnh và chỉ định lớp mà bạn muốn chạy.

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

Để định cấu hình thư viện Microbenchmark trong thời gian chạy không cần tới Gradle, hãy xem thêm Các đối số đo lường.