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

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

    ในกรณีเหล่านี้ การเลือก 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 ระดับโมดูล ดังนี้

ดึงดูด

android {
  testFixtures {
    enable = true
  }
}

Kotlin

android {
  testFixtures {
    enable = true
  }
}

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

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