ปลั๊กอิน 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)
การอัปเดตเล็กน้อยนี้รวมการแก้ไขข้อบกพร่องต่อไปนี้
ปัญหาที่แก้ไข | |
---|---|
ข้อผิดพลาด: "ไม่มีข้อกำหนดเวอร์ชันซึ่งมีรหัสที่ระบุในตาราง" หลังจากอัปเกรด AGP 7.2.2 -> 7.4.0
|
|
R8 NullPointerException ที่ MarkTypeAsLive AGP 7.4.1
|
|
[R8 4.0.53] การยืนยันคลาสแบบฮาร์ดใน Android 11 ล้มเหลว
|
การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ: ต้องใช้เนมสเปซในสคริปต์บิลด์ระดับโมดูล
คุณต้องตั้งค่าเนมสเปซในไฟล์ build.gradle.kts
ระดับโมดูล ไม่ใช่ไฟล์ Manifest คุณเริ่มใช้พร็อพเพอร์ตี้ DSL ของ namespace
ได้ตั้งแต่ AGP 7.3 เป็นต้นไป ดูข้อมูลเพิ่มเติมได้ที่
ตั้งค่าเนมสเปซ
เมื่อย้ายข้อมูลไปยัง DSL ของเนมสเปซ โปรดระมัดระวังปัญหาต่อไปนี้
- AGP เวอร์ชันก่อนหน้าอนุมานเนมสเปซทดสอบจากเนมสเปซหลัก หรือ
รหัสแอปพลิเคชัน ไม่ถูกต้องในบางกรณี ตัวช่วยการอัปเกรด AGP จะบล็อก
อัปเกรดหากพบว่าเนมสเปซหลักของโปรเจ็กต์และเนมสเปซทดสอบ
แบบเดียวกัน หากการอัปเกรดถูกบล็อก คุณจะต้องเปลี่ยน
testNamespace
ด้วยตนเอง และแก้ไขซอร์สโค้ดของคุณให้สอดคล้อง - หลังจากที่คุณเปลี่ยนเนมสเปซทดสอบ อาจเป็นไปได้ว่าโค้ดคอมไพล์
แต่การทดสอบที่มีการวัดคุมจะล้มเหลวขณะรันไทม์ เหตุการณ์นี้อาจเกิดขึ้นได้หาก
ซอร์สโค้ดสำหรับทดสอบแบบมีเครื่องใช้อ้างอิงทรัพยากรที่กำหนดไว้ในทั้ง
androidTest
และแหล่งที่มาของแอป
สำหรับข้อมูลเพิ่มเติม โปรดดู ปัญหา #191813691 ความคิดเห็น #19
การเปลี่ยนแปลงที่ส่งผลต่อเวอร์ชันเก่า: ค่าเริ่มต้นของตัวเลือกการสร้าง
ตั้งแต่ AGP 8.0 เป็นต้นไป ค่าเริ่มต้นสำหรับแฟล็กเหล่านี้จะเปลี่ยนเป็น เพื่อปรับปรุงประสิทธิภาพบิลด์ หากต้องการความช่วยเหลือในการปรับโค้ดให้รองรับการเปลี่ยนแปลงบางอย่างเหล่านี้ ให้ใช้เครื่องมือช่วยอัปเกรด AGP (เครื่องมือ > เครื่องมือช่วยอัปเกรด AGP) Assistant การอัปเกรดจะแนะนําให้คุณ อัปเดตโค้ดเพื่อรองรับการทำงานใหม่หรือการตั้งค่าสถานะเพื่อคงไว้ การทำงานก่อนหน้านี้
ตั้งค่าสถานะ | ค่าเริ่มต้นใหม่ | ค่าเริ่มต้นก่อนหน้า | หมายเหตุ |
---|---|---|---|
android.defaults.buildfeatures.buildconfig |
false |
true |
AGP 8.0 จะไม่สร้าง BuildConfig โดยค่าเริ่มต้น คุณต้องมี
เพื่อระบุตัวเลือกนี้โดยใช้ DSL ในโปรเจ็กต์ที่คุณต้องการ |
android.defaults.buildfeatures.aidl |
false |
true |
AGP 8.0 จะไม่เปิดใช้การรองรับ AIDL โดยค่าเริ่มต้น คุณต้องระบุตัวเลือกนี้โดยใช้ DSL ในโปรเจ็กต์ที่ต้องการ เรามีแผนที่จะนํา Flag นี้ออกใน 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 เป็นต้นไป คุณจะเปลี่ยนค่าสำหรับแฟล็กเหล่านี้ไม่ได้อีกต่อไป หากคุณระบุค่าในไฟล์ 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
เปิดใช้งานการทดสอบ 1 หน่วย 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 จะติดตามไฟล์ทรัพยากรตามตำแหน่งของโปรเจ็กต์ ต้องมี
android.enableSourceSetPathsMap เปิดใช้อยู่ |
android.disableAutomaticComponentCreation |
true |
AGP 8.0 จะไม่สร้าง SoftwareComponent โดยค่าเริ่มต้น โดย AGP จะสร้าง SoftwareComponents สำหรับตัวแปรที่กำหนดค่าให้เผยแพร่เท่านั้น โดยใช้ DSL การเผยแพร่ |
Flag เวอร์ชันเสถียรใหม่สําหรับโปรไฟล์การดําเนินการ
AGP มี Flag android.settings.executionProfile
ใหม่ ใช้แฟล็กนี้เพื่อ
ลบล้างโปรไฟล์การดำเนินการเริ่มต้น
SettingsExtension
ดูข้อมูลเพิ่มเติมได้ในเอกสารปลั๊กอินการตั้งค่า
หากต้องการดูตัวอย่าง Flag ทดลอง โปรดดูบันทึกประจำรุ่นเวอร์ชันตัวอย่าง
ไม่รองรับการกำหนดพร็อพเพอร์ตี้แบบ Lazy Loading ของ 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
...
}
โปรไฟล์การดำเนินการกับเครื่องมือ
ปลั๊กอินการตั้งค่ายังช่วยให้คุณสร้างโปรไฟล์การดำเนินการสำหรับเครื่องมือบางอย่างได้ด้วย CANNOT TRANSLATE โปรไฟล์การดำเนินการจะเป็นตัวกำหนดวิธีเรียกใช้เครื่องมือ คุณสามารถเลือก โปรไฟล์การดำเนินการที่ขึ้นอยู่กับสภาพแวดล้อม ในโปรไฟล์การดำเนินการ คุณ ตั้งค่าอาร์กิวเมนต์ 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
ตอนนี้คุณจำเป็นต้องใช้ JDK 17 เพื่อใช้ปลั๊กอิน Android Gradle 8.0 ในการสร้างแอป เพื่อเรียกใช้ Gradle Android Studio Flamingo จะรวม JDK 17 และกำหนดค่า Gradle ให้ใช้โดยค่าเริ่มต้น ซึ่งหมายความว่าผู้ใช้ 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 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
เครื่องลดขนาด (R8) |
|
ปลั๊กอิน Android Gradle 8.0.1
ปัญหาที่แก้ไขแล้ว | ||||
---|---|---|---|---|
เครื่องลดขนาด (R8) |
|
ปลั๊กอิน Android Gradle 8.0.2
ปัญหาที่แก้ไขแล้ว | |||||
---|---|---|---|---|---|
Shrinker (R8) |
|