หน้านี้มีบันทึกประจำรุ่นสำหรับการเปิดตัว 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
ไม่ได้อีกต่อไป
|
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.shaders |
เปิดใช้ การคอมไพล์เชเดอร์ ในโปรเจ็กต์ย่อยทั้งหมด | true → false |
เปิดใช้การคอมไพล์ Shader ในโปรเจ็กต์ย่อยที่มี Shader เท่านั้นที่จะคอมไพล์โดยการตั้งค่าต่อไปนี้ในไฟล์บิลด์ Gradle ของโปรเจ็กต์เหล่านั้น
android { buildFeatures { shaders = true } } |
ฟีเจอร์ที่นำออกแล้ว
ปลั๊กอิน 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
เนื่องจากใช้งานไม่ได้ComponentBuilder.enabled
โดยจะแทนที่ด้วยComponentBuilder.enable
DependencyVariantSelection
โดยจะแทนที่ด้วยDependencySelection
ซึ่งแสดงเป็นkotlin.android
Installation.installOptions(String)
โดยจะแทนที่ด้วย พร็อพเพอร์ตี้ที่เปลี่ยนแปลงได้ของInstallation.installOptions
VariantBuilder.targetSdk
และtargetSdkPreview
เนื่องจากไม่มีความหมายในคลัง โปรดใช้GeneratesApkBuilder.targetSdk
หรือGeneratesApkBuilder.targetSdkPreview
แทนบล็อก
PostProcessing
ที่อยู่ในขั้นทดลองแต่ไม่เคยมีเสถียรภาพProductFlavor.setDimension
ซึ่งถูกแทนที่ด้วยพร็อพเพอร์ตี้dimension
LanguageSplitOptions
ซึ่งมีประโยชน์เฉพาะสำหรับ Google Play Instant ซึ่งเลิกใช้งานแล้วVariant.unitTest
เนื่องจากใช้กับปลั๊กอินcom.android.test
ไม่ได้unitTest
พร้อมใช้งานในประเภทย่อยของVariantBuilder
ที่ขยายHasUnitTest
VariantBuilder.enableUnitTest
เนื่องจากใช้กับปลั๊กอินcom.android.test
ไม่ได้enableUnitTest
พร้อมใช้งานในประเภทย่อยของVariantBuilder
ที่ขยายHasUnitTestBuilder
เราจะนำ
VariantBuilder.unitTestEnabled
ออกเพื่อใช้enableUnitTest
ที่มีชื่อ สอดคล้องกัน มากขึ้นในVariantBuilder
ประเภทย่อย ที่ขยายHasUnitTestBuilder
พร็อพเพอร์ตี้ 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 } } |
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 เสมอ และระบบได้นำการติดตั้งใช้งานก่อนหน้านี้ออกแล้ว |