หน้านี้มีบันทึกประจำรุ่นสำหรับการเปิดตัว Android Gradle Plugin (AGP) เวอร์ชันตัวอย่าง
ปลั๊กอิน Android Gradle 9.0
ปลั๊กอิน Android Gradle 9.0 เป็นรุ่นหลักใหม่ของ AGP และมีการเปลี่ยนแปลง API และ ลักษณะการทำงาน
หากต้องการอัปเดตเป็นปลั๊กอิน Android Gradle 9.0.0-rc02 ให้ใช้ผู้ช่วยอัปเกรดปลั๊กอิน Android Gradle ใน Android Studio Panda | 2025.3.1
ผู้ช่วยการอัปเกรด AGP จะช่วยรักษาลักษณะการทำงานที่มีอยู่เมื่ออัปเกรดโปรเจ็กต์ในกรณีที่เหมาะสม ซึ่งจะช่วยให้คุณอัปเกรดโปรเจ็กต์เพื่อใช้ AGP 9.0 ได้ แม้ว่าคุณจะยังไม่พร้อมที่จะใช้ค่าเริ่มต้นใหม่ทั้งหมดใน AGP 9.0 ก็ตาม
ความเข้ากันได้
ระดับ API ของ Android สูงสุดที่ปลั๊กอิน Android Gradle 9.0.0-rc02 รองรับคือ API ระดับ 36
ปลั๊กอิน Android Gradle 9.0.0-rc02 ต้องใช้ Gradle 9.0.0
| เวอร์ชันขั้นต่ำ | เวอร์ชันเริ่มต้น | หมายเหตุ | |
|---|---|---|---|
| Gradle | 9.1.0 | 9.1.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 ที่คล้ายกันด้วยandroidComponentsAPI ใหม่ ซึ่งอาจซับซ้อนกว่าเนื่องจากandroidComponentsAPI ได้รับการออกแบบมาให้มีความเสถียรมากขึ้นเพื่อให้ปลั๊กอินใช้งานร่วมกันได้นานขึ้น ดูตัวอย่างได้ที่ สูตร 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 เหล่านี้โดยตรง |
dexOptions
|
การตั้งค่าที่ล้าสมัยซึ่งเกี่ยวข้องกับdxเครื่องมือที่ถูกแทนที่ด้วยd8 การตั้งค่าทั้งหมด
ไม่มีผลตั้งแต่ปลั๊กอิน Android Gradle 7.0
|
ไม่มีการแทนที่โดยตรง |
generatePureSplits
|
สร้างการแยกการกำหนดค่าสำหรับ Instant App | ตอนนี้ความสามารถในการแยกการกำหนดค่าได้รวมอยู่ใน App Bundle ของ Android แล้ว |
aidlPackagedList
|
ไฟล์ AIDL เพื่อจัดแพ็กเกจใน AAR เพื่อเปิดเผยเป็น API สำหรับไลบรารี และแอปที่ขึ้นอยู่กับไลบรารีนี้ |
โดยยังคงแสดงใน
LibraryExtension
แต่จะไม่แสดงในส่วนขยายประเภทอื่นๆ
|
หากอัปเดตเป็น 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 ในตัวและเปิดใช้โดยค่าเริ่มต้น
ซึ่งหมายความว่าคุณไม่จำเป็นต้องใช้ปลั๊กอิน
org.jetbrains.kotlin.android (หรือ kotlin-android) ในไฟล์บิลด์อีกต่อไป
เพื่อคอมไพล์ไฟล์ต้นฉบับ Kotlin
ซึ่งจะช่วยลดความซับซ้อนของการผสานรวม Kotlin กับ AGP หลีกเลี่ยงการใช้ API ที่เลิกใช้งานแล้ว และปรับปรุงประสิทธิภาพในบางกรณี
ดังนั้น เมื่ออัปเกรดโปรเจ็กต์เป็น AGP 9.0 คุณจะต้องย้ายไปใช้ Kotlin ในตัวหรือเลือกไม่ใช้ด้วย
นอกจากนี้ คุณยังปิดใช้การรองรับ Kotlin ในตัวแบบเลือกสำหรับโปรเจ็กต์ย่อย Gradle ที่ไม่มีแหล่งที่มาของ Kotlin ได้ด้วย
การขึ้นอยู่กับปลั๊กอิน Kotlin สำหรับ Gradle ในรันไทม์
ตอนนี้ปลั๊กอิน Android Gradle 9.0 มีทรัพยากร Dependency รันไทม์ในปลั๊กอิน Kotlin Gradle (KGP) 2.2.10 เพื่อให้การรองรับ Kotlin ในตัว ซึ่งหมายความว่าคุณไม่ต้องประกาศเวอร์ชัน KGP อีกต่อไป และหากใช้ KGP เวอร์ชันต่ำกว่า 2.2.10 Gradle จะอัปเกรดเวอร์ชัน KGP เป็น 2.2.10 โดยอัตโนมัติ ในทำนองเดียวกัน หากคุณใช้ KSP เวอร์ชันต่ำกว่า 2.2.10-2.0.2 AGP จะอัปเกรดเป็น 2.2.10-2.0.2 เพื่อให้ตรงกับ KGP เวอร์ชัน
อัปเกรดเป็น KGP เวอร์ชันที่สูงกว่า
หากต้องการใช้ KGP หรือ KSP เวอร์ชันที่สูงกว่า ให้เพิ่มข้อมูลต่อไปนี้ลงในไฟล์ build ระดับบนสุด
buildscript {
dependencies {
// For KGP
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:KGP_VERSION")
// For KSP
classpath("com.google.devtoolsksp:symbol-processing-gradle-plugin:KSP_VERSION")
}
}
ดาวน์เกรดเป็น KGP เวอร์ชันที่ต่ำกว่า
คุณจะดาวน์เกรดเวอร์ชัน KGP ได้ก็ต่อเมื่อเลือกไม่ใช้ Kotlin ในตัว เนื่องจาก AGP 9.0 จะเปิดใช้ Kotlin ในตัวโดยค่าเริ่มต้น และ Kotlin ในตัว ต้องใช้ KGP 2.2.10 ขึ้นไป
หากต้องการใช้ KGP หรือ KSP เวอร์ชันที่ต่ำกว่า ให้ประกาศเวอร์ชันนั้นในไฟล์บิลด์ระดับบนสุดโดยใช้การประกาศเวอร์ชันที่แน่นอน ดังนี้
buildscript {
dependencies {
// For KGP
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
version { strictly("KGP_VERSION") }
}
// For KSP
classpath("com.google.devtoolsksp:symbol-processing-gradle-plugin") {
version { strictly("KSP_VERSION") }
}
}
}
โปรดทราบว่าเวอร์ชัน KGP ขั้นต่ำที่คุณดาวน์เกรดได้คือ 2.0.0
การรองรับ IDE สำหรับการตั้งค่าการทดสอบ
AGP 9.0 รองรับ IDE ของ Android Studio อย่างเต็มรูปแบบสำหรับ การทดสอบฟิกเจอร์
ปลั๊กอิน Fused Library
Fused Library Plugin (ตัวอย่าง) ช่วยให้คุณเผยแพร่ไลบรารีหลายรายการเป็น Android Library AAR เดียวได้ ซึ่งจะช่วยให้ผู้ใช้ พึ่งพาอาร์ติแฟกต์ที่คุณเผยแพร่ได้ง่ายขึ้น
ดูข้อมูลเกี่ยวกับการเริ่มต้นใช้งานได้ที่เผยแพร่ไลบรารี Android หลายรายการเป็นรายการเดียวด้วย Fused Library
การเปลี่ยนแปลงลักษณะการทำงาน
ปลั๊กอิน 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. |
ใช้อินเทอร์เฟซ DSL ใหม่โดยไม่ต้องเปิดเผยการใช้งานเดิมของบล็อก android
นอกจากนี้ ยังหมายความว่าคุณจะเข้าถึง API ตัวแปรเดิม เช่น android.applicationVariants
ไม่ได้อีกต่อไป
|
false → true |
คุณเลือกไม่รับได้โดยการตั้งค่า
android.newDsl=falseเมื่อปลั๊กอินและตรรกะการบิลด์ทั้งหมดที่โปรเจ็กต์ใช้เข้ากันได้แล้ว ให้นำการเลือกไม่ใช้ออก |
android. |
เปิดใช้ Kotlin ในตัว | false → true |
ย้ายข้อมูลไปยัง Kotlin ในตัว หากทำได้ หรือ เลือกไม่ใช้ |
android. |
บังคับให้แต่ละไลบรารีมีชื่อแพ็กเกจที่แตกต่างกัน | false → true |
ระบุชื่อแพ็กเกจที่ไม่ซ้ำกันสำหรับไลบรารีทั้งหมดภายในโปรเจ็กต์ หากทำไม่ได้ คุณสามารถปิดใช้ฟีเจอร์นี้ขณะย้ายข้อมูล |
android. |
ใช้ทรัพยากร Dependency ของ androidx
โดยค่าเริ่มต้น
|
false → true |
ใช้ androidx
ทรัพยากร Dependency
|
android. |
เรียกใช้การทดสอบในอุปกรณ์ด้วยคลาส
androidx.test.runner.AndroidJUnitRunner
โดยค่าเริ่มต้น ซึ่งจะแทนที่ค่าเริ่มต้นของ
InstrumentationTestRunner
ที่เลิกใช้งานแล้วสำหรับ
android {
defaultConfig {
testInstrumentationRunner = "..."
}
} |
false → true |
ใช้
AndroidJUnitRunner
หรือระบุ testInstrumentationRunner ที่กำหนดเองอย่างชัดเจน
|
android. |
ควบคุมการใช้ข้อจำกัดของ Dependency ระหว่างการกำหนดค่า ค่าเริ่มต้นใน AGP 9.0 คือ false ซึ่งใช้ข้อจำกัดในการทดสอบอุปกรณ์แอปพลิเคชัน (AndroidTest) เท่านั้น
การตั้งค่านี้เป็น true จะเปลี่ยนกลับไปใช้ลักษณะการทำงานของเวอร์ชัน 8.13
|
true → false |
อย่าใช้ข้อจํากัดของ Dependency ในทุกที่ เว้นแต่คุณจะต้องการ การยอมรับค่าเริ่มต้นใหม่ของฟีเจอร์นี้ยังช่วยให้การเพิ่มประสิทธิภาพใน กระบวนการนำเข้าโปรเจ็กต์ ซึ่งจะช่วยลดเวลานำเข้าสำหรับการสร้าง ที่มีโปรเจ็กต์ย่อยของไลบรารี Android จำนวนมาก |
android. |
คอมไพล์โค้ดในแอปพลิเคชันกับคลาส R ที่ไม่ใช่เวอร์ชันสุดท้าย ซึ่งจะทำให้
การคอมไพล์แอปพลิเคชันสอดคล้องกับการคอมไพล์ไลบรารี ซึ่งจะช่วยปรับปรุงการเพิ่มขึ้นและปูทางสำหรับการเพิ่มประสิทธิภาพในอนาคต ให้กับขั้นตอนการประมวลผลทรัพยากร |
false → true |
โปรเจ็กต์จำนวนมากสามารถใช้ลักษณะการทำงานใหม่ได้โดยไม่ต้องเปลี่ยนแปลงแหล่งที่มา หากใช้ฟิลด์คลาส R ในที่ใดก็ตามที่ต้องใช้ค่าคงที่ เช่น เคสของคำสั่ง switch ให้ทำการรีแฟกเตอร์เพื่อใช้คำสั่ง if แบบต่อกัน |
android. |
ใช้เวอร์ชัน SDK ที่คอมไพล์เป็นค่าเริ่มต้นสำหรับเวอร์ชัน SDK เป้าหมายในแอปและการทดสอบ
ก่อนการเปลี่ยนแปลงนี้ เวอร์ชัน SDK เป้าหมายจะตั้งค่าเริ่มต้นเป็น SDK ขั้นต่ำ เวอร์ชัน |
false → true |
ระบุเวอร์ชัน SDK เป้าหมายอย่างชัดเจนสำหรับแอปและการทดสอบ |
android. |
สร้างเฉพาะคอมโพเนนต์การทดสอบหน่วยสำหรับประเภทบิลด์ที่ทดสอบ ในโปรเจ็กต์เริ่มต้น การดำเนินการนี้จะส่งผลให้มีการทดสอบหน่วยเดียวสำหรับการแก้ไขข้อบกพร่อง ซึ่งลักษณะการทำงานก่อนหน้านี้คือการทดสอบหน่วยที่ทำงานสำหรับการแก้ไขข้อบกพร่องหรือ การเผยแพร่ |
false → true |
หากโปรเจ็กต์ไม่จำเป็นต้องเรียกใช้การทดสอบทั้งสำหรับการแก้ไขข้อบกพร่องและเวอร์ชันที่เผยแพร่ ก็ไม่จำเป็นต้องเปลี่ยนแปลงใดๆ |
android. |
สร้างไม่สำเร็จพร้อมข้อผิดพลาดหากไม่มีไฟล์ที่ระบุใน DSL ของ AGP อยู่ในดิสก์ ก่อนการเปลี่ยนแปลงนี้ การสะกดชื่อไฟล์ผิด จะส่งผลให้ระบบไม่สนใจไฟล์โดยไม่มีการแจ้งเตือน | false → true |
นำการประกาศไฟล์ ProGuard ที่ไม่ถูกต้องออก |
android. |
ช่วยให้ R8 เก็บทรัพยากร Android น้อยลงได้โดยพิจารณา คลาสและทรัพยากร Android ร่วมกัน | false → true |
หากกฎการเก็บรักษาของโปรเจ็กต์เสร็จสมบูรณ์แล้ว คุณก็ไม่ต้องเปลี่ยนแปลงใดๆ |
android. |
ช่วยให้ R8 เก็บข้อมูลน้อยลงโดยไม่ต้องเก็บตัวสร้างเริ่มต้นโดยนัย
เมื่อมีการเก็บคลาส
กล่าวคือ -keep class A ไม่ได้หมายความว่า
-keep class A { <init>(); } |
false → true |
หากกฎการเก็บรักษาของโปรเจ็กต์เสร็จสมบูรณ์แล้ว ก็ไม่จำเป็นต้องเปลี่ยนแปลงใดๆ
แทนที่ -keep class A
ด้วย
-keep class A { <init>(); }
ในกฎการเก็บรักษาของโปรเจ็กต์สำหรับกรณีที่คุณต้องการเก็บ
ตัวสร้างเริ่มต้นไว้
|
android. |
เปิดใช้
resValues
ในโปรเจ็กต์ย่อยทั้งหมด
|
true → false |
เปิดใช้ resValues ในโปรเจ็กต์ย่อยที่ต้องการเท่านั้น
โดยตั้งค่าต่อไปนี้ในไฟล์บิลด์ Gradle ของโปรเจ็กต์เหล่านั้น
android {
buildFeatures {
resValues = true
}
} |
android. |
เปิดใช้ การคอมไพล์เชเดอร์ ในโปรเจ็กต์ย่อยทั้งหมด | true → false |
เปิดใช้การคอมไพล์ Shader ในโปรเจ็กต์ย่อยที่มี Shader เท่านั้น
ที่จะคอมไพล์โดยการตั้งค่าต่อไปนี้ในไฟล์บิลด์ Gradle ของโปรเจ็กต์เหล่านั้น
android {
buildFeatures {
shaders = true
}
} |
android. |
ใน 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. |
ตั้งแต่ AGP 9.0 เป็นต้นไป การเผยแพร่ไลบรารี Android และโมดูลฟีเจอร์จะล้มเหลวหากไฟล์ consumer-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. |
ไม่อนุญาตให้ส่งต่อผู้ให้บริการสำหรับแหล่งที่มาที่สร้างขึ้นโดยใช้
AndroidSourceSet
DSL
|
false → true |
ใช้
Sources
API ใน androidComponents เพื่อลงทะเบียนแหล่งที่มาที่สร้างขึ้น
|
android. |
ต้องตั้งค่าเส้นทางคอมไพเลอร์ Shader อย่างชัดเจนใน
local.properties
หากเปิดใช้การคอมไพล์ Shader
|
false → true |
เพิ่ม glslc.dir=/path/to/shader-tools ลงใน
local.properties ของโปรเจ็กต์
|
ฟีเจอร์ที่นำออก
ปลั๊กอิน Android Gradle 9.0 จะนำฟังก์ชันการทำงานต่อไปนี้ออก
- การรองรับแอป Wear OS ที่ฝัง
AGP 9.0 จะนำการรองรับการฝังแอป Wear OS ออก ซึ่ง Play ไม่รองรับอีกต่อไป ซึ่งรวมถึงการนำwearAppการกำหนดค่าและAndroidSourceSet.wearAppConfigurationNameDSL ออก ดูวิธีเผยแพร่แอปไปยัง Wear OS ได้ที่หัวข้อเผยแพร่ไปยัง Wear OS androidDependenciesและsourceSetsรายงานงาน- การรองรับ APK แยกของความหนาแน่น
AGP 9.0 จะนำการรองรับการสร้าง APK แยกตามความหนาแน่นของหน้าจอออก เราได้นำฟังก์ชันการทำงานและ API ที่เกี่ยวข้องออกแล้ว หากต้องการแยก APK ตามความหนาแน่นของหน้าจอโดยใช้ AGP 9.0 ขึ้นไป ให้ใช้ App Bundle
DSL ที่เปลี่ยนแปลง
ปลั๊กอิน Android Gradle 9.0 มีการเปลี่ยนแปลง DSL ที่ส่งผลกับส่วนอื่นดังนี้
นำการกำหนดพารามิเตอร์ของ
CommonExtensionออกแล้วการเปลี่ยนแปลงที่ทําให้เกิดข้อขัดข้องนี้เป็นเพียงการเปลี่ยนแปลงระดับแหล่งที่มาเพื่อช่วยหลีกเลี่ยงการเปลี่ยนแปลงที่ทําให้เกิดข้อขัดข้องระดับแหล่งที่มาในอนาคต แต่ก็หมายความว่าต้องย้ายเมธอดบล็อกจาก
CommonExtensionไปยังApplicationExtension,LibraryExtension,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 เวอร์ชันต่างๆ การใช้ Getter โดยตรง จะเข้ากันได้แบบไบนารีกับ AGP เวอร์ชันที่ต่ำกว่า 9.0
นำ DSL ออกแล้ว
ปลั๊กอิน Android Gradle 9.0 จะนำสิ่งต่อไปนี้ออก
AndroidSourceSet.jniเนื่องจากใช้งานไม่ได้AndroidSourceSet.wearAppConfigurationNameเนื่องจากเกี่ยวข้องกับ การรองรับแอป Wear OS แบบฝังที่นำออกไปแล้วBuildType.isRenderscriptDebuggableเนื่องจากใช้งานไม่ได้DependencyVariantSelectionโดยจะแทนที่ด้วยDependencySelectionซึ่งแสดงเป็นkotlin.android.localDependencySelectionInstallation.installOptions(String)โดยจะแทนที่ด้วย พร็อพเพอร์ตี้ที่เปลี่ยนแปลงได้ของInstallation.installOptionsบล็อก
PostProcessingที่อยู่ในขั้นทดลองแต่ไม่เคยมีเสถียรภาพProductFlavor.setDimensionซึ่งถูกแทนที่ด้วยพร็อพเพอร์ตี้dimensionLanguageSplitOptionsซึ่งมีประโยชน์เฉพาะสำหรับ Google Play Instant ซึ่งเลิกใช้งานแล้วDensitySplitเนื่องจากระบบไม่รองรับฟีเจอร์นี้อีกต่อไป สิ่งที่ใช้แทนคือการใช้ App Bundle
API ที่นำออก
ปลั๊กอิน Android Gradle 9.0 จะนำสิ่งต่อไปนี้ออก
AndroidComponentsExtension.finalizeDSlโดยจะแทนที่ด้วยfinalizeDslComponent.transformClassesWithโดยจะแทนที่ด้วยInstrumentation.transformClassesWithComponent.setAsmFramesComputationModeโดยจะแทนที่ด้วยInstrumentation.setAsmFramesComputationModeComponentBuilder.enabledโดยจะแทนที่ด้วยComponentBuilder.enableDependenciesInfoBuilder.includedInApkเปลี่ยนเป็นincludeInApkDependenciesInfoBuilder.includedInBundleเปลี่ยนเป็นincludeInBundleGeneratesApk.targetSdkVersionเปลี่ยนเป็นtargetSdkVariant.minSdkVersionเปลี่ยนเป็นminSdkVariant.maxSdkVersionเปลี่ยนเป็นmaxSdkVariant.targetSdkVersionเปลี่ยนเป็นtargetSdkVariant.unitTestเนื่องจากใช้กับปลั๊กอินcom.android.testไม่ได้unitTestพร้อมใช้งานในประเภทย่อยของVariantBuilderที่ขยายHasUnitTestVariantBuilder.targetSdkและtargetSdkPreviewเนื่องจากไม่มีความหมายในคลัง โปรดใช้GeneratesApkBuilder.targetSdkหรือGeneratesApkBuilder.targetSdkPreviewแทนVariantBuilder.enableUnitTestเนื่องจากใช้กับปลั๊กอินcom.android.testไม่ได้enableUnitTestพร้อมใช้งานในประเภทย่อยของVariantBuilderที่ขยายHasUnitTestBuilderเราจะนำ
VariantBuilder.unitTestEnabledออกเพื่อใช้enableUnitTestที่มีชื่อ สอดคล้องกัน มากขึ้นในVariantBuilderประเภทย่อย ที่ขยายHasUnitTestBuilderVariantOutput.enableเปลี่ยนเป็นenabledFeaturePluginและFeatureExtensionที่เลิกใช้งานและปิดใช้แล้วBaseExtension.registerTransformAPI ที่เลิกใช้งานและปิดใช้แล้ว ซึ่ง ยังคงมีไว้เพื่ออนุญาตให้คอมไพล์กับ AGP เวอร์ชันล่าสุดในขณะที่ กำหนดเป้าหมายการทำงานบน AGP 4.2 หรือต่ำกว่า
พร็อพเพอร์ตี้ Gradle ที่นำออก
เดิมทีเราได้เพิ่มพร็อพเพอร์ตี้ Gradle ต่อไปนี้เพื่อเป็นวิธีปิดใช้ฟีเจอร์ที่เปิดใช้โดยค่าเริ่มต้นทั่วโลก
ฟีเจอร์เหล่านี้ปิดใช้งานอยู่โดยค่าเริ่มต้นตั้งแต่ AGP 8.0 หรือต่ำกว่า เปิดใช้ ฟีเจอร์เหล่านี้ในโปรเจ็กต์ย่อยที่ใช้ฟีเจอร์เหล่านี้เท่านั้นเพื่อการสร้างที่มีประสิทธิภาพมากขึ้น
| พร็อพเพอร์ตี้ | การทำงาน | การแทนที่ |
|---|---|---|
android. |
เปิดใช้ AIDL Compilation ในโปรเจ็กต์ย่อยทั้งหมด |
เปิดใช้การคอมไพล์ AIDL ในโปรเจ็กต์ย่อยที่มีแหล่งที่มาของ AIDL เท่านั้น
โดยการตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ในไฟล์บิลด์ Gradle ของโปรเจ็กต์เหล่านั้น
android {
buildFeatures {
aidl = true
}
} |
android. |
เปิดใช้ การคอมไพล์ RenderScript ในโปรเจ็กต์ย่อยทั้งหมด |
เปิดใช้การคอมไพล์ RenderScript ในโปรเจ็กต์ย่อยที่มีแหล่งที่มาของ RenderScript เท่านั้น
โดยการตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ในไฟล์บิลด์ Gradle ของโปรเจ็กต์เหล่านั้น
android {
buildFeatures {
renderScript = true
}
} |
พร็อพเพอร์ตี้ Gradle ที่บังคับใช้
AGP 9.0 จะแสดงข้อผิดพลาดหากคุณตั้งค่าพร็อพเพอร์ตี้ Gradle ต่อไปนี้
ผู้ช่วยอัปเกรดปลั๊กอิน Android Gradle จะไม่อัปเกรดโปรเจ็กต์เป็น AGP 9.0 ที่ใช้พร็อพเพอร์ตี้เหล่านี้
| พร็อพเพอร์ตี้ | การทำงาน |
|---|---|
android. |
ตอนนี้การลดขนาดทรัพยากรจะทำงานเป็นส่วนหนึ่งของ R8 เสมอ และระบบได้นำการติดตั้งใช้งานก่อนหน้านี้ออกแล้ว |
android. |
ตอนนี้การลดขนาดทรัพยากรจะใช้การลดขนาดทรัพยากรที่แม่นยำเสมอ ซึ่ง ช่วยให้ลบได้มากขึ้น |
ปัญหาที่แก้ไขแล้ว
ปลั๊กอิน Android Gradle 9.0.0-rc02
| ปัญหาที่แก้ไขแล้ว | |
|---|---|
| ไม่มีปัญหาที่เปิดเผยต่อสาธารณะที่ทำเครื่องหมายว่าแก้ไขแล้วใน AGP 9.0.0-rc02 |
ปลั๊กอิน Android Gradle 9.0.0-rc01
| ปัญหาที่แก้ไขแล้ว | |
|---|---|
| ไม่มีปัญหาที่เปิดเผยต่อสาธารณะที่ทำเครื่องหมายว่าแก้ไขแล้วใน AGP 9.0.0-rc01 |
ปลั๊กอิน Android Gradle 9.0.0-beta05
| ปัญหาที่แก้ไขแล้ว | ||
|---|---|---|
| ปลั๊กอิน Android Gradle |
|
|
ปลั๊กอิน Android Gradle 9.0.0-beta04
| ปัญหาที่แก้ไขแล้ว | |||
|---|---|---|---|
| ปลั๊กอิน Android Gradle |
|
||
ปลั๊กอิน Android Gradle 9.0.0-beta03
| ปัญหาที่แก้ไขแล้ว | |
|---|---|
| ไม่มีปัญหาที่เปิดเผยต่อสาธารณะที่ทำเครื่องหมายว่าแก้ไขแล้วใน AGP 9.0.0-beta03 |
ปลั๊กอิน Android Gradle 9.0.0-beta02
| ปัญหาที่แก้ไขแล้ว | ||||
|---|---|---|---|---|
| ปลั๊กอิน Android Gradle |
|
|||
| เครื่องมือวิเคราะห์ซอร์สโค้ด |
|
|||
| การผสานรวมเครื่องมือวิเคราะห์ซอร์สโค้ด |
|
|||
ปลั๊กอิน Android Gradle 9.0.0-beta01
| ปัญหาที่แก้ไขแล้ว | |
|---|---|
| ไม่มีปัญหาที่เปิดเผยต่อสาธารณะที่ทำเครื่องหมายว่าแก้ไขแล้วใน AGP 9.0.0-beta01 |
ปลั๊กอิน Android Gradle 9.0.0-alpha14
| ปัญหาที่แก้ไขแล้ว | |||||||
|---|---|---|---|---|---|---|---|
| ปลั๊กอิน Android Gradle |
|
||||||
| การผสานรวมเครื่องมือวิเคราะห์ซอร์สโค้ด |
|
||||||
| Shrinker (R8) |
|
||||||
ปลั๊กอิน Android Gradle 9.0.0-alpha13
| ปัญหาที่แก้ไขแล้ว | ||||
|---|---|---|---|---|
| ปลั๊กอิน Android Gradle |
|
|||
ปลั๊กอิน Android Gradle 9.0.0-alpha12
| ปัญหาที่แก้ไขแล้ว | |||||
|---|---|---|---|---|---|
| ปลั๊กอิน Android Gradle |
|
||||
ปลั๊กอิน Android Gradle 9.0.0-alpha11
| ปัญหาที่แก้ไขแล้ว | ||||
|---|---|---|---|---|
| ปลั๊กอิน Android Gradle |
|
|||
ปลั๊กอิน Android Gradle 9.0.0-alpha10
| ปัญหาที่แก้ไขแล้ว | ||||
|---|---|---|---|---|
| ปลั๊กอิน Android Gradle |
|
|||
| เครื่องมือวิเคราะห์ซอร์สโค้ด |
|
|||
ปลั๊กอิน 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 |
|
||||
| เครื่องมือวิเคราะห์ซอร์สโค้ด |
|
||||
ปลั๊กอิน Android Gradle 9.0.0-alpha05
| ปัญหาที่แก้ไขแล้ว | |||||
|---|---|---|---|---|---|
| ปลั๊กอิน Android Gradle |
|
||||
| เครื่องมือวิเคราะห์ซอร์สโค้ด |
|
||||
ปลั๊กอิน Android Gradle 9.0.0-alpha04
| ปัญหาที่แก้ไขแล้ว | ||||
|---|---|---|---|---|
| ปลั๊กอิน Android Gradle |
|
|||
| เครื่องมือวิเคราะห์ซอร์สโค้ด |
|
|||
ปลั๊กอิน Android Gradle 9.0.0-alpha03
| ปัญหาที่แก้ไขแล้ว | ||||
|---|---|---|---|---|
| ปลั๊กอิน Android Gradle |
|
|||
| เครื่องมือวิเคราะห์ซอร์สโค้ด |
|
|||
ปลั๊กอิน Android Gradle 9.0.0-alpha02
| ปัญหาที่แก้ไขแล้ว | ||||
|---|---|---|---|---|
| ปลั๊กอิน Android Gradle |
|
|||
ปลั๊กอิน Android Gradle 9.0.0-alpha01
| ปัญหาที่แก้ไขแล้ว | |||||||
|---|---|---|---|---|---|---|---|
| ปลั๊กอิน Android Gradle |
|
||||||