การอัปเดต API ปลั๊กอิน Android Gradle

หน้านี้ติดตามการเลิกใช้งานและการนำปลั๊กอิน Android Gradle (AGP) API ออก และ จะให้ข้อมูลเกี่ยวกับวิธีอัปเดตโค้ดให้สอดคล้องกัน

เครื่องมือติดตามการเลิกใช้งานและการนำ API ออก

ตารางต่อไปนี้สรุปข้อมูลเมื่อเลิกใช้งานและนํา AGP API ออก ข้อกำหนดของเวอร์ชัน AGP

API เลิกใช้งานในเวอร์ชัน AGP นำออกจากเวอร์ชัน AGP แล้ว
Component.setAsmFramesComputationMode 7.2
Component.transformClassesWith 7.2
RenderScript 7.2
เปลี่ยนรูปแบบ 7.2 8.0

AGP 8.0

การอัปเดต API ที่สำคัญสำหรับ AGP 8.0 มีดังนี้

นำ Transform API ออกแล้ว

เริ่มต้นด้วย AGP 8.0 เปลี่ยนรูปแบบ นำ API ออกแล้ว ซึ่งหมายความว่าชั้นเรียนทั้งหมดในแพ็กเกจ นำ com.android.build.api.transform ออกแล้ว

เรากำลังจะนำ Transform API ออกเพื่อปรับปรุงประสิทธิภาพของบิลด์ โปรเจ็กต์ที่ ใช้ Transform API บังคับให้ AGP ใช้ขั้นตอนที่เพิ่มประสิทธิภาพน้อยลงสำหรับบิลด์ที่ อาจทำให้เกิดการถดถอยอย่างมากในเวลาสร้าง นอกจากนี้ยังใช้ เปลี่ยนรูปแบบ API และรวมกับฟีเจอร์อื่นๆ ของ Gradle API ทดแทน มีจุดประสงค์ที่จะทำให้การขยาย AGP เป็นเรื่องง่ายขึ้นโดยไม่ต้องนำเสนอประสิทธิภาพหรือสร้าง เกี่ยวกับความถูกต้อง

API ทดแทน

Transform API ไม่สามารถแทนที่ได้เพียงรายการเดียว กล่าวคือมีเวอร์ชันใหม่ที่ตรงเป้าหมาย API สำหรับการใช้งานในแต่ละกรณี API ทดแทนทั้งหมดอยู่ในบล็อก androidComponents {} API เหล่านี้พร้อมใช้งานโดย AGP 7.2

การสนับสนุนการแปลงไบต์โค้ด

ใช้ Instrumentation API เพื่อแปลงไบต์โค้ด สําหรับห้องสมุด คุณสามารถทำสิ่งต่อไปนี้ ลงทะเบียนการใช้เครื่องมือสำหรับชั้นเรียนโปรเจ็กต์ในเครื่องเท่านั้น สำหรับแอปและการทดสอบ คุณสามารถเลือกลงทะเบียนการใช้เครื่องมือสำหรับชั้นเรียนในท้องถิ่นเท่านั้นหรือทั้งหมด รวมถึงทรัพยากร Dependency ภายในและระยะไกล ในการใช้ API นี้ พารามิเตอร์ การใช้เครื่องมือจะทำงานแยกกันในแต่ละชั้นเรียน และจะเข้าถึงฟังก์ชันอื่นๆ ได้อย่างจำกัด ในคลาสพาธ (โปรดดู createClassVisitor() ) ข้อจำกัดนี้ช่วยปรับปรุงประสิทธิภาพของ ทั้งบิลด์เต็มรูปแบบและเวอร์ชันที่เพิ่มขึ้น รวมถึงทำให้แพลตฟอร์ม API เรียบง่ายอยู่เสมอ ห้องสมุดแต่ละรายการ ติดตั้งไปพร้อมๆ กันทันทีที่พร้อม แทนที่จะเป็นทั้งหมด การคอมไพล์เสร็จสมบูรณ์ นอกจากนี้ การเปลี่ยนแปลงในชั้นเรียนเดียว หมายความว่า เฉพาะชั้นเรียนที่ได้รับผลกระทบเท่านั้นที่ต้องได้รับเครื่องมือแบบเพิ่มขึ้น งานสร้าง โปรดดูตัวอย่างวิธีใช้ Instrumentation API ได้ที่ การพลิกโฉมชั้นเรียนด้วย ASM สูตร AGP

การรองรับการเพิ่มชั้นเรียนที่สร้างขึ้นลงในแอปของคุณ

หากต้องการเพิ่มชั้นเรียนที่สร้างขึ้นเพิ่มเติมลงในแอป ให้ใช้ อาร์ติแฟกต์ API กับ MultipleArtifact.ALL_CLASSES_DIRS กล่าวอย่างเจาะจงคือ ให้ใช้

artifacts.use(TaskProvider)
  .wiredWith(...)
  .toAppend(Artifact.Multiple)

ด้วย MultipleArtifact.ALL_CLASSES_DIRS เพื่อเพิ่มรายการที่สร้างเพิ่มเติม ไดเรกทอรีไปยังคลาสของโปรเจ็กต์ Artifacts API จะเลือกโดยอัตโนมัติ ตำแหน่งที่ไม่ซ้ำกันสำหรับแสดงข้อมูลงานที่กำหนดเองของคุณ โปรดดู สูตร addToAllLesson เพื่อดูตัวอย่างวิธีใช้ API นี้

การสนับสนุนการเปลี่ยนรูปแบบตามการวิเคราะห์ทั้งโปรแกรม

หากต้องการใช้การเปลี่ยนรูปแบบตามการวิเคราะห์ทั้งโปรแกรม คุณสามารถ เปลี่ยนไปได้ด้วยงานเดียว คุณควรใช้วิธีนี้ด้วยความระมัดระวัง เนื่องจากมีต้นทุนด้านประสิทธิภาพการสร้างสูงกว่าการใช้เครื่องมือ API หากปลั๊กอินใช้ API นี้ ขอแนะนำให้มีการเปลี่ยนรูปแบบ เลือกใช้ตามประเภทบิลด์ เพื่อให้นักพัฒนาแอปปิดใช้บิลด์ได้ งานสร้างต่างๆ

หากต้องการลงทะเบียนงานที่แปลงโฉมชั้นเรียนทั้งหมดไปพร้อมๆ กัน ให้ใช้ปลั๊กอิน Android Gradle 7.4 ขอแนะนำ Artifacts.forScope API หากต้องการเปลี่ยนชั้นเรียนทั้งหมดในโปรเจ็กต์ปัจจุบัน ให้ใช้ Artifacts.forScope.PROJECT หากต้องการเปลี่ยนรูปแบบชั้นเรียนทั้งหมดในโปรเจ็กต์ปัจจุบัน โปรเจ็กต์ที่นำเข้าและทรัพยากร Dependency ภายนอกทั้งหมดจะใช้ Artifacts.forScope.ALL โค้ดต่อไปนี้แสดงวิธีใช้ Artifacts.forScope.ALL เพื่อลงทะเบียน งานที่พลิกโฉมชั้นเรียนทั้งหมดไปพร้อมๆ กัน:

variant.artifacts.forScope(ScopedArtifacts.Scope.ALL)
    .use(taskProvider)
    .toTransform(
        ScopedArtifact.CLASSES,
        ModifyClassesTask::allJars,
        ModifyClassesTask::allDirectories,
        ModifyClassesTask::output,
    )

โปรดดู แก้ไขสูตรอาหารใน Project Classroom สำหรับตัวอย่างวิธีใช้ API นี้และ ปรับแต่งสูตร AgpDsl เพื่อดูตัวอย่างวิธีลงทะเบียนส่วนขยายที่กำหนดเองกับบิลด์ประเภท Android

หากกรณีการใช้งานของคุณไม่รวมอยู่ใน Androidคอมโพเนนต์ API โปรดรายงานข้อบกพร่อง

เราได้ย้ายข้อมูลปลั๊กอินต่างๆ ที่ใช้กันโดยทั่วไปเพื่อใช้ API ใหม่เหล่านี้แล้ว รวมถึงปลั๊กอินการตรวจสอบประสิทธิภาพ Firebase (1.4.1 ใช้ได้กับ AGP 8.0) และปลั๊กอิน Hilt Gradle (2.40.1 ใช้ได้กับ AGP 8.0) AGP อัปเกรด Assistant ยังช่วยให้เจ้าของโปรเจ็กต์อัปเกรดที่ใช้กันโดยทั่วไปได้อีกด้วย ปลั๊กอินตามความจำเป็น

หากคุณใช้ Transform API ผ่านปลั๊กอินของบุคคลที่สาม โปรดอนุญาตให้ ผู้เขียนทราบว่าจะต้องมีการอัปเดตปลั๊กอินให้ใช้งานกับ API ใหม่ได้ สำหรับ AGP 8.0

AGP 7.2

การอัปเดต API ที่สำคัญสำหรับ AGP 7.2 มีดังนี้

เลิกใช้งาน RenderScript แล้ว

ตั้งแต่ AGP 7.2 เป็นต้นไป เราจะเลิกใช้งาน RenderScript API ต่อไป พวกเขาจะดำเนินการต่อ จะยังคงใช้งานได้ แต่จะเรียกใช้คำเตือน และจะถูกนำออกโดยสมบูรณ์ในอนาคต ของ AGP อีกด้วย สำหรับคำแนะนำเกี่ยวกับวิธีเปลี่ยนจาก RenderScript โปรดดู ย้ายข้อมูลจาก RenderScript

Component.transformClassesWith และ Component.setAsmFramesComputationMode เลิกใช้งานแล้ว

ตั้งแต่ AGP 7.2 เป็นต้นไป API การวัดไบต์โค้ดคลาส Component.transformClassesWith และ Component.setAsmFramesComputationMode เลิกใช้งานแล้ว พวกเขาได้ย้ายไปยังบล็อกใหม่ที่ชื่อ Component.instrumentation ซึ่ง มี API ทั้งหมดที่เกี่ยวข้องกับการกำหนดค่ากระบวนการติดตั้งใช้งาน ถึง ใช้ฟีเจอร์การใช้เครื่องมือเหล่านี้ต่อไป ใช้ API ที่สอดคล้องกันใน บล็อกใหม่แทน ดังที่แสดงในข้อมูลโค้ดต่อไปนี้

androidComponents {
      onVariants(selector().all(), {
          instrumentation.transformClassesWith(AsmClassVisitorFactoryImpl.class,
                                               InstrumentationScope.Project) { params ->
              params.x = "value"
          }
          instrumentation.setAsmFramesComputationMode(
              COMPUTE_FRAMES_FOR_INSTRUMENTED_METHODS
          )
      })
  }