สร้างเกณฑ์มาตรฐานขนาดเล็กโดยไม่ใช้ Gradle

หน้านี้จะอธิบายถึงการกำหนดค่าระบบบิลด์ที่ไม่ใช่ Gradle เมื่อใช้ ไลบรารี Microbenchmark

แม้ว่าไลบรารี Microbenchmark จะส่งปลั๊กอิน Gradle เพื่อผสานรวมโดยตรง ด้วยปลั๊กอิน Android Gradle คุณจะใช้ปลั๊กอินนี้ในระบบบิลด์อื่นๆ ได้ เป็น Bazel หรือ Buck

การวัดคุม

ใช้ AndroidBenchmarkRunner หรือคลาสย่อยเป็นตัวเรียกใช้เครื่องมือ โดยระบุไว้ในบล็อกการใช้เครื่องมือของไฟล์ Manifest ทดสอบ ดังนี้

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

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

การเปรียบเทียบต้องแก้ไขข้อบกพร่องได้จึงจะวัดค่าที่แม่นยําได้ หากคุณ ไม่ตั้งค่าสถานะที่แก้ไขข้อบกพร่องได้ถูกต้อง ไลบรารีกลับแสดงข้อผิดพลาด การรายงานผลลัพธ์ที่ไม่ถูกต้อง คุณอาจต้องเปิด/ปิดการตั้งค่านี้ระหว่าง การเรียกใช้ในเครื่องสำหรับใช้กับเครื่องมือสร้างโปรไฟล์ของ Android Studio ซึ่งต้องใช้ debuggable=true

คุณสามารถสร้างการเปรียบเทียบขนาดเล็กเพื่อเรียกใช้ได้ 2 วิธี ได้แก่ การวัดด้วยตนเอง APK หรือด้วย APK การทดสอบ 1 รายการที่ใช้ APK อื่น

APK เครื่องมือด้วยตนเอง

APK ที่ติดตั้งด้วยตนเอง โดยเป็นเอาต์พุตโดย Gradle สำหรับ androidTest จาก com.android.library คุณต้องปิดใช้แก้ไขข้อบกพร่องได้ใน ไฟล์ Manifest สำหรับ Android ของ 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>

APK ของแอปที่ใช้ APK ทดสอบ

หากบิลด์ของคุณส่ง APK 2 รายการ ได้แก่ APK ของแอป และ APK ทดสอบ ตามเอาต์พุตโดย Gradle สำหรับ ไดเรกทอรี androidTest จากแพ็กเกจ com.android.app คุณต้องตั้งค่า APK ของแอปเป็น debuggable=false ระบบปฏิบัติการ Android จะไม่สนใจแฟล็กที่แก้ไขข้อบกพร่องได้ของ 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 โมดูลแอป ทั้งนี้เนื่องจากความซับซ้อนของการรองรับไดเรกทอรีทดสอบเพิ่มเติมที่ ขึ้นอยู่กับ APK รูปแบบที่แก้ไขข้อบกพร่องไม่ได้ ได้รับการเพิ่มประสิทธิภาพ หรือลดขนาดลง แต่ โดยไม่มีการลดรูป แบ่งการเรียกจากการเปรียบเทียบไปเป็นโค้ดของแอป

การรวบรวม

เราขอแนะนำให้รวบรวม APK ไมโครการเปรียบเทียบก่อนที่จะทำการทดสอบ โดยใช้ คำสั่งต่อไปนี้

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

การลดขนาดและการเพิ่มประสิทธิภาพ

เราขอแนะนำให้ใช้การลดขนาดและการเพิ่มประสิทธิภาพสำหรับการเปรียบเทียบ ที่ใกล้จะเปิดตัว สำหรับโค้ดตัวอย่าง ให้ดูที่การเปรียบเทียบ โปรเจ็กต์ตัวอย่าง

ความครอบคลุมของโค้ด

เราขอแนะนําให้เรียกใช้การเปรียบเทียบโดยปิดใช้การครอบคลุมและไม่มีไลบรารี หรือการจัดการ DEX โดยใช้เครื่องมืออย่าง JaCoCo

ด้วยเหตุนี้ เราขอแนะนำให้คุณแยกตัวเปรียบเทียบเป็นชุดแหล่งที่มาจาก การทดสอบการวัดคุมและสร้างแยกต่างหากด้วยทรัพยากร Dependency ของรุ่น ช่วงเวลานี้ เพื่อไม่ต้องสร้างการทดสอบมากกว่า 1 ครั้ง ทั้งแบบมีและไม่มีการครอบคลุม

แก้ไขข้อบกพร่องของไลบรารีเวอร์ชันต่างๆ ที่การเปรียบเทียบของคุณใช้งานอยู่ โดยเฉพาะอย่างยิ่ง เฉพาะในตัวเครื่อง อาจสร้างโดยเปิดใช้การครอบคลุม

ทำการทดสอบ

คุณทำการทดสอบจากบรรทัดคำสั่งและระบุคลาสที่จะเรียกใช้ได้ ดังที่ปรากฏในตัวอย่างต่อไปนี้

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

หากต้องการกำหนดค่าไลบรารี Microbenchmark ขณะรันไทม์โดยไม่ใช้ Gradle โปรดดู อาร์กิวเมนต์การวัดคุม Microbenchmark