เตรียมคลังสำหรับการเผยแพร่

หน้านี้อธิบายพร็อพเพอร์ตี้และตัวเลือกที่จําเป็นสําหรับเตรียมโปรเจ็กต์คลัง 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 จากแอปและจาก Dependency ของแอปจะบังคับให้ไม่มี Dependency ที่มี minSdkVersion สูงกว่าแอป

  • การเลือก minSdkVersion ระดับสูงอาจทำให้นักพัฒนาแอปปิดใช้การตรวจสอบความปลอดภัยของการควบรวมไฟล์ Manifest ซึ่งทำให้เกิดปัญหาภายหลังในขั้นตอนบิลด์

    เนื่องจากเครื่องมือผสานไฟล์ Manifest ป้องกันไม่ให้โปรเจ็กต์แอปรวมไลบรารีที่มี minSdkVersion สูงกว่าแอปเอง นักพัฒนาแอปจึงอาจปิดใช้การตรวจสอบความปลอดภัยของเครื่องมือผสานไฟล์ Manifest เพื่อลดข้อผิดพลาดในการสร้าง แต่วิธีนี้อาจทำให้เกิดปัญหาการไม่เข้ากันได้ในขั้นตอนถัดไป

  • การเลือก minSdkVersion สูงอาจจำเป็นในบางกรณีพิเศษที่ไฟล์ Manifest ของไลบรารีมีตัวรับสัญญาณการออกอากาศหรือกลไกอื่นๆ ที่เรียกใช้โค้ดโดยอัตโนมัติ

    ในกรณีเหล่านี้ การเลือก minSdkVersion สูงจะช่วยให้โค้ดทำงานได้ หรือคุณจะปิดใช้ลักษณะการทำงานแบบอัตโนมัติเพื่อให้แอปเลือกใช้การดำเนินการไลบรารีได้หลังจากที่ตรวจสอบถูกต้องแล้ว

หากต้องการอนุญาตให้ฝังในแอป ให้ใช้คำอธิบายประกอบ RequiresApi ในไลบรารีเพื่อบ่งบอกให้ผู้เรียกใช้ทราบว่าต้องดำเนินการตรวจสอบรันไทม์ Android Lint ใช้ข้อมูล RequiresApi เพื่อทำการตรวจสอบ ดูแหล่งข้อมูลเพิ่มเติมเกี่ยวกับการใช้คําอธิบายประกอบเพื่อปรับปรุงโค้ด API และ API ได้ที่ปรับปรุงการตรวจสอบโค้ดด้วยคําอธิบายประกอบ

ตั้งค่าข้อมูลเมตา AAR

ไลบรารี Android จัดอยู่ในรูป ไฟล์ Android Archive (AAR) ข้อมูลเมตา AAR ประกอบด้วยพร็อพเพอร์ตี้ที่ช่วยให้ AGP ใช้ไลบรารีได้ หากมีการใช้ไลบรารีโดยการกำหนดค่าที่ใช้ร่วมกันไม่ได้และมีการตั้งค่าข้อมูลเมตา AAR ผู้ใช้จะได้รับข้อความแสดงข้อผิดพลาดเพื่อช่วยแก้ไขปัญหา

เลือกค่า minCompileSdk

ตั้งแต่เวอร์ชัน 4.1 เป็นต้นไป AGP จะรองรับ minCompileSdk ค่านี้ระบุค่าต่ำสุด 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 จะจัดลําดับความสําคัญของตําแหน่งการตั้งค่าดังนี้ในระหว่างกระบวนการสร้าง

  1. buildTypes{}

  2. productFlavors{}

  3. defaultConfig{}

ในตัวอย่างก่อนหน้านี้ที่ minCompileSdk ได้รับการกําหนดทั้งใน defaultConfig{} และ productFlavors{} ระบบจะให้ความสําคัญกับ productFlavors{} และตั้งค่า minCompileSdk เป็น 30

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ Gradle ให้ความสำคัญกับการตั้งค่าเมื่อรวมโค้ดและทรัพยากรได้ที่สร้างด้วยชุดแหล่งที่มา

เปิดใช้ฟิกซ์เจอร์การทดสอบ

ฟิกซ์เจอร์การทดสอบมักใช้เพื่อตั้งค่าโค้ดที่จะทดสอบหรืออำนวยความสะดวกในการทดสอบคอมโพเนนต์ ตั้งแต่เวอร์ชัน 7.1 เป็นต้นไป AGP จะสามารถสร้างอุปกรณ์ที่ใช้ทดสอบสำหรับโปรเจ็กต์ไลบรารีได้ นอกเหนือไปจากการใช้โปรเจ็กต์และฟีเจอร์แบบไดนามิก

เมื่อเผยแพร่ไลบรารีเพื่อให้ผู้อื่นใช้ คุณควรสร้างอุปกรณ์ทดสอบสำหรับ API ของคุณ คุณเปิดฟิกซ์เจอร์การทดสอบได้ในไฟล์ build.gradle ระดับโมดูล โดยทำดังนี้

Groovy

android {
  testFixtures {
    enable = true
  }
}

Kotlin

android {
  testFixtures {
    enable = true
  }
}

เมื่อคุณเปิดฟิเจอร์การทดสอบ Gradle จะสร้างsrc/testFixturesชุดแหล่งที่มาโดยอัตโนมัติซึ่งคุณสามารถเขียนฟิเจอร์การทดสอบได้

ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของ Gradle เกี่ยวกับการใช้ฟิกซ์เจอร์การทดสอบ