หน้านี้จะอธิบายถึงการกำหนดค่าระบบบิลด์ที่ไม่ใช่ 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
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- เขียนเกณฑ์เปรียบเทียบขนาดเล็ก
- สร้างโปรไฟล์พื้นฐาน {:#creating-profile-rules}