หน้านี้มีบันทึกประจำรุ่นสำหรับการเปิดตัว 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) } } |
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
ไม่ได้อีกต่อไป
|
false → true |
คุณเลือกไม่รับได้โดยการตั้งค่า
android.newDsl=false เมื่อปลั๊กอินและตรรกะการบิลด์ทั้งหมดที่โปรเจ็กต์ของคุณใช้เข้ากันได้ ให้นำการเลือกไม่ใช้ออก |
android.builtInKotlin |
เปิดใช้การรองรับการคอมไพล์โค้ด Kotlin โดยตรงในปลั๊กอิน Android Gradle โดยไม่ต้องใช้ปลั๊กอิน org.jetbrains.kotlin.android
|
false → true |
ใช้ Kotlin ในตัวโดยนำการใช้ปลั๊กอิน org.jetbrains.kotlin.android ออกหากทำได้
หากไม่ต้องการ ให้เลือกไม่ใช้โดยตั้งค่า android.builtInKotlin=false
|
android.uniquePackageNames |
บังคับให้แต่ละไลบรารีมีชื่อแพ็กเกจที่แตกต่างกัน | false → true |
ระบุชื่อแพ็กเกจที่ไม่ซ้ำกันสำหรับไลบรารีทั้งหมดภายในโปรเจ็กต์ หากทำไม่ได้ คุณสามารถปิดใช้ฟีเจอร์นี้ขณะย้ายข้อมูล |
android.dependency.useConstraints |
ควบคุมการใช้ข้อจำกัดของ Dependency ระหว่างการกำหนดค่า ค่าเริ่มต้นใน AGP 9.0 คือ false ซึ่งใช้ข้อจำกัดในการทดสอบอุปกรณ์แอปพลิเคชัน (AndroidTest) เท่านั้น
การตั้งค่านี้เป็น true จะเปลี่ยนกลับไปใช้ลักษณะการทำงานของเวอร์ชัน 8.13
|
true → false |
อย่าใช้ข้อจํากัดของ Dependency ทุกที่เว้นแต่จะจําเป็น การยอมรับค่าเริ่มต้นใหม่ของฟีเจอร์นี้ยังช่วยให้การเพิ่มประสิทธิภาพใน กระบวนการนำเข้าโปรเจ็กต์ ซึ่งจะช่วยลดเวลาในการนำเข้าสำหรับการสร้าง ที่มีโปรเจ็กต์ย่อยของไลบรารี Android จำนวนมาก |
aandroid.enableAppCompileTimeRClass |
คอมไพล์โค้ดในแอปพลิเคชันกับคลาส R ที่ไม่ใช่เวอร์ชันสุดท้าย ซึ่งจะทำให้
การคอมไพล์แอปพลิเคชันสอดคล้องกับการคอมไพล์ไลบรารี ซึ่งจะช่วยปรับปรุงการเพิ่มขึ้นและปูทางสำหรับการเพิ่มประสิทธิภาพในอนาคต ให้กับขั้นตอนการประมวลผลทรัพยากร |
false → true |
โปรเจ็กต์จำนวนมากสามารถใช้ลักษณะการทำงานใหม่ได้โดยไม่ต้องเปลี่ยนแปลงแหล่งที่มา หากมีการใช้ฟิลด์คลาส R ในที่ใดก็ตามที่ต้องใช้ค่าคงที่ เช่น กรณีของคำสั่ง switch ให้ทำการปรับโครงสร้างเพื่อใช้คำสั่ง if ที่เชื่อมโยงกัน |
android.sdk.defaultTargetSdkToCompileSdkIfUnset |
ใช้เวอร์ชัน SDK ที่คอมไพล์เป็นค่าเริ่มต้นสำหรับเวอร์ชัน SDK เป้าหมายในแอปและการทดสอบ
ก่อนการเปลี่ยนแปลงนี้ SDK เวอร์ชันเป้าหมายจะตั้งค่าเริ่มต้นเป็น SDK ขั้นต่ำ เวอร์ชัน |
false → true |
ระบุเวอร์ชัน SDK เป้าหมายอย่างชัดเจนสำหรับแอปและการทดสอบ |
android.onlyEnableUnitTestForTheTestedBuildType |
สร้างเฉพาะคอมโพเนนต์การทดสอบหน่วยสำหรับประเภทบิลด์ที่ทดสอบ ในโปรเจ็กต์เริ่มต้น การดำเนินการนี้จะส่งผลให้มีการทดสอบหน่วยเดียวสำหรับการแก้ไขข้อบกพร่อง ซึ่งลักษณะการทำงานก่อนหน้านี้คือการทดสอบหน่วยที่ทำงานสำหรับการแก้ไขข้อบกพร่องหรือ การเผยแพร่ |
false → true |
หากโปรเจ็กต์ไม่จำเป็นต้องเรียกใช้การทดสอบทั้งสำหรับการแก้ไขข้อบกพร่องและเวอร์ชันที่เผยแพร่ คุณก็ไม่ต้องเปลี่ยนแปลงใดๆ |
android.proguard.failOnMissingFiles |
สร้างไม่สำเร็จพร้อมข้อผิดพลาดหากไม่มีไฟล์ที่ระบุใน AGP DSL อยู่ในดิสก์ ก่อนการเปลี่ยนแปลงนี้ การสะกดชื่อไฟล์ผิด จะส่งผลให้ระบบไม่สนใจไฟล์โดยไม่มีการแจ้งเตือน | false → true |
นำการประกาศไฟล์ ProGuard ที่ไม่ถูกต้องออก |
android.r8.optimizedResourceShrinking |
ช่วยให้ R8 เก็บทรัพยากร Android น้อยลงได้โดยพิจารณา คลาสและทรัพยากร Android ร่วมกัน | false → true |
หากกฎการเก็บรักษาของโปรเจ็กต์เสร็จสมบูรณ์แล้ว คุณก็ไม่ต้องเปลี่ยนแปลงใดๆ |
android.r8.strictFullModeForKeepRules |
ช่วยให้ R8 เก็บข้อมูลน้อยลงโดยไม่ต้องเก็บตัวสร้างเริ่มต้นโดยนัย
เมื่อมีการเก็บคลาส
กล่าวคือ -keep class A ไม่ได้หมายความว่า
-keep class A { <init>(); } |
false → true |
หากกฎการเก็บรักษาของโปรเจ็กต์เสร็จสมบูรณ์แล้ว คุณก็ไม่ต้องเปลี่ยนแปลงใดๆ
แทนที่ -keep class A
ด้วย
-keep class A { <init>(); }
ในกฎการเก็บของโปรเจ็กต์สำหรับกรณีที่คุณต้องการเก็บตัวสร้างเริ่มต้น
|
android.defaults.buildfeatures.resvalues |
เปิดใช้
resValues
ในโปรเจ็กต์ย่อยทั้งหมด
|
true → false |
เปิดใช้ resValues ในโปรเจ็กต์ย่อยที่ต้องการเท่านั้น
โดยตั้งค่าต่อไปนี้ในไฟล์บิลด์ Gradle ของโปรเจ็กต์เหล่านั้น
android { buildFeatures { resValues = true } } |
android.defaults.buildfeatures.shaders |
เปิดใช้ การคอมไพล์เชเดอร์ ในโปรเจ็กต์ย่อยทั้งหมด | true → false |
เปิดใช้การคอมไพล์ 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
|
false → true |
คุณระบุ 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
|
false → true |
ไลบรารีที่เผยแพร่แล้วควรนำกฎที่ไม่เข้ากันออก ไลบรารีภายในควรย้ายกฎที่ไม่เข้ากันแต่จำเป็นไปยัง proguardFile ในโมดูลแอปแทน เลือกไม่ใช้โดยการตั้งค่า android.r8.globalOptionsInConsumerRules.disallowed=false เมื่อไฟล์ Keep สำหรับผู้บริโภคทั้งหมดของคุณเข้ากันได้แล้ว ให้นำการเลือกไม่ใช้ดังกล่าวออก
|
ฟีเจอร์ที่นำออกแล้ว
ปลั๊กอิน Android Gradle 9.0 จะนำฟังก์ชันการทำงานต่อไปนี้ออก
- การรองรับแอป Wear OS ที่ฝัง
AGP 9.0 จะนำการรองรับการฝังแอป Wear OS ออก ซึ่ง Play ไม่รองรับอีกต่อไป ซึ่งรวมถึงการนำwearApp
การกำหนดค่าและAndroidSourceSet.wearAppConfigurationName
DSL ออก ดูวิธีเผยแพร่แอปไปยัง Wear OS ได้ที่หัวข้อเผยแพร่ไปยัง Wear OS androidDependencies
และsourceSets
รายงานงาน
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 จะนำสิ่งต่อไปนี้ออก
AndroidSourceSet.jni
เนื่องจากใช้งานไม่ได้AndroidSourceSet.wearAppConfigurationName
เนื่องจากเกี่ยวข้องกับ การนำการรองรับแอป Wear OS แบบฝังออกBuildType.isRenderscriptDebuggable
เนื่องจากใช้งานไม่ได้DependencyVariantSelection
โดยจะแทนที่ด้วยDependencySelection
ซึ่งแสดงเป็นkotlin.android.localDependencySelection
Installation.installOptions(String)
โดยจะแทนที่ด้วย พร็อพเพอร์ตี้ที่เปลี่ยนแปลงได้ของInstallation.installOptions
บล็อก
PostProcessing
ที่อยู่ในขั้นทดลองแต่ไม่เคยมีเสถียรภาพProductFlavor.setDimension
ซึ่งถูกแทนที่ด้วยพร็อพเพอร์ตี้dimension
LanguageSplitOptions
ซึ่งมีประโยชน์เฉพาะสำหรับ Google Play Instant ซึ่งเลิกใช้งานแล้ว
API ที่นำออก
ปลั๊กอิน Android Gradle 9.0 จะนำสิ่งต่อไปนี้ออก
AndroidComponentsExtension.finalizeDSl
โดยจะแทนที่ด้วยfinalizeDsl
Component.transformClassesWith
โดยจะแทนที่ด้วยInstrumentation.transformClassesWith
Component.setAsmFramesComputationMode
โดยจะแทนที่ด้วยInstrumentation.setAsmFramesComputationMode
ComponentBuilder.enabled
โดยจะแทนที่ด้วยComponentBuilder.enable
DependenciesInfoBuilder.includedInApk
เปลี่ยนเป็นincludeInApk
DependenciesInfoBuilder.includedInBundle
เปลี่ยนเป็นincludeInBundle
GeneratesApk.targetSdkVersion
เปลี่ยนเป็นtargetSdk
Variant.minSdkVersion
เปลี่ยนเป็นminSdk
Variant.maxSdkVersion
เปลี่ยนเป็นmaxSdk
Variant.targetSdkVersion
เปลี่ยนเป็นtargetSdk
Variant.unitTest
เนื่องจากใช้กับปลั๊กอินcom.android.test
ไม่ได้unitTest
พร้อมใช้งานในประเภทย่อยของVariantBuilder
ที่ขยายHasUnitTest
VariantBuilder.targetSdk
และtargetSdkPreview
เนื่องจากไม่มีความหมายในคลัง โปรดใช้GeneratesApkBuilder.targetSdk
หรือGeneratesApkBuilder.targetSdkPreview
แทนVariantBuilder.enableUnitTest
เนื่องจากใช้กับปลั๊กอินcom.android.test
ไม่ได้enableUnitTest
พร้อมใช้งานในประเภทย่อยของVariantBuilder
ที่ขยายHasUnitTestBuilder
เราจะนำ
VariantBuilder.unitTestEnabled
ออกเพื่อใช้enableUnitTest
ที่มีชื่อ สอดคล้องกัน มากขึ้นในVariantBuilder
ประเภทย่อย ที่ขยายHasUnitTestBuilder
VariantOutput.enable
เปลี่ยนเป็นenabled
FeaturePlugin
และFeatureExtension
ที่เลิกใช้งานและปิดใช้แล้วBaseExtension.registerTransform
API ที่เลิกใช้งานและปิดใช้แล้ว ซึ่ง ยังคงมีไว้เพื่ออนุญาตให้คอมไพล์กับ AGP เวอร์ชันล่าสุดขณะ กำหนดเป้าหมายการทำงานบน AGP 4.2 หรือต่ำกว่า
พร็อพเพอร์ตี้ Gradle ที่นำออก
เดิมทีเราได้เพิ่มพร็อพเพอร์ตี้ Gradle ต่อไปนี้เป็นวิธีปิดใช้ฟีเจอร์ที่เปิดใช้โดยค่าเริ่มต้นทั่วโลก
ฟีเจอร์เหล่านี้ปิดใช้งานอยู่โดยค่าเริ่มต้นตั้งแต่ AGP 8.0 หรือต่ำกว่า เปิดใช้ ฟีเจอร์เหล่านี้ในโปรเจ็กต์ย่อยที่ใช้ฟีเจอร์เหล่านี้เท่านั้นเพื่อการสร้างที่มีประสิทธิภาพมากขึ้น
พร็อพเพอร์ตี้ | การทำงาน | การแทนที่ |
---|---|---|
android.defaults.buildfeatures.aidl |
เปิดใช้การ คอมไพเลชัน AIDLในโปรเจ็กต์ย่อยทั้งหมด |
เปิดใช้การคอมไพล์ AIDL ในโปรเจ็กต์ย่อยที่มีแหล่งที่มาของ AIDL เท่านั้น
โดยการตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ในไฟล์บิลด์ Gradle ของโปรเจ็กต์เหล่านั้น
android { buildFeatures { aidl = true } } |
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 |
|
|||
Lint |
|
ปลั๊กอิน Android Gradle 9.0.0-alpha09
ปัญหาที่แก้ไขแล้ว | ||||
---|---|---|---|---|
ปลั๊กอิน Android Gradle |
|
ปลั๊กอิน Android Gradle 9.0.0-alpha08
ปัญหาที่แก้ไขแล้ว | |
---|---|
ไม่มีปัญหาที่เปิดเผยต่อสาธารณะที่ได้รับการทำเครื่องหมายว่าแก้ไขแล้วใน AGP 9.0.0-alpha08 |
ปลั๊กอิน Android Gradle 9.0.0-alpha07
ปัญหาที่แก้ไขแล้ว | |||||||||
---|---|---|---|---|---|---|---|---|---|
ปลั๊กอิน Android Gradle |
|
ปลั๊กอิน Android Gradle 9.0.0-alpha06
ปัญหาที่แก้ไขแล้ว | |||||
---|---|---|---|---|---|
ปลั๊กอิน Android Gradle |
|
||||
Lint |
|
ปลั๊กอิน Android Gradle 9.0.0-alpha05
ปัญหาที่แก้ไขแล้ว | |||||
---|---|---|---|---|---|
ปลั๊กอิน Android Gradle |
|
||||
Lint |
|
ปลั๊กอิน Android Gradle 9.0.0-alpha04
ปัญหาที่แก้ไขแล้ว | ||||
---|---|---|---|---|
ปลั๊กอิน Android Gradle |
|
|||
Lint |
|
ปลั๊กอิน Android Gradle 9.0.0-alpha03
ปัญหาที่แก้ไขแล้ว | ||||
---|---|---|---|---|
ปลั๊กอิน Android Gradle |
|
|||
Lint |
|
ปลั๊กอิน Android Gradle 9.0.0-alpha02
ปัญหาที่แก้ไขแล้ว | ||||
---|---|---|---|---|
ปลั๊กอิน Android Gradle |
|
ปลั๊กอิน Android Gradle 9.0.0-alpha01
ปัญหาที่แก้ไขแล้ว | |||||||
---|---|---|---|---|---|---|---|
ปลั๊กอิน Android Gradle |
|