ปลั๊กอิน 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 คุณเริ่มใช้พร็อพเพอร์ตี้ DSL ของ namespace
ได้ตั้งแต่ AGP 7.3 เป็นต้นไป โปรดดูข้อมูลเพิ่มเติมที่หัวข้อตั้งค่าเนมสเปซ
เมื่อย้ายข้อมูลไปยัง DSL เนมสเปซ โปรดระวังปัญหาต่อไปนี้
- AGP เวอร์ชันเก่าๆ จะอนุมานเนมสเปซทดสอบจากเนมสเปซหลักหรือรหัสแอปพลิเคชันอย่างไม่ถูกต้องในบางกรณี ผู้ช่วยการอัปเกรด AGP จะบล็อกการอัปเกรดหากพบว่าเนมสเปซหลักและเนมสเปซทดสอบของโปรเจ็กต์เป็นเนมสเปซเดียวกัน หากการอัปเกรดถูกบล็อก คุณต้องเปลี่ยน
testNamespace
ด้วยตนเองและแก้ไขซอร์สโค้ดให้สอดคล้องกัน - หลังจากเปลี่ยนเนมสเปซการทดสอบแล้ว โค้ดอาจคอมไพล์ได้ แต่การทดสอบที่มีเครื่องมือวัดผลจะดำเนินการไม่สำเร็จเมื่อรันไทม์ กรณีนี้อาจเกิดขึ้นหากซอร์สโค้ดทดสอบที่มีเครื่องมือวัดของคุณอ้างอิงทรัพยากรที่กําหนดไว้ในทั้ง
androidTest
และแหล่งที่มาของแอป
ดูข้อมูลเพิ่มเติมได้ที่ ความคิดเห็น #19 ของปัญหา #191813691
การเปลี่ยนแปลงที่ส่งผลต่อเวอร์ชันเก่า: ค่าเริ่มต้นของตัวเลือกการสร้าง
ตั้งแต่ AGP 8.0 เป็นต้นไป ค่าเริ่มต้นของ Flag เหล่านี้มีการเปลี่ยนแปลงเพื่อปรับปรุงประสิทธิภาพการสร้าง หากต้องการความช่วยเหลือในการปรับโค้ดให้รองรับการเปลี่ยนแปลงบางอย่างเหล่านี้ ให้ใช้เครื่องมือช่วยอัปเกรด AGP (เครื่องมือ > เครื่องมือช่วยอัปเกรด AGP) ผู้ช่วยการอัปเกรดจะแนะนำคุณเกี่ยวกับการอัปเดตโค้ดให้รองรับลักษณะการทำงานแบบใหม่หรือการตั้งค่า Flag เพื่อเก็บรักษาลักษณะการทำงานแบบเดิม
ตั้งค่าสถานะ | ค่าเริ่มต้นใหม่ | ค่าเริ่มต้นก่อนหน้า | หมายเหตุ |
---|---|---|---|
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 ในโปรเจ็กต์ที่ต้องการ เรามีแผนจะนำ Flag นี้ออกใน AGP 9.0 |
android.nonFinalResIds |
true |
false |
AGP 8.0 จะสร้างคลาส R ที่มีช่องที่ไม่ใช่ Final โดยค่าเริ่มต้น |
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 ที่มีเฉพาะเส้นทางแบบสัมพัทธ์ วิธีนี้ช่วยให้การทดสอบ 1 หน่วยของ 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
ใช้ Flag นี้เพื่อลบล้างโปรไฟล์การเรียกใช้เริ่มต้นจาก SettingsExtension
ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับปลั๊กอินการตั้งค่า
หากต้องการดูตัวอย่าง Flag ทดลอง โปรดดูบันทึกประจำรุ่นเวอร์ชันตัวอย่าง
ไม่รองรับการกําหนดพร็อพเพอร์ตี้แบบเลื่อนเวลาของ 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 Plugin 8.0 เพื่อสร้างแอป คุณต้องใช้ JDK 17 เพื่อเรียกใช้ 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 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Shrinker (R8) |
|
ปลั๊กอิน Android Gradle 8.0.1
ปัญหาที่แก้ไขแล้ว | ||||
---|---|---|---|---|
Shrinker (R8) |
|
ปลั๊กอิน Android Gradle 8.0.2
ปัญหาที่แก้ไขแล้ว | |||||
---|---|---|---|---|---|
Shrinker (R8) |
|