บันทึกประจำรุ่นสำหรับตัวอย่างปลั๊กอิน Android Gradle

หน้านี้มีบันทึกประจำรุ่นสำหรับการเปิดตัว Android Gradle Plugin (AGP) เวอร์ชันตัวอย่าง

ปลั๊กอิน Android Gradle 9.0

ปลั๊กอิน Android Gradle 9.0 เป็น AGP เวอร์ชันหลักรุ่นใหม่ และมีการเปลี่ยนแปลง API และ ลักษณะการทำงาน

หากต้องการอัปเดตเป็นปลั๊กอิน Android Gradle 9.0.0-alpha04 ให้ใช้ Android Gradle plugin Upgrade Assistant ใน Android Studio Narwhal 4 Feature Drop | 2025.1.4

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

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

ระดับ API สูงสุดของ Android ที่ปลั๊กอิน Android Gradle 9.0.0-alpha04 รองรับคือระดับ API 36

ปลั๊กอิน Android Gradle 9.0.0-alpha04 ต้องใช้ Gradle 9.0.0

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

ตอนนี้การติดตั้งใช้งาน DSL ภายในและ API ของตัวแปรที่เลิกใช้งานแล้วต้องมีการเลือกใช้อย่างชัดเจน

ตอนนี้ปลั๊กอิน Android Gradle มีพื้นผิว API ที่กำหนดไว้แล้ว โดยมี API ที่รองรับ ซึ่งกำหนดไว้ในcom.android.tools.build:gradle-apiอาร์ติแฟกต์ Maven

เพื่อความเข้ากันได้กับปลั๊กอินไบนารีและสคริปต์บิลด์ที่มีอยู่ การใช้งาน DSL ก่อนหน้าซึ่งมีมาก่อน API ที่กำหนดไว้จะยังคงแสดงโดยค่าเริ่มต้นใน AGP 8.13 และต่ำกว่า ซึ่งจะช่วยให้โค้ดในปลั๊กอิน Gradle และสคริปต์บิลด์เข้าถึงได้ทั้งรายละเอียดการใช้งานภายในของ DSL รวมถึง API android.applicationVariants, android.libraryVariants, android.testVariants และ android.unitTestVariants ที่เลิกใช้งานแล้ว ซึ่ง จะถูกนำออกในปี 2026 ใน AGP 10

เพื่อทำให้การเปลี่ยนผ่านนี้ชัดเจนยิ่งขึ้น ทั้ง API ของตัวแปรเดิม และ DSL ภายในจะเข้าถึงไม่ได้โดยค่าเริ่มต้น Android Gradle ปลั๊กอิน 9.0.0-alpha04

คุณเลือกกลับมาใช้ API ที่เลิกใช้งานแล้วได้โดยการตั้งค่า android.newDsl=false ใน gradle.properties

ในระหว่างชุดอัลฟ่า 9.0 เราจะติดต่อผู้เขียนปลั๊กอิน เพื่อช่วยปรับและเผยแพร่ปลั๊กอินที่เข้ากันได้อย่างสมบูรณ์ กับโหมดใหม่ และจะปรับปรุงผู้ช่วยอัปเกรด AGP ใน Android Studio เพื่อแนะนำวิธีย้ายข้อมูล

Kotlin ในตัว

ปลั๊กอิน Android Gradle 9 มีการรองรับในตัวสำหรับการคอมไพล์ Kotlin ซึ่งจะแทนที่ปลั๊กอิน Kotlin ที่ใช้แยกกัน ซึ่งจะช่วยลดความซับซ้อน ในการผสานรวมกับ AGP โดยหลีกเลี่ยงการใช้ API ที่เลิกใช้งานแล้ว และปรับปรุงประสิทธิภาพในบางกรณี

ปลั๊กอิน Android Gradle 9 มีทรัพยากร Dependency รันไทม์ในปลั๊กอิน Kotlin Gradle 2.2.0 ซึ่งเป็นเวอร์ชันขั้นต่ำที่จำเป็นสำหรับการรองรับ Kotlin ในตัว

คุณเลือกไม่ใช้ Kotlin ในตัวได้โดยการตั้งค่า android.builtInKotlin=false หากเลือกไม่ใช้และยังต้องใช้ปลั๊กอิน Kotlin Gradle เวอร์ชันเก่า คุณสามารถบังคับลดเวอร์ชันได้

buildscript {
    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
            version { strictly("2.0.0") } // or another version that you want to use
        }
    }
}

การเปลี่ยนแปลงลักษณะการทำงาน

ปลั๊กอิน Android Gradle 9.0 มีลักษณะการทํางานใหม่ดังนี้

ลักษณะการทำงาน คำแนะนำ
ปลั๊กอิน Android Gradle 9.0 ใช้ NDK เวอร์ชัน r28c โดยค่าเริ่มต้น โปรดระบุเวอร์ชัน NDK ที่ต้องการใช้อย่างชัดเจน
Android Gradle Plugin 9.0 กำหนดให้ผู้ใช้ไลบรารีต้องใช้ SDK เวอร์ชันเดียวกันหรือสูงกว่าในการคอมไพล์โดยค่าเริ่มต้น ใช้ SDK ที่คอมไพล์เดียวกันหรือสูงกว่าเมื่อใช้ไลบรารี หากทำไม่ได้ หรือต้องการให้ผู้ใช้ไลบรารีที่คุณ เผยแพร่มีเวลามากขึ้นในการเปลี่ยน ให้ตั้งค่า AarMetadata.minCompileSdk อย่างชัดเจน

AGP 9.0 มีการอัปเดตค่าเริ่มต้นของพร็อพเพอร์ตี้ Gradle ต่อไปนี้ ซึ่งจะช่วยให้คุณเลือกที่จะคงลักษณะการทำงานของ AGP 8.13 ไว้เมื่ออัปเกรดได้

พร็อพเพอร์ตี้ การทำงาน เปลี่ยนจาก AGP 8.13 เป็น AGP 9.0 คำแนะนำ
android.newDsl ใช้อินเทอร์เฟซ DSL ใหม่โดยไม่ต้องเปิดเผยการใช้งานเดิมของบล็อก android
นอกจากนี้ ยังหมายความว่าคุณจะเข้าถึง API ตัวแปรเดิม เช่น android.applicationVariants ไม่ได้อีกต่อไป
falsetrue คุณเลือกไม่รับได้โดยการตั้งค่า android.newDsl=false
เมื่อปลั๊กอินและตรรกะการบิลด์ทั้งหมดที่โปรเจ็กต์ใช้เข้ากันได้แล้ว ให้นำการเลือกไม่ใช้ออก
android.builtInKotlin เปิดใช้การรองรับการคอมไพล์โค้ด Kotlin โดยตรงในปลั๊กอิน Android Gradle โดยไม่ต้องใช้ปลั๊กอิน org.jetbrains.kotlin.android falsetrue ใช้ Kotlin ในตัวโดยนำการใช้ปลั๊กอิน org.jetbrains.kotlin.android ออกหากทำได้ หากไม่ต้องการ ให้เลือกไม่ใช้โดยตั้งค่า android.builtInKotlin=false
android.uniquePackageNames บังคับให้แต่ละไลบรารีมีชื่อแพ็กเกจที่แตกต่างกัน falsetrue ระบุชื่อแพ็กเกจที่ไม่ซ้ำกันสำหรับไลบรารีทั้งหมดภายในโปรเจ็กต์ หากทำไม่ได้ คุณสามารถปิดใช้ฟีเจอร์นี้ขณะย้ายข้อมูล
android.dependency.useConstraints ควบคุมการใช้ข้อจำกัดของ Dependency ระหว่างการกำหนดค่า
ค่าเริ่มต้นใน AGP 9.0 คือ false ซึ่งใช้ข้อจำกัดในการทดสอบอุปกรณ์แอปพลิเคชัน (AndroidTest) เท่านั้น การตั้งค่านี้เป็น true จะเปลี่ยนกลับไปใช้ลักษณะการทำงานของเวอร์ชัน 8.13
truefalse อย่าใช้ข้อจํากัดของ Dependency ทุกที่เว้นแต่จะจําเป็น การยอมรับค่าเริ่มต้นใหม่ของฟีเจอร์นี้ยังช่วยให้การเพิ่มประสิทธิภาพใน กระบวนการนำเข้าโปรเจ็กต์ ซึ่งจะช่วยลดเวลาในการนำเข้าสำหรับการสร้าง ที่มีโปรเจ็กต์ย่อยของไลบรารี Android จำนวนมาก
aandroid.enableAppCompileTimeRClass คอมไพล์โค้ดในแอปพลิเคชันกับคลาส R ที่ไม่ใช่เวอร์ชันสุดท้าย ซึ่งจะทำให้ การคอมไพล์แอปพลิเคชันสอดคล้องกับการคอมไพล์ไลบรารี
ซึ่งจะช่วยปรับปรุงการเพิ่มขึ้นและปูทางสำหรับการเพิ่มประสิทธิภาพในอนาคต ให้กับขั้นตอนการประมวลผลทรัพยากร
falsetrue โปรเจ็กต์จำนวนมากสามารถใช้ลักษณะการทำงานใหม่ได้โดยไม่ต้องเปลี่ยนแปลงแหล่งที่มา หากมีการใช้ฟิลด์คลาส R ในที่ใดก็ตามที่ต้องใช้ค่าคงที่ เช่น กรณีของคำสั่ง switch ให้ทำการปรับโครงสร้างเพื่อใช้คำสั่ง if ที่เชื่อมโยงกัน
android.sdk.defaultTargetSdkToCompileSdkIfUnset ใช้เวอร์ชัน SDK ที่คอมไพล์เป็นค่าเริ่มต้นสำหรับเวอร์ชัน SDK เป้าหมายในแอปและการทดสอบ
ก่อนการเปลี่ยนแปลงนี้ เวอร์ชัน SDK เป้าหมายจะเป็นค่าเริ่มต้นของ SDK ขั้นต่ำ เวอร์ชัน
falsetrue ระบุเวอร์ชัน SDK เป้าหมายอย่างชัดเจนสำหรับแอปและการทดสอบ
android.onlyEnableUnitTestForTheTestedBuildType สร้างเฉพาะคอมโพเนนต์การทดสอบหน่วยสำหรับประเภทบิลด์ที่ทดสอบ
ในโปรเจ็กต์เริ่มต้น การดำเนินการนี้จะส่งผลให้มีการทดสอบหน่วยเดียวสำหรับการแก้ไขข้อบกพร่อง ซึ่งลักษณะการทำงานก่อนหน้านี้คือการทดสอบหน่วยที่ทำงานสำหรับการแก้ไขข้อบกพร่องหรือ การเผยแพร่
falsetrue หากโปรเจ็กต์ไม่จำเป็นต้องเรียกใช้การทดสอบทั้งสำหรับการแก้ไขข้อบกพร่องและเวอร์ชันที่เผยแพร่ คุณก็ไม่ต้องเปลี่ยนแปลงใดๆ
android.proguard.failOnMissingFiles สร้างไม่สำเร็จพร้อมข้อผิดพลาดหากไม่มีไฟล์ที่ระบุใน AGP DSL อยู่ในดิสก์ ก่อนการเปลี่ยนแปลงนี้ การสะกดชื่อไฟล์ผิด จะส่งผลให้ระบบไม่สนใจไฟล์โดยไม่มีการแจ้งเตือน falsetrue นำการประกาศไฟล์ ProGuard ที่ไม่ถูกต้องออก
android.r8.optimizedResourceShrinking ช่วยให้ R8 เก็บทรัพยากร Android น้อยลงได้โดยพิจารณา คลาสและทรัพยากร Android ร่วมกัน falsetrue หากกฎการเก็บรักษาของโปรเจ็กต์เสร็จสมบูรณ์แล้ว คุณก็ไม่ต้องเปลี่ยนแปลงใดๆ
android.r8.strictFullModeForKeepRules ช่วยให้ R8 เก็บข้อมูลน้อยลงโดยไม่ต้องเก็บตัวสร้างเริ่มต้นโดยนัย เมื่อมีการเก็บคลาส กล่าวคือ -keep class A ไม่ได้หมายความว่า -keep class A { <init>(); }
falsetrue หากกฎการเก็บรักษาของโปรเจ็กต์เสร็จสมบูรณ์แล้ว คุณก็ไม่ต้องเปลี่ยนแปลงใดๆ

แทนที่ -keep class A ด้วย -keep class A { <init>(); } ในกฎการเก็บของโปรเจ็กต์สำหรับกรณีที่คุณต้องการเก็บตัวสร้างเริ่มต้น
android.defaults.buildfeatures.shaders เปิดใช้ การคอมไพล์เชเดอร์ ในโปรเจ็กต์ย่อยทั้งหมด truefalse เปิดใช้การคอมไพล์ Shader ในโปรเจ็กต์ย่อยที่มี Shader เท่านั้นที่จะคอมไพล์โดยการตั้งค่าต่อไปนี้ในไฟล์บิลด์ Gradle ของโปรเจ็กต์เหล่านั้น
android {
  buildFeatures {
    shaders = true
  }
}

ฟีเจอร์ที่นำออกแล้ว

ปลั๊กอิน Android Gradle 9.0 จะนำฟังก์ชันต่อไปนี้ออก

DSL ที่เปลี่ยนแปลง

ปลั๊กอิน Android Gradle 9.0 มีการเปลี่ยนแปลง DSL ที่ส่งผลกับส่วนอื่นดังนี้

  • นำการกำหนดพารามิเตอร์ของ CommonExtension ออกแล้ว

    การเปลี่ยนแปลงที่ทําให้เกิดข้อขัดข้องนี้เป็นเพียงการเปลี่ยนแปลงระดับแหล่งที่มาเพื่อช่วยหลีกเลี่ยงการเปลี่ยนแปลงที่ทําให้เกิดข้อขัดข้องระดับแหล่งที่มาในอนาคต แต่ก็หมายความว่าต้องย้ายเมธอดบล็อกจาก CommonExtension ไปยัง ApplicationExtension, LibraryExension, DynamicFeatureExtension และ TestExtension

    เมื่ออัปเกรดโปรเจ็กต์เป็น AGP 9.0 ให้ปรับโครงสร้างโค้ดปลั๊กอิน Gradle ซึ่งใช้พารามิเตอร์หรือเมธอดบล็อกเหล่านั้น ตัวอย่างเช่น ระบบจะอัปเดตปลั๊กอินต่อไปนี้เพื่อนำพารามิเตอร์ประเภทออกและไม่ใช้เมธอดบล็อกที่นำออก

    AGP 8.13

    val commonExtension: CommonExtension<*, *, *, *, *, *> =
            extensions.getByType(CommonExtension::class)
    commonExtension.apply {
        defaultConfig {
            minSdk {
                version = release(28)
            }
        }
    }
    

    AGP 9.0

    val commonExtension: CommonExtension =
            extensions.getByType(CommonExtension::class)
    commonExtension.apply {
        defaultConfig.apply {
            minSdk {
                version = release(28)
            }
        }
    }
    

    สำหรับปลั๊กอินที่กำหนดเป้าหมายเป็น AGP เวอร์ชันต่างๆ การใช้ตัวรับโดยตรง จะเข้ากันได้แบบไบนารีกับ AGP เวอร์ชันที่ต่ำกว่า 9.0

DSL ที่นำออกแล้ว

ปลั๊กอิน Android Gradle 9.0 จะนำสิ่งต่อไปนี้ออก

พร็อพเพอร์ตี้ Gradle ที่นำออก

เดิมทีเราได้เพิ่มพร็อพเพอร์ตี้ Gradle ต่อไปนี้เป็นวิธีปิดใช้ฟีเจอร์ที่เปิดใช้โดยค่าเริ่มต้นทั่วโลก

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

พร็อพเพอร์ตี้ การทำงาน การแทนที่
android.defaults.buildfeatures.aidl เปิดใช้การ คอมไพเลชัน AIDLในโปรเจ็กต์ย่อยทั้งหมด เปิดใช้การคอมไพล์ AIDL ในโปรเจ็กต์ย่อยที่มีแหล่งที่มาของ AIDL เท่านั้น โดยการตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ในไฟล์บิลด์ Gradle ของโปรเจ็กต์เหล่านั้น
android {
  buildFeatures {
    aidl = true
  }
}
ในไฟล์บิลด์ Gradle ของแต่ละโปรเจ็กต์ย่อยที่มีแหล่งที่มาของ AIDL
android.defaults.buildfeatures.renderscript เปิดใช้ การคอมไพล์ RenderScript ในโปรเจ็กต์ย่อยทั้งหมด เปิดใช้การคอมไพล์ RenderScript ในโปรเจ็กต์ย่อยที่มีแหล่งที่มาของ RenderScript เท่านั้น โดยการตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ในไฟล์บิลด์ Gradle ของโปรเจ็กต์เหล่านั้น
android {
  buildFeatures {
    renderScript = true
  }
}

API ที่นำออก

ปลั๊กอิน Android Gradle 9.0 จะนำสิ่งต่อไปนี้ออก

  • BaseExtension.registerTransform API ที่เลิกใช้งานและปิดใช้แล้ว ซึ่ง ยังคงมีไว้เพื่ออนุญาตให้คอมไพล์กับ AGP เวอร์ชันล่าสุดขณะ กำหนดเป้าหมายการทำงานบน AGP 4.2 หรือต่ำกว่า

พร็อพเพอร์ตี้ Gradle ที่บังคับใช้

AGP 9.0 จะแสดงข้อผิดพลาดหากคุณตั้งค่าพร็อพเพอร์ตี้ Gradle ต่อไปนี้

ผู้ช่วยอัปเกรดปลั๊กอิน Android Gradle จะไม่อัปเกรดโปรเจ็กต์เป็น AGP 9.0 ที่ใช้พร็อพเพอร์ตี้เหล่านี้

พร็อพเพอร์ตี้ การทำงาน
android.r8.integratedResourceShrinking ตอนนี้การลดขนาดทรัพยากรจะทำงานเป็นส่วนหนึ่งของ R8 เสมอ และระบบได้นำการติดตั้งใช้งานก่อนหน้านี้ออกแล้ว