ปลั๊กอิน Android Gradle 8.0.0 เป็นรุ่นที่สำคัญซึ่งมีฟีเจอร์และการปรับปรุงใหม่ๆ มากมาย
ความเข้ากันได้
เวอร์ชันขั้นต่ำ | เวอร์ชันเริ่มต้น | หมายเหตุ | |
---|---|---|---|
Gradle | 8.0 | 8.0 | ดูข้อมูลเพิ่มเติมได้ที่การอัปเดต Gradle |
เครื่องมือสร้าง SDK | 30.0.3 | 30.0.3 | ติดตั้งหรือกำหนดค่าเครื่องมือสร้าง SDK |
NDK | ไม่มี | 25.1.8937393 | ติดตั้งหรือกำหนดค่า NDK เวอร์ชันอื่น |
JDK | 17 | 17 | ดูข้อมูลเพิ่มเติมได้ที่การตั้งค่าเวอร์ชัน JDK |
การเผยแพร่แพตช์
ต่อไปนี้เป็นรายการการเผยแพร่แพตช์สำหรับปลั๊กอิน Android Gradle 8.0
ปลั๊กอิน Android Gradle 8.0.2 (พฤษภาคม 2023)
ดูรายการข้อบกพร่องที่แก้ไขแล้วใน AGP 8.0.2 ได้ที่ ปัญหาที่ปิดแล้วของ Android Studio 2022.2.1
ปลั๊กอิน Android Gradle 8.0.1 (พฤษภาคม 2023)
การอัปเดตเล็กๆ น้อยๆ นี้มีการแก้ไขข้อบกพร่องต่อไปนี้
ปัญหาที่แก้ไขแล้ว | |
---|---|
ข้อผิดพลาด: "ไม่มี VersionRequirement ที่มีรหัสที่ระบุในตาราง" หลังจากอัปเกรด AGP 7.2.2 -> 7.4.0
|
|
R8 NullPointerException at markTypeAsLive AGP 7.4.1
|
|
[R8 4.0.53] การยืนยันคลาสอย่างเข้มงวดไม่สำเร็จใน Android 11
|
การเปลี่ยนแปลงที่ไม่รองรับการทำงานแบบย้อนกลับ: ต้องระบุเนมสเปซในสคริปต์บิลด์ระดับโมดูล
คุณต้องตั้งค่าเนมสเปซในไฟล์ build.gradle.kts
ระดับโมดูลแทนไฟล์ Manifest คุณเริ่มใช้พร็อพเพอร์ตี้ namespace
DSL
ได้ตั้งแต่ AGP 7.3 เป็นต้นไป ดูข้อมูลเพิ่มเติมได้ที่
ตั้งค่าเนมสเปซ
เมื่อย้ายข้อมูลไปยัง DSL ของเนมสเปซ โปรดทราบปัญหาต่อไปนี้
- AGP เวอร์ชันก่อนหน้าจะอนุมานเนมสเปซการทดสอบจากเนมสเปซหลักหรือ
รหัสแอปพลิเคชันอย่างไม่ถูกต้องในบางกรณี ผู้ช่วยการอัปเกรด AGP จะบล็อกการอัปเกรดหากพบว่าเนมสเปซหลักและเนมสเปซการทดสอบของโปรเจ็กต์เหมือนกัน หากการอัปเกรดถูกบล็อก คุณจะต้องเปลี่ยน
testNamespace
และแก้ไขซอร์สโค้ดด้วยตนเองตามนั้น - หลังจากเปลี่ยนเนมสเปซของการทดสอบแล้ว โค้ดอาจคอมไพล์ได้
แต่การทดสอบที่ใช้เครื่องมืออาจล้มเหลวในรันไทม์ ปัญหานี้อาจเกิดขึ้นหากซอร์สโค้ดของการทดสอบที่วัดผลอ้างอิงถึงทรัพยากรที่กำหนดไว้ทั้งใน
androidTest
และแหล่งที่มาของแอป
ดูข้อมูลเพิ่มเติมได้ที่ issue #191813691 comment #19
การเปลี่ยนแปลงที่ไม่รองรับ: ค่าเริ่มต้นของตัวเลือกบิลด์
ตั้งแต่ AGP 8.0 เป็นต้นไป ค่าเริ่มต้นของแฟล็กเหล่านี้จะเปลี่ยนไปเพื่อ ปรับปรุงประสิทธิภาพการสร้าง หากต้องการความช่วยเหลือในการปรับโค้ดให้รองรับการเปลี่ยนแปลงบางอย่าง เหล่านี้ ให้ใช้ตัวช่วยอัปเกรด AGP (เครื่องมือ > ตัวช่วยอัปเกรด AGP) ผู้ช่วยอัปเกรดจะแนะนำขั้นตอนการอัปเดตโค้ดเพื่อรองรับลักษณะการทำงานใหม่ หรือการตั้งค่าสถานะเพื่อคงลักษณะการทำงานก่อนหน้า
ตั้งค่าสถานะ | ค่าเริ่มต้นใหม่ | ค่าเริ่มต้นก่อนหน้า | หมายเหตุ |
---|---|---|---|
android.defaults.buildfeatures.buildconfig |
false |
true |
AGP 8.0 ไม่สร้าง BuildConfig โดยค่าเริ่มต้น คุณต้อง
ระบุตัวเลือกนี้โดยใช้ DSL ในโปรเจ็กต์ที่คุณต้องการ |
android.defaults.buildfeatures.aidl |
false |
true |
AGP 8.0 ไม่ได้เปิดใช้การรองรับ AIDL โดยค่าเริ่มต้น คุณต้องระบุ ตัวเลือกนี้โดยใช้ DSL ในโปรเจ็กต์ที่คุณต้องการ เรามีแผนจะนำฟีเจอร์นี้ออกใน AGP 9.0 |
android.defaults.buildfeatures.renderscript |
false |
true |
AGP 8.0 ไม่ได้เปิดใช้การรองรับ RenderScript โดยค่าเริ่มต้น คุณต้อง ระบุตัวเลือกนี้โดยใช้ DSL ในโปรเจ็กต์ที่คุณต้องการ เรามีแผนจะนำฟีเจอร์ นี้ออกใน AGP 9.0 |
android.nonFinalResIds |
true |
false |
AGP 8.0 จะสร้างคลาส R ที่มีฟิลด์ที่ไม่ใช่ฟิลด์สุดท้ายโดยค่าเริ่มต้น
|
android.nonTransitiveRClass |
true |
false |
AGP 8.0 จะสร้างคลาส R สำหรับทรัพยากรที่กำหนดไว้ใน
โมดูลปัจจุบันเท่านั้น |
android.enableR8.fullMode |
true |
false |
AGP 8.0 จะเปิดใช้โหมดเต็มของ R8 โดยค่าเริ่มต้น ดูรายละเอียดเพิ่มเติมได้ที่ โหมดเต็มของ R8 |
การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ: บังคับใช้ค่าตัวเลือกการสร้าง
ตั้งแต่ AGP 8.0 เป็นต้นไป คุณจะเปลี่ยนค่าของ Flag เหล่านี้ไม่ได้อีกต่อไป หากคุณระบุค่าในไฟล์ gradle.properties
ระบบจะไม่สนใจค่าดังกล่าวและ AGP
จะพิมพ์คำเตือน
ตั้งค่าสถานะ | ค่าที่บังคับใช้ | หมายเหตุ |
---|---|---|
android.dependencyResolutionAtConfigurationTime.warn |
true |
AGP 8.0 จะแสดงคำเตือนหากตรวจพบการแก้ไขการกำหนดค่าในระหว่าง เฟสการกำหนดค่า เนื่องจากจะส่งผลเสียต่อเวลาการกำหนดค่า Gradle |
android.r8.failOnMissingClasses |
true |
AGP 8.0 จะสร้างบิลด์ที่ใช้ R8 ไม่สำเร็จหากไม่มีคลาส เพื่อให้มั่นใจว่าการเพิ่มประสิทธิภาพ DEX จะดีขึ้น
คุณต้องเพิ่มไลบรารีที่ขาดหายไปหรือ-dontwarn เก็บกฎไว้ ดูรายละเอียดเพิ่มเติมได้ที่
คำเตือนเกี่ยวกับคลาสที่ขาดหายไปในเครื่องมือลดขนาด R8 |
android.testConfig.useRelativePath |
true |
เมื่อเปิดใช้การรองรับการใช้ทรัพยากร ชิ้นงาน และไฟล์ Manifest ของ Android ใน
การทดสอบหน่วย AGP 8.0 จะสร้างไฟล์
test_config.properties ที่มีเฉพาะเส้นทางแบบสัมพัทธ์ ซึ่งจะช่วยให้การทดสอบหน่วยของ Android ใช้แคชบิลด์ Gradle ได้เสมอ |
android.useNewJarCreator |
true |
AGP ใช้ไลบรารี Zipflinger เมื่อสร้างไฟล์ JAR เพื่อปรับปรุง ประสิทธิภาพการสร้าง |
android.bundletool.includeRepositoriesInDependencyReport |
true |
เมื่อเปิดใช้การเพิ่มข้อมูลทรัพยากร Dependency ของ SDK ใน AAB และ APK AGP 8.0 จะเพิ่มรายการที่เก็บโปรเจ็กต์ลงในข้อมูลนี้ด้วย ดูข้อมูลเพิ่มเติมได้ที่ ข้อมูลการขึ้นต่อกันสำหรับ Play Console |
android.enableArtProfiles |
true |
ตอนนี้ระบบจะสร้างโปรไฟล์พื้นฐานเสมอ ดูรายละเอียดได้ที่โปรไฟล์พื้นฐาน |
android.enableNewResourceShrinker |
true |
ใช้การติดตั้งใช้งานเครื่องมือลดขนาดทรัพยากรใหม่โดยค่าเริ่มต้น เครื่องมือลดขนาดทรัพยากรใหม่ รองรับฟีเจอร์แบบไดนามิก |
android.enableSourceSetPathsMap |
true |
ใช้สำหรับการคำนวณการแมปเส้นทางทรัพยากรที่เกี่ยวข้อง เพื่อให้การสร้าง Gradle เป็นข้อมูลล่าสุดบ่อยขึ้น |
android.cacheCompileLibResources |
true |
ตอนนี้ Gradle สามารถแคชทรัพยากรของไลบรารีที่คอมไพล์แล้วได้โดยค่าเริ่มต้น เนื่องจาก Gradle
ติดตามไฟล์ทรัพยากรที่สัมพันธ์กับตำแหน่งของโปรเจ็กต์ ต้องเปิดใช้
android.enableSourceSetPathsMap |
android.disableAutomaticComponentCreation |
true |
AGP 8.0 จะไม่สร้าง SoftwareComponent โดยค่าเริ่มต้น แต่ AGP จะสร้าง SoftwareComponents เฉพาะสำหรับตัวแปรที่กำหนดค่าให้เผยแพร่ โดยใช้ DSL การเผยแพร่ |
แฟล็กใหม่ที่เสถียรสำหรับโปรไฟล์การดำเนินการ
AGP มีฟีเจอร์ใหม่ android.settings.executionProfile
ใช้ Flag นี้เพื่อ
ลบล้างโปรไฟล์การดำเนินการเริ่มต้นจาก
SettingsExtension
ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของปลั๊กอินการตั้งค่า
หากต้องการดูตัวอย่างฟีเจอร์ทดลอง ให้ดูบันทึกประจำรุ่นตัวอย่าง
ไม่รองรับการกำหนดพร็อพเพอร์ตี้แบบเลซี่ของ Kotlin
หากคุณใช้ Kotlin DSL ของ Gradle สำหรับสคริปต์บิลด์ โปรดทราบว่า Android
Studio และ AGP 8.0 ไม่รองรับการกำหนดพร็อพเพอร์ตี้เวอร์ชันทดลองโดยใช้ตัวดำเนินการ =
ดูข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์นี้ได้ที่บันทึกประจำรุ่น
และเอกสารประกอบ
หมวดหมู่งานของตัววิเคราะห์บิลด์
ตั้งแต่ Android Studio Flamingo เป็นต้นไป เครื่องมือวิเคราะห์การสร้างจะมีมุมมองเริ่มต้นใหม่สำหรับ งานที่ส่งผลต่อระยะเวลาการสร้าง หากโปรเจ็กต์ใช้ AGP 8.0 ขึ้นไป เครื่องมือวิเคราะห์การบิลด์จะจัดกลุ่มงานตามหมวดหมู่ แทนที่จะแสดงงานทีละรายการ เช่น งานที่เกี่ยวข้องกับทรัพยากร Android, Kotlin หรือ Dexing จะจัดกลุ่มไว้ด้วยกันแล้วจัดเรียงตามระยะเวลาการสร้าง ซึ่งจะช่วยให้คุณทราบได้ง่ายว่าหมวดหมู่ใดมีผลต่อเวลาในการสร้างมากที่สุด การขยายแต่ละหมวดหมู่ จะแสดงรายการงานที่เกี่ยวข้อง หากต้องการแสดงงานทีละรายการโดยไม่จัดกลุ่ม ให้ใช้เมนูแบบเลื่อนลงจัดกลุ่มตาม
ปลั๊กอินการตั้งค่าใหม่
AGP 8.0.0-alpha09 เปิดตัวปลั๊กอินการตั้งค่าใหม่ ปลั๊กอินการตั้งค่าช่วยให้ คุณรวมการกำหนดค่าส่วนกลาง ซึ่งเป็นการกำหนดค่าที่ใช้กับโมดูลทั้งหมด ไว้ในที่เดียว เพื่อให้คุณไม่ต้องคัดลอกและวางการกำหนดค่าในโมดูลหลายโมดูล นอกจากนี้ คุณยังใช้ปลั๊กอินการตั้งค่าเพื่อสร้างโปรไฟล์การดำเนินการของเครื่องมือ หรือวิธีการต่างๆ ในการเรียกใช้เครื่องมือ และสลับไปมาระหว่างโปรไฟล์เหล่านั้นได้ด้วย
หากต้องการใช้ปลั๊กอินการตั้งค่า ให้ใช้ปลั๊กอินในไฟล์ settings.gradle
ดังนี้
apply plugin 'com.android.settings'
รวมศูนย์การกำหนดค่าส่วนกลาง
หากต้องการกำหนดค่าส่วนกลาง ให้ใช้บล็อก android
ใหม่ในไฟล์
settings.gradle
ตัวอย่างเช่น
android {
compileSdk 31
minSdk 28
...
}
โปรไฟล์การเรียกใช้เครื่องมือ
นอกจากนี้ ปลั๊กอินการตั้งค่ายังช่วยให้คุณสร้างโปรไฟล์การดำเนินการสำหรับเครื่องมือบางอย่างได้ด้วย โปรไฟล์การดำเนินการจะกำหนดวิธีเรียกใช้เครื่องมือ คุณสามารถเลือกโปรไฟล์การดำเนินการที่แตกต่างกันได้โดยขึ้นอยู่กับสภาพแวดล้อม ในโปรไฟล์การดำเนินการ คุณ สามารถตั้งค่าอาร์กิวเมนต์ JVM สำหรับเครื่องมือและกำหนดค่าให้เรียกใช้ในกระบวนการแยกต่างหากได้ ปัจจุบันรองรับเฉพาะ เครื่องมือ R8
สร้างโปรไฟล์การดำเนินการและตั้งค่าโปรไฟล์การดำเนินการเริ่มต้นในไฟล์ settings.gradle
ดังที่แสดงในตัวอย่างต่อไปนี้
android {
execution {
profiles {
high {
r8 {
jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
runInSeparateProcess true
}
}
low {
r8 {
jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
runInSeparateProcess true
}
}
ci {
r8.runInSeparateProcess false
}
}
defaultProfile "low"
}
}
หากต้องการลบล้างโปรไฟล์เริ่มต้น ให้เลือกโปรไฟล์อื่นโดยใช้พร็อพเพอร์ตี้ android.experimental.settings.executionProfile
ในไฟล์ gradle.properties
ดังนี้
android.experimental.settings.executionProfile=high
นอกจากนี้ คุณยังตั้งค่าพร็อพเพอร์ตี้นี้โดยใช้บรรทัดคำสั่งได้ด้วย ซึ่งจะช่วยให้คุณตั้งค่า
เวิร์กโฟลว์ที่แตกต่างกันได้ ตัวอย่างเช่น หากคุณมีเวิร์กโฟลว์การผสานรวมอย่างต่อเนื่อง
คุณสามารถใช้บรรทัดคำสั่งเพื่อเปลี่ยนโปรไฟล์การดำเนินการได้โดยไม่ต้อง
เปลี่ยนไฟล์ settings.gradle
./gradlew assembleRelease \
-Pandroid.experimental.settings.executionProfile=ci
ต้องใช้ JDK 17 เพื่อเรียกใช้ AGP 8.0
เมื่อใช้ปลั๊กอิน Android Gradle 8.0 เพื่อสร้างแอป ตอนนี้คุณต้องใช้ JDK 17 เพื่อเรียกใช้ Gradle Android Studio Flamingo มาพร้อมกับ JDK 17 และกำหนดค่า Gradle ให้ใช้ JDK 17 โดยค่าเริ่มต้น ซึ่งหมายความว่าผู้ใช้ Android Studio ส่วนใหญ่ไม่จำเป็นต้องทำการเปลี่ยนแปลงการกำหนดค่าใดๆ ในโปรเจ็กต์
หากต้องการตั้งค่าเวอร์ชัน JDK ที่ AGP ใช้ภายใน Android Studio ด้วยตนเอง คุณต้องใช้ JDK 17 ขึ้นไป
เมื่อใช้ AGP โดยไม่ขึ้นกับ Android Studio ให้อัปเกรดเวอร์ชัน JDK โดย
ตั้งค่าJAVA_HOME
ตัวแปรสภาพแวดล้อม
หรือ-Dorg.gradle.java.home
ตัวเลือกบรรทัดคำสั่ง
เป็นไดเรกทอรีการติดตั้ง JDK 17
ปัญหาที่แก้ไขแล้ว
ปลั๊กอิน Android Gradle 8.0.0
ปัญหาที่แก้ไขแล้ว | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ปลั๊กอิน Android Gradle |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Dexer (D8) |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lint |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
การผสานรวม Lint |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Shrinker (R8) |
|
ปลั๊กอิน Android Gradle 8.0.1
ปัญหาที่แก้ไขแล้ว | ||||
---|---|---|---|---|
Shrinker (R8) |
|
ปลั๊กอิน Android Gradle 8.0.2
ปัญหาที่แก้ไขแล้ว | |||||
---|---|---|---|---|---|
Shrinker (R8) |
|