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

หน้านี้อธิบายพร็อพเพอร์ตี้และตัวเลือกที่จําเป็นสําหรับเตรียมโปรเจ็กต์คลัง Android เพื่อเผยแพร่โดยใช้ปลั๊กอิน Android Gradle (AGP) แม้ว่าคุณจะตั้งค่าพร็อพเพอร์ตี้เหล่านี้บางส่วนตั้งแต่เริ่มสร้างคลังแล้ว แต่โปรดอ่านคําแนะนําต่อไปนี้เพื่อเพิ่มประสิทธิภาพการตั้งค่า

เลือกเนมสเปซ

ไลบรารี Android ต้องประกาศเนมสเปซเพื่อให้สร้างคลาส R ที่ไม่ซ้ำกันเมื่อคอมไพล์ทรัพยากร เนมสเปซนี้ควรตรงกับแพ็กเกจคลาสรูทของไลบรารีอย่างใกล้เคียงกันเพื่อไม่ให้เกิดความสับสนเมื่อผู้ใช้นําเข้าคลาสปกติจากไลบรารีและคลาส R ของไลบรารี

ตั้งแต่ AGP 7.0 เป็นต้นไป คุณสามารถตั้งค่าเนมสเปซในไฟล์ build.gradle ของแอปได้ ดังที่แสดงในตัวอย่างโค้ดต่อไปนี้

Groovy

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 ระดับโมดูล ดังนี้

Groovy

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 เกี่ยวกับการใช้ฟิกซ์เจอร์การทดสอบ