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

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

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

    ในกรณีเหล่านี้ การเลือก 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 เกี่ยวกับการใช้ การทดสอบ