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

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

ปลั๊กอิน Android Gradle 9.0

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

หากต้องการอัปเดตเป็นปลั๊กอิน Android Gradle 9.0.0-alpha10 ให้ใช้ Android Gradle Plugin Upgrade Assistant ใน Android Studio Otter | 2025.2.1

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

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

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

ปลั๊กอิน Android Gradle 9.0.0-alpha10 ต้องใช้ 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

ตอนนี้androidคลาส DSL จะใช้เฉพาะอินเทอร์เฟซสาธารณะใหม่เท่านั้น

ในช่วงหลายปีที่ผ่านมา เราได้เปิดตัวอินเทอร์เฟซใหม่สำหรับ DSL และ API เพื่อให้ควบคุมได้ดียิ่งขึ้นว่า API ใดเป็นแบบสาธารณะ AGP เวอร์ชัน 7.x และ 8.x ยังคงใช้ DSL ประเภทเก่า (เช่น BaseExtension) ซึ่ง ยังใช้การติดตั้งใช้งานอินเทอร์เฟซสาธารณะใหม่ด้วย เพื่อรักษาความเข้ากันได้ ขณะที่การทำงานในอินเทอร์เฟซดำเนินต่อไป

AGP 9.0 จะใช้อินเทอร์เฟซ DSL ใหม่ของเราเท่านั้น และการใช้งานได้เปลี่ยนไปเป็นประเภทใหม่ที่ซ่อนไว้อย่างสมบูรณ์ การเปลี่ยนแปลงนี้ ยังเป็นการนำสิทธิ์เข้าถึง API ของตัวแปรเวอร์ชันเก่าที่เลิกใช้งานแล้วออกด้วย

หากต้องการอัปเดตเป็น AGP 9.0 คุณอาจต้องดำเนินการต่อไปนี้

  • ตรวจสอบว่าโปรเจ็กต์ของคุณเข้ากันได้กับ Kotlin ในตัว: ปลั๊กอิน org.jetbrains.kotlin.android ไม่เข้ากันกับ DSL ใหม่
  • เปลี่ยนโปรเจ็กต์ KMP เป็น ปลั๊กอินไลบรารี Android Gradle สำหรับ KMP: การใช้ปลั๊กอิน org.jetbrains.kotlin.multiplatform ใน Gradle โปรเจ็กต์ย่อยเดียวกันกับปลั๊กอิน com.android.library และ com.android.application ไม่สามารถใช้ร่วมกับ DSL ใหม่ได้

  • อัปเดตไฟล์บิลด์: แม้ว่าการเปลี่ยนแปลงอินเทอร์เฟซจะมุ่งเน้นให้ DSL มีความคล้ายคลึงกันมากที่สุด แต่อาจมีการเปลี่ยนแปลงเล็กๆ น้อยๆ

  • อัปเดตตรรกะการสร้างที่กำหนดเองเพื่ออ้างอิง DSL และ API ใหม่ แทนที่การอ้างอิง DSL ภายในด้วยอินเทอร์เฟซ DSL สาธารณะ ในกรณีส่วนใหญ่ การแทนที่จะเป็นการแทนที่แบบ 1 ต่อ 1 แทนที่การใช้ applicationVariants และ API ที่คล้ายกันด้วย androidComponents API ใหม่ ซึ่งอาจซับซ้อนกว่า เนื่องจาก androidComponents API ออกแบบมาให้มีความเสถียรมากขึ้นเพื่อให้ปลั๊กอินใช้งานร่วมกันได้นานขึ้น ดูตัวอย่างได้ที่ สูตร Gradle

  • อัปเดตปลั๊กอินของบุคคลที่สาม: ปลั๊กอินของบุคคลที่สามบางรายการอาจยังคงต้องพึ่งพาอินเทอร์เฟซหรือ API ที่ ไม่ได้เปิดเผยอีกต่อไป ย้ายข้อมูลไปยังปลั๊กอินเวอร์ชันที่เข้ากันได้ กับ AGP 9.0

การเปลี่ยนไปใช้อินเทอร์เฟซ DSL ใหม่จะป้องกันไม่ให้ปลั๊กอินและสคริปต์บิลด์ Gradle ใช้ API ที่เลิกใช้งานแล้วต่างๆ ซึ่งรวมถึง

API ที่เลิกใช้งานแล้วในบล็อก android การทำงาน การแทนที่
applicationVariants,
libraryVariants,
testVariants และ
unitTestVariants
จุดขยายสำหรับปลั๊กอินเพื่อเพิ่มฟังก์ชันการทำงานใหม่ๆ ให้กับ AGP แทนที่ด้วย androidComponents.onVariants API เช่น
androidComponents {
    onVariants() { variant ->
        variant.signingConfig
            .enableV1Signing.set(false)
    }
}
API ก่อนหน้าบางรายการอาจไม่มี API ใหม่มาแทนที่โดยตรง ยื่นปัญหาหากมี Use Case ที่ API ตัวแปรใหม่ไม่ครอบคลุม
variantFilter อนุญาตให้ปิดใช้ตัวแปรที่เลือก แทนที่ด้วย androidComponents.beforeVariants API เช่น
androidComponents {
    beforeVariants(
        selector()
            .withBuildType("debug")
            .withFlavor("color", "blue")
    ) { variantBuilder ->
        variantBuilder.enable = false
    }
  }
deviceProvider และ
testServer
การลงทะเบียนสภาพแวดล้อมการทดสอบที่กำหนดเองเพื่อเรียกใช้การทดสอบกับ อุปกรณ์และโปรแกรมจำลอง Android เปลี่ยนไปใช้อุปกรณ์ที่มีการจัดการจาก Gradle
sdkDirectory,
ndkDirectory,
bootClasspath,
adbExecutable และ
adbExe
การใช้คอมโพเนนต์ต่างๆ ของ Android SDK สำหรับงานที่กำหนดเอง เปลี่ยนไปใช้ androidComponents.sdkComponents
registerArtifactType,
registerBuildTypeSourceProvider,
registerProductFlavorSourceProvider,
registerJavaArtifact,
registerMultiFlavorSourceProvider และ
wrapJavaSourceSet
ฟังก์ชันที่เลิกใช้งานแล้วส่วนใหญ่เกี่ยวข้องกับการจัดการแหล่งที่มาที่สร้างขึ้นใน Android Studio ซึ่งหยุดทำงานใน AGP 7.2.0 ไม่มี API ใดที่จะมาแทนที่ API เหล่านี้ได้โดยตรง

หากอัปเดตเป็น AGP 9.0 และเห็นข้อความแสดงข้อผิดพลาดต่อไปนี้ แสดงว่า โปรเจ็กต์ของคุณยังอ้างอิงประเภทเก่าบางประเภทอยู่

java.lang.ClassCastException: class com.android.build.gradle.internal.dsl.ApplicationExtensionImpl$AgpDecorated_Decorated
cannot be cast to class com.android.build.gradle.BaseExtension

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

android.newDsl=false

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

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

หากพบว่า DSL หรือ Variant API ใหม่ไม่มีความสามารถหรือฟีเจอร์บางอย่าง โปรดรายงานปัญหาโดยเร็วที่สุด

Kotlin ในตัว

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

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

Kotlin ในตัวใน AGP 9.0 รองรับ IDE ของ Android Studio อย่างเต็มรูปแบบสำหรับ test-fixtures หากต้องการลองใช้ ให้ใช้ AGP 9.0.0-alpha07 ขึ้นไป

คุณเลือกไม่ใช้ Kotlin ในตัวได้โดยการตั้งค่า android.builtInKotlin=false

หากคุณเลือกไม่ใช้ Kotlin ในตัวและยังต้องใช้ปลั๊กอิน 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.resvalues เปิดใช้ resValues ในโปรเจ็กต์ย่อยทั้งหมด truefalse เปิดใช้ resValues ในโปรเจ็กต์ย่อยที่ต้องการเท่านั้น โดยตั้งค่าต่อไปนี้ในไฟล์บิลด์ Gradle ของโปรเจ็กต์เหล่านั้น
android {
  buildFeatures {
    resValues = true
  }
}
android.defaults.buildfeatures.shaders เปิดใช้ การคอมไพล์เชเดอร์ ในโปรเจ็กต์ย่อยทั้งหมด truefalse เปิดใช้การคอมไพล์ Shader ในโปรเจ็กต์ย่อยที่มี Shader เท่านั้นที่จะคอมไพล์โดยการตั้งค่าต่อไปนี้ในไฟล์บิลด์ Gradle ของโปรเจ็กต์เหล่านั้น
android {
  buildFeatures {
    shaders = true
  }
}
android.r8.proguardAndroidTxt.disallowed ใน AGP 9.0 getDefaultProguardFile() จะรองรับเฉพาะ proguard-android-optimize.txt เท่านั้น ไม่รองรับ proguard-android.txt ทั้งนี้เพื่อป้องกันการใช้­dontoptimizeโดยไม่ตั้งใจ ซึ่งรวมอยู่ในproguard-android.txt falsetrue คุณระบุ ­dontoptimize อย่างชัดเจนใน proguardFile ที่กำหนดเองได้หากต้องการหลีกเลี่ยงการเพิ่มประสิทธิภาพควบคู่ไปกับการใช้ proguard-android-optimize.txt โปรดนำแฟล็ก ­dontoptimize ออกจากไฟล์นี้หากเป็นไปได้ เนื่องจากจะลดประโยชน์ของการเพิ่มประสิทธิภาพ R8 หากไม่ต้องการ ให้เลือกไม่ใช้โดยตั้งค่า android.r8.globalOptionsInConsumerRules.disallowed=false
android.r8.globalOptionsInConsumerRules.disallowed ตั้งแต่ AGP 9.0 การเผยแพร่ไลบรารี Android และโมดูลฟีเจอร์จะล้มเหลวหากไฟล์ keep ของผู้ใช้มีกำหนดค่า Proguard ที่มีปัญหา ไฟล์ที่ผู้ใช้เก็บไว้ซึ่งมีตัวเลือกส่วนกลาง เช่น ­dontoptimize หรือ ­dontobfuscate ควรใช้ในโมดูลแอปพลิเคชันเท่านั้น และอาจลดประโยชน์จากการเพิ่มประสิทธิภาพสำหรับผู้ใช้ไลบรารี การคอมไพล์โมดูลแอป Android จะไม่สนใจตัวเลือกส่วนกลางดังกล่าวโดยอัตโนมัติหากฝังอยู่ในทรัพยากร Dependency ที่คอมไพล์ไว้ล่วงหน้า (JAR หรือ AAR) คุณจะดูได้ว่าเหตุการณ์นี้เกิดขึ้นเมื่อใดโดยตรวจสอบ configuration.txt (โดยปกติจะอยู่ในเส้นทางเช่น <app_module>/build/outputs/mapping/<build_variant>/configuration.txt) เพื่อดูความคิดเห็น เช่น # REMOVED CONSUMER RULE: ­dontoptimize falsetrue ไลบรารีที่เผยแพร่แล้วควรนำกฎที่ไม่เข้ากันออก ไลบรารีภายในควรย้ายกฎที่ไม่เข้ากันแต่จำเป็นไปยัง proguardFile ในโมดูลแอปแทน เลือกไม่ใช้โดยการตั้งค่า android.r8.globalOptionsInConsumerRules.disallowed=false เมื่อไฟล์ Keep สำหรับผู้บริโภคทั้งหมดของคุณเข้ากันได้แล้ว ให้นำการเลือกไม่ใช้ดังกล่าวออก

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

ปลั๊กอิน 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 จะนำสิ่งต่อไปนี้ออก

API ที่นำออก

ปลั๊กอิน 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
  }
}

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

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

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

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

ปัญหาที่แก้ไขแล้ว

ปลั๊กอิน Android Gradle 9.0.0-alpha10

ปัญหาที่แก้ไขแล้ว
ปลั๊กอิน Android Gradle
extractNativeLibs และ useEmbeddedDex ไม่ควรมาจากไฟล์ Manifest
คำเตือนจาก R8 ใน AGP 9.0.0-alpha09
Lint
Kotlin ในตัวจะไม่เพิ่ม .kotlin_module ลงใน META-INF
Classpath ของ Lint มีคลาสที่ซ้ำกันในเวอร์ชันต่างๆ
การลบล้างวิธีแก้ปัญหาทรัพยากรส่วนตัวใช้ไม่ได้ (tools:override = "true")

ปลั๊กอิน Android Gradle 9.0.0-alpha09

ปัญหาที่แก้ไขแล้ว
ปลั๊กอิน Android Gradle
ปลั๊กอิน `legacy-kapt` จะข้ามการประมวลผลคำอธิบายประกอบ ซึ่งต่างจาก `kotlin-kapt`
compileSdkSpec.minorApiLevel ใช้กับ SettingsExtension ไม่ได้
[fused lib - public] ไลบรารีที่ผสานที่สร้างขึ้นไม่มีแหล่งที่มา

ปลั๊กอิน Android Gradle 9.0.0-alpha08

ปัญหาที่แก้ไขแล้ว
ไม่มีปัญหาที่เปิดเผยต่อสาธารณะที่ได้รับการทำเครื่องหมายว่าแก้ไขแล้วใน AGP 9.0.0-alpha08

ปลั๊กอิน Android Gradle 9.0.0-alpha07

ปัญหาที่แก้ไขแล้ว
ปลั๊กอิน Android Gradle
บิลด์จะล้มเหลวหากมีงานสร้างโค้ด
เมื่อใช้ `android.builtInKotlin=false` และ `android.newDsl=false` และ `android.enableLegacyVariantApi=false` การใช้ปลั๊กอิน `kotlin-android` จะล้มเหลวพร้อมข้อความ "API 'applicationVariants' ล้าสมัยแล้ว"
Kotlin ในตัวไม่สามารถแก้ปัญหา kotlin-stdlib ที่ไม่มีการกำหนดเวอร์ชันเมื่อ kotlin.stdlib.default.dependency=false
DexData เปิดไฟล์โดยไม่ปิด ทำให้ไม่สามารถล้างข้อมูลได้
AndroidSourceDirectorySet ควรหยุดขยาย PatternFilterable ใน AGP 9.0
ข้อผิดพลาดในการทดสอบในโมดูลทดสอบเท่านั้น
ข้อผิดพลาดที่ไม่ถูกต้องเมื่อใช้ตัวรับบริบทในฟิกเจอร์การทดสอบ
ข้อผิดพลาดของ IDE ไม่ถูกต้องสำหรับโค้ด Kotlin ใน testFixtures

ปลั๊กอิน Android Gradle 9.0.0-alpha06

ปัญหาที่แก้ไขแล้ว
ปลั๊กอิน Android Gradle
DSL การเพิ่มประสิทธิภาพใหม่จะไม่สร้าง configuration.txt โดยค่าเริ่มต้น
AGP 8.13.0 ยืนยันกราฟการนำทางในโมดูลไม่สำเร็จ
AGP ใช้ Gradle API ที่เลิกใช้งานแล้ว: สัญกรณ์แบบหลายสตริง
เตือนผู้ใช้ที่พยายามใช้ไลบรารี Multidex เดิมที่มี minSdkVersion >=21
Lint
Lint ChecksSdkIntAtLeast Check does not check if the annotated value is correct

ปลั๊กอิน Android Gradle 9.0.0-alpha05

ปัญหาที่แก้ไขแล้ว
ปลั๊กอิน Android Gradle
android.proguard.failOnMissingFiles ไม่ทำงานสำหรับ consumerProguardFiles
อัปเดตการอ้างอิงปลั๊กอิน Kotlin Gradle เป็น 2.2.10
สร้าง KotlinJvmAndroidCompilation โดยใช้ KGP API
ใช้โหมด API ที่ชัดเจนของ Kotlin กับแหล่งที่มาของการทดสอบ
Lint
Lint แสดงคำเตือน "ล้างแคช K2 ไม่ได้"

ปลั๊กอิน Android Gradle 9.0.0-alpha04

ปัญหาที่แก้ไขแล้ว
ปลั๊กอิน Android Gradle
เปลี่ยนเวอร์ชัน Java ต้นทาง/เป้าหมายเริ่มต้นจาก Java 8 เป็น Java 11 ใน AGP 9.0
เปลี่ยนค่าเริ่มต้นของ android.useAndroidX เป็น true
ข้อยกเว้นที่ดีขึ้นเมื่อใช้ปลั๊กอิน KAPT กับ Kotlin ในตัว
Lint
Lint แสดงคำเตือน "ล้างแคช K2 ไม่ได้"

ปลั๊กอิน Android Gradle 9.0.0-alpha03

ปัญหาที่แก้ไขแล้ว
ปลั๊กอิน Android Gradle
เมื่อเปิดใช้ `isIncludeAndroidResources` `process{Variant}UnitTestManifest` จะผสานการใช้งาน tools:overrideLibrary ใน AGP 8.12.0 ไม่สำเร็จ
AGP ทำให้เกิดคำเตือนการเลิกใช้งานใน Gradle สำหรับงานทดสอบ JVM
DependencyReportTask ใช้ร่วมกับแคชการกำหนดค่าไม่ได้
Lint
ข้อบกพร่อง: การนำทรัพยากรที่ไม่ได้ใช้ออกไม่ได้นำการแปลของทรัพยากรเหล่านั้นออกด้วย และไม่ได้ถามเกี่ยวกับการแปลด้วย

ปลั๊กอิน Android Gradle 9.0.0-alpha02

ปัญหาที่แก้ไขแล้ว
ปลั๊กอิน Android Gradle
สร้างไม่สำเร็จเมื่อไม่มีไฟล์ Proguard
remove buildconfig defaults gradle.properties flags
เปลี่ยนค่าเริ่มต้นของ targetSdk ของแอปให้เป็นไปตาม compileSdk แทนที่จะเป็น minSdk

ปลั๊กอิน Android Gradle 9.0.0-alpha01

ปัญหาที่แก้ไขแล้ว
ปลั๊กอิน Android Gradle
นำ AndroidSourceSet.jni ที่เลิกใช้งานแล้วออกใน AGP 9.0
นำ Installation.installOptions() ออกใน AGP 9.0
นำ BuildType.isRenderscriptDebuggable ออกใน AGP 9.0
นำ android.defaults.buildfeatures.renderscript ออก
`com.android.kotlin.multiplatform.library` ขัดข้องเมื่อใช้อุปกรณ์ที่มีการจัดการจาก Gradle
นำค่าเริ่มต้น `android.defaults.buildfeatures.aidl` ออกจากแฟล็ก gradle.properties