หน้านี้อธิบายพร็อพเพอร์ตี้และตัวเลือกที่จำเป็นในการเตรียมโปรเจ็กต์ ไลบรารี Android สำหรับการเผยแพร่ โดยใช้ ปลั๊กอิน Android Gradle (AGP) แม้ว่าคุณจะตั้งค่าพร็อพเพอร์ตี้บางรายการเหล่านี้ไว้ตั้งแต่เริ่มต้นสร้างไลบรารีแล้ว แต่โปรดอ่านคำแนะนำต่อไปนี้เพื่อเพิ่มประสิทธิภาพการตั้งค่า
เลือกเนมสเปซ
ไลบรารี Android ต้องประกาศเนมสเปซเพื่อให้สร้างคลาส R ที่ไม่ซ้ำกันได้เมื่อมีการคอมไพล์ทรัพยากร เนมสเปซนี้ควรตรงกับแพ็กเกจคลาสรากของไลบรารีอย่างใกล้ชิดเพื่อหลีกเลี่ยงความสับสนเมื่อผู้ใช้นำเข้าคลาสปกติจากไลบรารีและคลาส R ของไลบรารี
ตั้งแต่ AGP 7.0 เป็นต้นไป คุณสามารถตั้งค่า
เนมสเปซ
ในไฟล์ build.gradle ของแอปได้ ดังที่แสดงในตัวอย่างโค้ดต่อไปนี้
ดึงดูด
android { namespace = 'com.example.library' }
Kotlin
android { namespace = "com.example.library" }
เนมสเปซเป็นพร็อพเพอร์ตี้ของไลบรารีที่นักพัฒนาแอปต้องจัดการ โดยไม่เกี่ยวข้องกับข้อมูลประจำตัวของแอปพลิเคชัน ซึ่งตั้งค่าโดยใช้
applicationId
พร็อพเพอร์ตี้
ใน AGP เวอร์ชันก่อนหน้า คุณสามารถตั้งค่าทั้งพร็อพเพอร์ตี้ applicationId (สำหรับแอป) และพร็อพเพอร์ตี้ namespace (สำหรับไลบรารี) ได้โดยใช้แอตทริบิวต์ package ของไฟล์ Manifest ซึ่งทำให้เกิดความสับสน
เลือกค่า minSdkVersion
การเลือก minSdkVersion สำหรับ
ไลบรารีเป็นส่วนสำคัญของการเผยแพร่ไลบรารี minSdkVersion ควรแสดงถึง Android เวอร์ชันต่ำสุดที่โค้ดของคุณรองรับ
โปรดคำนึงถึงข้อควรพิจารณาต่อไปนี้เมื่อเลือก minSdkVersion
โดยทั่วไป การเลือก
minSdkVersionที่ต่ำจะช่วยให้เผยแพร่ ไลบรารีของคุณได้กว้างขึ้นโดยทั่วไป โค้ดของไลบรารีจะไม่ทำงานเว้นแต่แอปจะเรียกใช้โค้ดนั้นอย่างชัดแจ้ง แอปยังคงทำงานใน Android เวอร์ชันที่ต่ำกว่าที่การขึ้นอยู่กับไลบรารีกำหนดได้ หากไลบรารีไม่ได้มีความสำคัญต่อฟังก์ชันการทำงานหลักของแอป โดยการตรวจสอบรันไทม์ก่อนเรียกใช้ไลบรารี ดังนั้น ให้ตั้งค่า
minSdkVersionของไลบรารีให้ต่ำพอที่จะฝังในแอปและเรียกใช้ได้เมื่อเป็นไปได้ เพื่อช่วยเข้าถึงผู้ใช้ได้มากขึ้นการเลือก
minSdkVersionที่สูงอาจทำให้แอปพลิเคชันไม่สามารถรวม ไลบรารีได้การผสานไฟล์ Manifest ซึ่งเป็นขั้นตอนใน AGP ที่ผสานไฟล์ Manifest จากแอปและจากการขึ้นอยู่ของแอป จะบังคับใช้ไม่ให้การขึ้นอยู่มี
minSdkVersionสูงกว่าแอปการเลือก
minSdkVersionที่สูงอาจกระตุ้นให้นักพัฒนาแอปปิดใช้ การตรวจสอบความปลอดภัยของการผสานไฟล์ Manifest ซึ่งจะทำให้เกิดปัญหาในภายหลังในกระบวนการบิลด์เนื่องจากการผสานไฟล์ Manifest จะป้องกันไม่ให้โปรเจ็กต์แอปมีไลบรารีที่มี
minSdkVersionสูงกว่าแอป นักพัฒนาแอปจึงอาจปิดใช้การตรวจสอบความปลอดภัยของการผสานไฟล์ Manifest เพื่อลดข้อผิดพลาดในการบิลด์ อย่างไรก็ตาม การดำเนินการนี้อาจทำให้เกิดปัญหาความไม่เข้ากันที่แท้จริงในภายหลังการเลือก
minSdkVersionที่สูงอาจจำเป็นในกรณีพิเศษที่ไฟล์ Manifest ของไลบรารีมี Broadcast Receiver หรือกลไกอื่นๆ ที่ทำให้โค้ดทำงานโดยอัตโนมัติในกรณีเหล่านี้ การเลือก
minSdkVersionที่สูงจะช่วยให้โค้ดทำงานได้ หรือคุณจะปิดใช้ลักษณะการทำงานอัตโนมัติเพื่อให้แอปเลือกที่จะเรียกใช้ไลบรารีได้หลังจากทำการตรวจสอบที่เหมาะสมแล้ว
หากต้องการอนุญาตให้ฝังในแอป ให้ใช้คำอธิบายประกอบ
RequiresApiใน
ไลบรารีเพื่อระบุให้ผู้เรียกใช้ทราบว่าต้องทำการตรวจสอบรันไทม์ Android Lint ใช้ข้อมูล RequiresApi สำหรับการตรวจสอบ ดูแหล่งข้อมูลเพิ่มเติม
เกี่ยวกับการใช้คำอธิบายประกอบเพื่อปรับปรุงโค้ดและ API ของ API ได้ที่ปรับปรุงการตรวจสอบโค้ด
ด้วยคำอธิบายประกอบ
ตั้งค่าข้อมูลเมตา AAR
ไลบรารี Android จะบรรจุอยู่ในรูปแบบไฟล์ Android Archive (AAR) ข้อมูลเมตา AAR ประกอบด้วยพร็อพเพอร์ตี้ที่ช่วยให้ AGP ใช้ไลบรารีได้ หากมีการกำหนดค่าที่ไม่เข้ากันใช้ไลบรารีของคุณ และมีการตั้งค่าข้อมูลเมตา AAR ไว้ ระบบจะแสดงข้อความแสดงข้อผิดพลาดแก่ผู้ใช้เพื่อช่วยแก้ปัญหา
เลือกค่า `minCompileSdk`
AGP รองรับ
minCompileSdk ตั้งแต่เวอร์ชัน 4.1 เป็นต้นไป
ซึ่งระบุขั้นต่ำ
compileSdk
ที่โปรเจ็กต์ที่ใช้ไลบรารีสามารถใช้ได้ หากไลบรารีมีรายการไฟล์ Manifest หรือทรัพยากรที่ใช้แอตทริบิวต์แพลตฟอร์มใหม่ คุณต้องตั้งค่านี้
คุณสามารถตั้งค่า minCompileSdk ในบล็อก defaultConfig{}, productFlavors{} และ buildTypes{} ในไฟล์ build.gradle ระดับโมดูลได้
ดึงดูด
android { defaultConfig { aarMetadata { minCompileSdk = 29 } } productFlavors { foo { ... aarMetadata { minCompileSdk = 30 } } } }
Kotlin
android { defaultConfig { aarMetadata { minCompileSdk = 29 } } productFlavors { register("foo") { ... aarMetadata { minCompileSdk = 30 } } } }
หากคุณตั้งค่า minCompileSdk ไว้หลายที่ Gradle จะจัดลำดับความสำคัญของตำแหน่งการตั้งค่าดังนี้ในระหว่างกระบวนการบิลด์
buildTypes{}productFlavors{}defaultConfig{}
ในตัวอย่างก่อนหน้า ซึ่งมีการกำหนด minCompileSdk ไว้ทั้งใน defaultConfig{} และ productFlavors{} ระบบจะจัดลำดับความสำคัญของ productFlavors{} และตั้งค่า minCompileSdk เป็น 30
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ Gradle จัดลำดับความสำคัญของการตั้งค่าเมื่อรวมโค้ดและทรัพยากรได้ที่บิลด์ด้วยชุดแหล่งที่มา
เปิดใช้ฟิกซ์เจอร์การทดสอบ
ฟิกซ์เจอร์การทดสอบ ใช้กันโดยทั่วไปเพื่อตั้งค่าโค้ดที่จะทดสอบหรืออำนวยความสะดวกในการทดสอบคอมโพเนนต์ ตั้งแต่เวอร์ชัน 7.1 เป็นต้นไป AGP สามารถสร้างฟิกซ์เจอร์การทดสอบสำหรับโปรเจ็กต์ไลบรารี นอกเหนือจากโปรเจ็กต์แอปพลิเคชันและฟีเจอร์แบบไดนามิก
เมื่อเผยแพร่ไลบรารีให้ผู้อื่นใช้ ให้พิจารณาสร้างฟิกซ์เจอร์การทดสอบสำหรับ API คุณสามารถเปิดใช้ฟิกซ์เจอร์การทดสอบในไฟล์ build.gradle ระดับโมดูลได้
ดึงดูด
android { testFixtures { enable = true } }
Kotlin
android { testFixtures { enable = true } }
เมื่อเปิดใช้ฟิกซ์เจอร์การทดสอบ Gradle จะสร้างชุดซอร์ส src/testFixtures โดยอัตโนมัติ ซึ่งคุณสามารถเขียนฟิกซ์เจอร์การทดสอบได้
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของ Gradle เกี่ยวกับการใช้ฟิกซ์เจอร์การทดสอบ