ปลั๊กอิน Android Gradle 8.0.0 (เมษายน 2023)

ปลั๊กอิน Android Gradle 8.0.0 เป็นรุ่นหลักที่มีฟีเจอร์ใหม่ๆ มากมาย ฟีเจอร์และการปรับปรุงต่างๆ

ความเข้ากันได้

เวอร์ชันต่ำสุด เวอร์ชันเริ่มต้น หมายเหตุ
เกรเดิล 8.0 8.0 ดูข้อมูลเพิ่มเติมได้ที่การอัปเดต Gradle
เครื่องมือสร้าง SDK 30.0.3 30.0.3 ติดตั้งหรือกำหนดค่าเครื่องมือสร้าง SDK
NDK ไม่มี 25.1.8937393 ติดตั้งหรือกำหนดค่า NDK เวอร์ชันอื่น
JDK 17 17 ดูข้อมูลเพิ่มเติมได้ที่การตั้งค่าเวอร์ชัน JDK

การเปิดตัวแพตช์

รายการเวอร์ชันแพตช์สำหรับปลั๊กอิน Android Gradle มีดังนี้ 8.0

ปลั๊กอิน Android Gradle 8.0.2 (พฤษภาคม 2023)

ดูรายการข้อบกพร่องที่แก้ไขใน AGP 8.0.2 ได้ที่ ปัญหาที่ปิดแล้วของ Android Studio 2022.2.1

ปลั๊กอิน Android Gradle 8.0.1 (พฤษภาคม 2023)

การอัปเดตเล็กน้อยนี้รวมการแก้ไขข้อบกพร่องต่อไปนี้

ปัญหาที่แก้ไขแล้ว
ข้อผิดพลาด: "ไม่มีข้อกำหนดเวอร์ชันซึ่งมีรหัสที่ระบุในตาราง" หลังจากอัปเกรด AGP 7.2.2 -> 7.4.0
R8 NullPointerException ที่ MarkTypeAsLive AGP 7.4.1
[R8 4.0.53] การยืนยันฮาร์ดคลาสใน Android 11 ล้มเหลว

การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ: ต้องใช้เนมสเปซในสคริปต์บิลด์ระดับโมดูล

คุณต้องตั้งค่าเนมสเปซในไฟล์ build.gradle.kts ระดับโมดูลแทน ในไฟล์ Manifest คุณเริ่มใช้พร็อพเพอร์ตี้ DSL ของ namespace ได้ ที่เริ่มจาก AGP 7.3 ดูข้อมูลเพิ่มเติมได้ที่ ตั้งค่าเนมสเปซ

เมื่อย้ายข้อมูลไปยัง DSL ของเนมสเปซ โปรดระมัดระวังปัญหาต่อไปนี้

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

สำหรับข้อมูลเพิ่มเติม โปรดดู ปัญหา #191813691 ความคิดเห็น #19

การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ: ค่าเริ่มต้นของตัวเลือกบิลด์

ตั้งแต่ AGP 8.0 เป็นต้นไป ค่าเริ่มต้นสำหรับแฟล็กเหล่านี้จะเปลี่ยนเป็น เพื่อปรับปรุงประสิทธิภาพบิลด์ เพื่อรับความช่วยเหลือในการปรับเปลี่ยนโค้ดของคุณเพื่อรองรับ การเปลี่ยนแปลงเหล่านี้ ใช้ตัวช่วยอัปเกรด AGP (เครื่องมือ > AGP Upgrade Assistant) Assistant การอัปเกรดจะแนะนําให้คุณ อัปเดตโค้ดเพื่อรองรับการทำงานใหม่หรือการตั้งค่าสถานะเพื่อคงไว้ การทำงานก่อนหน้านี้

ตั้งค่าสถานะ ค่าเริ่มต้นใหม่ ค่าเริ่มต้นก่อนหน้า หมายเหตุ
android.defaults.buildfeatures.buildconfig false true AGP 8.0 จะไม่สร้าง BuildConfig โดยค่าเริ่มต้น คุณต้องมี เพื่อระบุตัวเลือกนี้โดยใช้ DSL ในโปรเจ็กต์ที่คุณต้องการ
android.defaults.buildfeatures.aidl false true AGP 8.0 จะไม่เปิดใช้การรองรับ AIDL โดยค่าเริ่มต้น คุณต้องระบุ ตัวเลือกนี้โดยใช้ DSL ในโปรเจ็กต์ที่คุณต้องการ การตั้งค่าสถานะนี้เป็น มีแผนที่จะนำออกใน AGP 9.0
android.defaults.buildfeatures.renderscript false true AGP 8.0 จะไม่เปิดใช้งานการสนับสนุน RenderScript ตามค่าเริ่มต้น สิ่งที่คุณต้องทำ ระบุตัวเลือกนี้โดยใช้ DSL ในโปรเจ็กต์ที่คุณต้องการ ช่วงเวลานี้ เรามีแผนที่จะนำธงออกใน AGP 9.0
android.nonFinalResIds true false AGP 8.0 จะสร้างคลาส R ที่มีช่องที่ยังไม่ได้สุดท้าย "ค่าเริ่มต้น"
android.nonTransitiveRClass true false AGP 8.0 สร้าง R คลาสสำหรับทรัพยากรที่กำหนดไว้ใน โมดูลปัจจุบันเท่านั้น
android.enableR8.fullMode true false AGP 8.0 จะเปิดใช้โหมดเต็มหน้าจอ R8 โดยค่าเริ่มต้น ดูรายละเอียดเพิ่มเติมได้ที่ โหมด R8 เต็ม

การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ: ค่าตัวเลือกบิลด์ที่บังคับใช้

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

ตั้งค่าสถานะ ค่าที่บังคับใช้ หมายเหตุ
android.dependencyResolutionAtConfigurationTime.warn true AGP 8.0 จะแสดงคำเตือนหากตรวจพบการแก้ไขการกำหนดค่าระหว่าง เฟสการกำหนดค่าเนื่องจากจะส่งผลเสียต่อการกำหนดค่า Gradle ครั้ง
android.r8.failOnMissingClasses true AGP 8.0 ล้มเหลวกับบิลด์ที่ใช้ R8 หากไม่มีคลาสสำหรับ เพื่อเพิ่มประสิทธิภาพ DEX ให้ดียิ่งขึ้น ปัญหานี้คุณจะต้องเพิ่ม ไม่มีไลบรารีหรือกฎ -dontwarn รายการ Keep สำหรับรายละเอียดเพิ่มเติม ดู ไม่มีคำเตือนของชั้นเรียนในโปรแกรมย่อขนาด R8
android.testConfig.useRelativePath true เมื่อรองรับการใช้ทรัพยากร เนื้อหา และไฟล์ Manifest ของ Android เปิดใช้งานการทดสอบ 1 หน่วย AGP 8.0 จะสร้าง test_config.properties ไฟล์ที่มีเฉพาะที่เกี่ยวข้อง เส้นทาง วิธีนี้ช่วยให้มั่นใจว่าการทดสอบหน่วยของ Android จะใช้ Gradle ได้เสมอ แคชของบิลด์
android.useNewJarCreator true AGP ใช้ไลบรารี Zipflinger เมื่อสร้างไฟล์ JAR เพื่อปรับปรุง สร้างประสิทธิภาพ
android.bundletool.includeRepositoriesInDependencyReport true เมื่อเพิ่มข้อมูลเกี่ยวกับทรัพยากร Dependency ของ SDK ใน AAB และ APK แล้ว นอกจากนี้ AGP 8.0 ยังเพิ่มรายการที่เก็บโปรเจ็กต์ลงในข้อมูลนี้ด้วย ถึง เรียนรู้เพิ่มเติม ดู ข้อมูลการขึ้นต่อกันสำหรับ Play Console
android.enableArtProfiles true ขณะนี้ระบบจะสร้างโปรไฟล์พื้นฐานเสมอ โปรดดูรายละเอียดในโปรไฟล์พื้นฐาน
android.enableNewResourceShrinker true ใช้การนำทรัพยากรใหม่ไปใช้งานโดยค่าเริ่มต้น ฟิลด์ ตัวย่อทรัพยากร รวมถึงการสนับสนุนฟีเจอร์แบบไดนามิก
android.enableSourceSetPathsMap true ใช้ในการคำนวณการจับคู่เส้นทางทรัพยากรแบบสัมพัทธ์ ดังนั้นสร้าง Gradle ได้รับการอัปเดตบ่อยกว่า
android.cacheCompileLibResources true ทรัพยากรไลบรารีที่คอมไพล์แล้วสามารถแคชโดยค่าเริ่มต้นได้เนื่องจาก Gradle ติดตามไฟล์ทรัพยากรที่สัมพันธ์กับตำแหน่งของโครงการ ต้องมี android.enableSourceSetPathsMap เปิดใช้อยู่
android.disableAutomaticComponentCreation true โดยค่าเริ่มต้น AGP 8.0 จะไม่สร้าง SoftwareComponent โดย AGP จะสร้าง SoftwareComponents สำหรับตัวแปรที่กำหนดค่าให้เผยแพร่เท่านั้น โดยใช้ DSL การเผยแพร่

แฟล็กใหม่ที่เสถียรสำหรับโปรไฟล์การดำเนินการ

AGP มี Flag android.settings.executionProfile ใหม่ ใช้แฟล็กนี้เพื่อ ลบล้างโปรไฟล์การดำเนินการเริ่มต้น SettingsExtension ดูข้อมูลเพิ่มเติมได้ในเอกสารปลั๊กอินการตั้งค่า

หากต้องการดูตัวอย่างแฟล็กทดลอง โปรดดู ดูตัวอย่างบันทึกประจำรุ่น

ไม่รองรับการกำหนดพร็อพเพอร์ตี้แบบ Lazy Loading ของ Kotlin

หากคุณใช้ Kotlin DSL ของ Gradle สำหรับสคริปต์บิลด์ โปรดทราบว่า Android Studio และ AGP 8.0 ไม่สนับสนุนการกำหนดพร็อพเพอร์ตี้ทดลองโดยใช้ โอเปอเรเตอร์ = รายการ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์นี้ โปรดดู บันทึกประจำรุ่น และ เอกสารประกอบ

หมวดหมู่งานของเครื่องมือวิเคราะห์บิลด์

เริ่มต้นด้วย Android Studio Flamingo ตัววิเคราะห์บิลด์มีมุมมองเริ่มต้นใหม่สำหรับ งานที่ส่งผลต่อระยะเวลาของบิลด์ หากโปรเจ็กต์ใช้ AGP 8.0 ขึ้นไป แทนที่จะแสดงงานทีละรายการ ตัววิเคราะห์บิลด์จะจัดกลุ่มงานเหล่านี้ตาม หมวดหมู่ เช่น งานที่เกี่ยวข้องกับทรัพยากรของ Android, Kotlin หรือ Dexing โดยเฉพาะ เป็นกลุ่มและจัดเรียงตามระยะเวลาของบิลด์ วิธีนี้ช่วยให้คุณ ทราบว่าหมวดหมู่ใดส่งผลต่อเวลาในการสร้างมากที่สุด ขยายแต่ละหมวดหมู่ แสดงรายการงานที่เกี่ยวข้อง หากต้องการแสดงงานทีละรายการ โดยไม่ต้องจัดกลุ่ม ให้ใช้เมนูแบบเลื่อนลงจัดกลุ่มตาม

หมวดหมู่งานของเครื่องมือวิเคราะห์บิลด์

ปลั๊กอินการตั้งค่าใหม่

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

หากต้องการใช้ปลั๊กอินการตั้งค่า ให้ใช้ปลั๊กอินในไฟล์ settings.gradle

apply plugin 'com.android.settings'

รวมการกำหนดค่าส่วนกลาง

หากต้องการกำหนดค่าส่วนกลาง ให้ใช้การบล็อก android ใหม่ใน settings.gradle ตัวอย่างเช่น

android {
  compileSdk 31
  minSdk 28
  ...
}

โปรไฟล์การดำเนินการกับเครื่องมือ

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

สร้างโปรไฟล์การดำเนินการและตั้งค่าโปรไฟล์การดำเนินการเริ่มต้นใน settings.gradle ตามที่แสดงในตัวอย่างต่อไปนี้

android {
  execution {
    profiles {
      high {
        r8 {
          jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      low {
        r8 {
          jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      ci {
        r8.runInSeparateProcess false
      }
    }
    defaultProfile "low"
  }
}

หากต้องการลบล้างโปรไฟล์เริ่มต้น ให้เลือกโปรไฟล์อื่นโดยใช้ พร็อพเพอร์ตี้ android.experimental.settings.executionProfile รายการใน ไฟล์ gradle.properties:

android.experimental.settings.executionProfile=high

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

./gradlew assembleRelease \
  -Pandroid.experimental.settings.executionProfile=ci

ต้องใช้ JDK 17 เพื่อเรียกใช้ AGP 8.0

ตอนนี้คุณจำเป็นต้องใช้ JDK 17 เพื่อใช้ปลั๊กอิน Android Gradle 8.0 ในการสร้างแอป เพื่อเรียกใช้ Gradle Android Studio Flamingo รวม JDK 17 และกำหนดค่า Gradle เป็นค่าเริ่มต้น ซึ่งหมายความว่าผู้ใช้ Android Studio ส่วนใหญ่ไม่จําเป็นต้อง การเปลี่ยนแปลงการกำหนดค่าในโปรเจ็กต์

หากคุณต้องการตั้งค่าเวอร์ชัน JDK ด้วยตนเอง ใช้โดย AGP ภายใน Android Studio คุณต้องใช้ JDK 17 ขึ้นไป

เมื่อใช้ AGP ที่ไม่เกี่ยวข้องกับ Android Studio ให้อัปเกรดเวอร์ชัน JDK ภายใน กำลังตั้งค่าJAVA_HOME ตัวแปรสภาพแวดล้อม หรือ -Dorg.gradle.java.home ตัวเลือกบรรทัดคำสั่ง ในไดเรกทอรีการติดตั้ง JDK 17 ของคุณ