Tạo Microbenchmark mà không cần Gradle

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

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 thư viện này trong các hệ thống xây dựng khác, chẳng hạn như Bazel hoặc Buck.

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 mã này 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 bạn không đặt cờ có thể gỡ lỗi đúng cách, thư viện sẽ cho thấy lỗi, thay vì báo cáo các kết quả không hợp lệ. Bạn có thể cần bật/tắt chế độ 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 (yêu cầu debuggable=true).

Bạn có thể tạo Microbenchmark để 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ử dùng để đo lường một tệp APK khác.

APK tự đo lường

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

<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 của gói 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"/>
    <!-- This debuggable is ignored by the OS. -->
</manifest>

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

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

Android Studio và Gradle không hỗ trợ microbenchmark cho tệp 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 hoá 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 hoá

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

Mức độ sử dụng mã

Bạn nên chạy điểm chuẩn khi vô hiệu hoá mức độ sử dụng mà không gây tổn hại cho DEX hoặc thư viện nào bằng công cụ như JaCoCo.

Vì lý do này, bạn nên tách riêng các điểm chuẩn dưới dạng nhóm tài nguyên qua các kiểm thử đo lường khác, đồng thời tạo các điểm chuẩn đó riêng biệt với các phần phụ thuộc của bản phát hành. Điều này giúp tránh việc phải tạo kiểm thử nhiều lần, cả kèm theo và không kèm theo mức độ sử dụng.

Bạn có thể kèm theo mức độ sử dụng 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 vào, đặc biệt là những thư viện được tạo cục bộ.

Chạy kiểm thử

Bạn có thể chạy kiểm thử qua dòng lệnh và chỉ định lớp mà bạn muốn chạy, như trong ví dụ sau:

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 mà không cần Gradle, hãy xem phần Đối số đo lường Microbenchmark.