การกำหนดค่าบิลด์แบบง่าย

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

Soong ใช้ไฟล์ Blueprint หรือ .bp ซึ่งเป็นคำอธิบายแบบประกาศอย่างง่ายที่คล้ายกับ JSON ของโมดูลที่จะสร้าง รูปแบบนี้จะแทนที่ระบบที่ใช้ Make ซึ่งใช้ในรุ่นก่อนหน้า ดูรายละเอียดทั้งหมดได้ในไฟล์อ้างอิง Soong ในแดชบอร์ดการผสานรวมอย่างต่อเนื่อง

หากต้องการรองรับการทดสอบที่กำหนดเองหรือใช้ ชุดเครื่องมือทดสอบความเข้ากันได้ (CTS) ของ Android ให้ทำตามการกำหนดค่าการทดสอบที่ซับซ้อนแทน

ตัวอย่าง

รายการด้านล่างมาจากไฟล์การกำหนดค่า Blueprint ตัวอย่างนี้ /platform_testing/tests/example/instrumentation/Android.bp

เราได้รวมภาพรวมไว้ที่นี่เพื่อความสะดวก

android_test {
    name: "HelloWorldTests",
    srcs: ["src/**/*.java"],
    sdk_version: "current",
    static_libs: ["androidx.test.runner"],
    certificate: "platform",
    test_suites: ["device-tests"],
}

โปรดทราบว่าการประกาศ android_test ที่จุดเริ่มต้นบ่งชี้ว่านี่เป็นการทดสอบ การรวม android_app จะเป็นการระบุว่านี่เป็นแพ็กเกจบิลด์แทน

การตั้งค่า

การตั้งค่าต่อไปนี้ต้องมีคำอธิบาย

    name: "HelloWorldTests",

ต้องมีการตั้งค่า name เมื่อระบุประเภทโมดูล android_test (ที่จุดเริ่มต้นของบล็อก) ซึ่งจะตั้งชื่อให้โมดูลของคุณ และ APK ที่ได้จะตั้งชื่อเหมือนกันและมีคำต่อท้ายเป็น .apk เช่น ในกรณีนี้ APK สำหรับทดสอบที่ได้จะชื่อ HelloWorldTests.apk นอกจากนี้ ยัง กำหนดชื่อเป้าหมายการสร้างสำหรับโมดูลของคุณด้วย เพื่อให้คุณใช้ make [options] <HelloWorldTests> เพื่อสร้างโมดูลทดสอบและการอ้างอิงทั้งหมดได้

    static_libs: ["androidx.test.runner"],

การตั้งค่า static_libs จะสั่งให้ระบบบิลด์รวมเนื้อหา ของโมดูลที่มีชื่อไว้ใน APK ที่ได้จากโมดูลปัจจุบัน ซึ่งหมายความว่า โมดูลที่มีชื่อแต่ละโมดูลคาดว่าจะสร้างไฟล์ .jar และเนื้อหาของไฟล์จะ ใช้เพื่อแก้ไขการอ้างอิง classpath ในระหว่างเวลาคอมไพล์ รวมถึง รวมไว้ใน APK ที่ได้

androidx.test.runner เป็นโมดูลที่สร้างไว้ล่วงหน้าสำหรับไลบรารี AndroidX Test Runner ซึ่งรวมถึง Test Runner AndroidJUnitRunner AndroidJUnitRunner รองรับเฟรมเวิร์กการทดสอบ JUnit4 และแทนที่ InstrumentationTestRunner ใน Android 10 อ่านเพิ่มเติม เกี่ยวกับการทดสอบแอป Android ได้ที่ทดสอบแอปใน Android

หากคุณกำลังสร้างโมดูลการวัดผลใหม่ คุณควรเริ่มต้นด้วยandroidx.test.runnerไลบรารีเป็นตัวเรียกใช้การทดสอบเสมอ โครงสร้างแหล่งที่มาของแพลตฟอร์ม ยังมีเฟรมเวิร์กการทดสอบที่มีประโยชน์อื่นๆ เช่น ub-uiautomator, mockito-target, easymock และอื่นๆ

    certificate: "platform",

การตั้งค่า certificate จะสั่งให้ระบบบิลด์ลงนามใน APK ด้วยใบรับรองเดียวกันกับแพลตฟอร์มหลัก คุณต้องระบุข้อมูลนี้หากการทดสอบใช้สิทธิ์หรือ API ที่มีการป้องกันลายเซ็น โปรดทราบว่าวิธีนี้เหมาะสำหรับการทดสอบอย่างต่อเนื่องของแพลตฟอร์ม แต่ไม่ควรใช้ในโมดูลทดสอบ CTS โปรดทราบว่าตัวอย่างนี้ ใช้การตั้งค่าใบรับรองนี้เพื่อวัตถุประสงค์ในการอธิบายเท่านั้น โค้ดทดสอบ ของตัวอย่างไม่จำเป็นต้องใช้ APK ทดสอบที่ลงนามด้วย ใบรับรองแพลตฟอร์มพิเศษ

หากคุณกำลังเขียนเครื่องมือสำหรับคอมโพเนนต์ที่อยู่นอกเซิร์ฟเวอร์ระบบ กล่าวคือ มีการแพ็กเกจคล้ายกับ APK ของแอปทั่วไป ยกเว้นว่ามีการสร้างลงในอิมเมจระบบและอาจเป็นแอปที่มีสิทธิ์พิเศษ โอกาสที่เครื่องมือของคุณจะกำหนดเป้าหมายไปยังแพ็กเกจแอป (ดูส่วนด้านล่างเกี่ยวกับไฟล์ Manifest) ของคอมโพเนนต์ ในกรณีนี้ แอปพลิเคชัน makefile อาจมีcertificateการตั้งค่าของตัวเอง และโมดูลเครื่องมือวัด ควรคงการตั้งค่าเดียวกันไว้ เนื่องจากหากต้องการกำหนดเป้าหมาย การตรวจสอบในแอปภายใต้การทดสอบ คุณต้องลงนามใน APK ทดสอบและ APK ของแอป ด้วยใบรับรองเดียวกัน

ในกรณีอื่นๆ คุณไม่จำเป็นต้องมีการตั้งค่านี้เลย ระบบบิลด์จะลงนามด้วยใบรับรองเริ่มต้นในตัวตามตัวแปรบิลด์ และโดยปกติจะเรียกว่า dev-keys

    test_suites: ["device-tests"],

test_suites การตั้งค่าช่วยให้ Trade Federation Test Harness ค้นหาการทดสอบได้ง่าย คุณเพิ่มชุดทดสอบอื่นๆ ได้ที่นี่ เช่น CTS เพื่อให้แชร์การทดสอบนี้ได้

${ANDROID_PRODUCT_OUT}/testcases/HelloWorldTests/HelloWorldTests.apk

การตั้งค่าที่ไม่บังคับ

การตั้งค่าที่ไม่บังคับต่อไปนี้มีคำอธิบายดังนี้

    test_config: "path/to/hello_world_test.xml"

test_config การตั้งค่าจะสั่งให้ระบบบิลด์ทราบว่าเป้าหมายการทดสอบของคุณต้องมีการกำหนดค่าที่เฉพาะเจาะจง โดยค่าเริ่มต้น AndroidTest.xml ข้าง Android.bp จะ เชื่อมโยงกับการกำหนดค่า

    auto_gen_config: true

การตั้งค่า auto_gen_config จะระบุว่าจะสร้างการกำหนดค่าการทดสอบโดยอัตโนมัติหรือไม่ หากไม่มี AndroidTest.xml อยู่ข้าง Android.bp คุณไม่จำเป็นต้องตั้งค่าแอตทริบิวต์นี้เป็น "จริง" โดยชัดแจ้ง

    require_root: true

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

    test_min_api_level: 29

การตั้งค่า test_min_api_level จะสั่งให้ระบบบิลด์เพิ่ม MinApiLevelModuleController ลงในการกำหนดค่าการทดสอบที่สร้างขึ้นโดยอัตโนมัติ เมื่อ Trade Federation เรียกใช้การกำหนดค่าการทดสอบ ระบบจะข้ามการทดสอบหากพร็อพเพอร์ตี้ของอุปกรณ์ ของ ro.product.first_api_level < test_min_api_level