ปลั๊กอิน Android Gradle 8.2.0 (พ.ย. 2023)

ปลั๊กอิน Android Gradle 8.2.0 เป็นรุ่นที่สำคัญซึ่งมีฟีเจอร์และการปรับปรุงใหม่ๆ มากมาย

ความเข้ากันได้

API ระดับสูงสุดที่ปลั๊กอิน Android Gradle 8.2 รองรับคือ API ระดับ 34 ข้อมูลอื่นๆ เกี่ยวกับความเข้ากันได้มีดังนี้

เวอร์ชันขั้นต่ำ เวอร์ชันเริ่มต้น หมายเหตุ
Gradle 8.2 8.2 ดูข้อมูลเพิ่มเติมได้ที่การอัปเดต Gradle
เครื่องมือสร้าง SDK 34.0.0 34.0.0 ติดตั้งหรือกำหนดค่าเครื่องมือสร้าง SDK
NDK ไม่มี 25.1.8937393 ติดตั้งหรือกำหนดค่า NDK เวอร์ชันอื่น
JDK 17 17 ดูข้อมูลเพิ่มเติมได้ที่การตั้งค่าเวอร์ชัน JDK

มาโครใหม่สำหรับระบุเส้นทาง JDK

#GRADLE_LOCAL_JAVA_HOME คือมาโครใหม่ที่คุณใช้เพื่อระบุเส้นทาง JDK ได้ ซึ่งจะช่วยให้ระบุเส้นทางหน้าแรกของ Java ที่ใช้สำหรับการดำเนินการ Gradle Daemon (กระบวนการเบื้องหลัง) สำหรับโปรเจ็กต์ได้ง่ายและปลอดภัยยิ่งขึ้น ระบบจะจัดเก็บเส้นทางการเลือกไว้ในฟิลด์ java.home ในไฟล์ .gradle/config.properties ตั้งค่าฟิลด์นี้ผ่านการตั้งค่า JDK ของ Gradle ใน Android Studio โดยไปที่ไฟล์ (หรือ Android Studio ใน macOS) > การตั้งค่า > สร้าง, เรียกใช้, การติดตั้งใช้งาน > เครื่องมือสร้าง > Gradle

โปรเจ็กต์ใหม่จะใช้ #GRADLE_LOCAL_JAVA_HOME โดยค่าเริ่มต้น ระบบจะย้ายข้อมูลโปรเจ็กต์ที่มีอยู่ไปยังมาโครใหม่โดยอัตโนมัติหลังจากซิงค์สำเร็จ เว้นแต่คุณจะใช้มาโครอย่าง #JAVA_HOME อยู่แล้ว

ประโยชน์หลักของมาโครใหม่มีดังนี้

  • คุณสามารถแก้ไขเส้นทาง JDK ด้วยตนเองเพื่อเรียกใช้การซิงค์ได้โดยไม่ต้องเปิดโปรเจ็กต์ก่อน
  • ข้อผิดพลาดที่เกี่ยวข้องกับ Gradle และ JDK ของโปรเจ็กต์เวอร์ชันที่ไม่เข้ากันจะลดลง เนื่องจากมีแหล่งข้อมูลเดียวที่เชื่อถือได้สำหรับการเลือก JDK ของ Gradle

ปัญหาที่แก้ไขแล้ว

ปลั๊กอิน Android Gradle 8.2.0

ปัญหาที่แก้ไขแล้ว
ปลั๊กอิน Android Gradle
ประเภทแหล่งที่มาที่กำหนดเองควรสร้างชุดแหล่งข้อมูลแบบหลายรสชาติ
การตรวจสอบเวอร์ชัน SDK ไม่รองรับผู้ใช้ส่วนขยาย SDK
DependenciesInfoBuilder ต้องมีการอัปเดต API + เอกสาร
DexingNoClasspathTransform (minSdk >= 24) ที่มีเป้าหมาย Java 11 ไม่สำเร็จเนื่องจากไม่มีสมาชิกที่ซ้อนกัน
DslExtension.Builder.extendProjectWith() ไม่ทำงานตามที่อธิบายไว้ใน Groovy
เพิ่ม API VariantSelector.withFlavor ที่ไม่ได้ใช้ kotlin.Pair
AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) ไม่พบแคชเนื่องจาก `proguard.txt` มีการเปลี่ยนแปลง
ไฟล์ Manifest ของแอปที่ผสานรวมจะมีแอตทริบิวต์ extractNativeLibs และ useEmbeddedDex จากทรัพยากร Dependency
AIDL ล้มเหลวด้วยเครื่องมือสร้าง 33.0.0
AGP: แสดงเส้นทางไปยังเครื่องมือ AIDL และไฟล์ AIDL ของเฟรมเวิร์กเป็น API สาธารณะ
คำขอ: อนุญาตให้ IDE เสนอวิธีแก้ไขสำหรับ "PermittedSubclasses requires ASM9"
กำหนดเป้าหมายเป็นไบต์โค้ด 17 เมื่อคอมไพล์ AGP
นำ VariantManager.getModifiedName ออก
AndroidTest.packaging.jniLibs.keepDebugSymbols ไม่ส่งผลต่อการแพ็กเกจ androidTest
งานทดสอบการใช้เครื่องมือ GMD ค้างและเมื่อลองอีกครั้งก็เริ่มล้มเหลว
generateLocaleConfig ใน AGP 8.1.0 ใช้การจัดลำดับแบบไม่แน่นอน ซึ่งทำให้บิลด์ที่ทำซ้ำไม่ได้
ProcessApplicationManifest.navigationJsons มีไฟล์ที่มีเส้นทางสัมบูรณ์
ไม่อนุญาตให้เข้าถึง GradleBuildProject.Builder ผ่าน AnalyticsConfiguratorService หลังจากสร้าง AnalyticsService แล้ว
AndroidTest.packaging.jniLibs.keepDebugSymbols ไม่ส่งผลต่อการแพ็กเกจ androidTest
อนุญาตให้คอมไพล์ค่าสีที่ผิดกฎหมาย
"ReplaceWith" ไม่ถูกต้องสำหรับ VariantBuilder
Gradle 8.1 ทำให้การแคชการกำหนดค่าใช้งานไม่ได้เนื่องจาก .gradle/.android/analytics.settings
ข้อความการเลิกใช้งานไม่ได้ใช้ `ReplaceWith`
แสดงวิธีรับเวอร์ชัน NDK เริ่มต้น
ปลั๊กอิน Android Gradle ต้องใช้ Java 17 ในการเรียกใช้
ความไม่เข้ากันของ ASM Transform และ toAppend()
แก้ไข LintErrors เมื่อเรียกใช้ Lint ด้วย K2 UAST ผ่าน Gradle ในโปรเจ็กต์ KMP
รองรับ Variant level missingDimensionStrategy และอาจรองรับ build type/flavor matchingFallback
Android Studio Giraffe ได้นำ `android.injected.studio.version` ออกแล้ว
เพิ่มความสามารถในการปิดใช้ AndroidXDependencyCheck
generateLocaleConfig ใน AGP 8.1.0 ใช้การจัดลำดับแบบไม่แน่นอน ซึ่งทำให้บิลด์ที่ทำซ้ำไม่ได้
โฆษณาข้อกำหนดเวอร์ชัน R8 / D8 ในข้อมูลเมตา AAR (เช่น สำหรับ coreLibraryDesugaring และ API ใหม่ที่อยู่นอกบรรทัด)
คำเตือนการซิงค์: "ไม่ควรเข้าถึง GradleBuildProject.Builder ผ่าน AnalyticsConfiguratorService หลังจากสร้าง AnalyticsService แล้ว"
อัปเดตเป็นรุ่นเป้าหมายหรือ RC ของ Gradle 8.2
เข้าถึง "java.lang.Comparable" ไม่ได้
androidResources ไม่พร้อมใช้งานในโมดูลไลบรารี Android
การดำเนินการสำหรับงาน ":app:mergeReleaseClasses" ล้มเหลวหลังจากอัปเดต AGP จาก 8.0.2 เป็น 8.1.0
Gradle 8.1 ทำให้การแคชการกำหนดค่าใช้งานไม่ได้เนื่องจาก .gradle/.android/analytics.settings
[AGP 8.1.0] ./gradlew test ล้มเหลวโดยมีข้อความ "Unable to find manifest output" หากทั้ง splits.abi.isEnable และ testOptions.unitTests.isIncludeAndroidResources เป็นจริง
Android Studio Giraffe ไม่รองรับ versionCodeOverride ด้วย AGP 8.1
AGP 8.1.0 ถอนการติดตั้งแอปหลังจากเรียกใช้การทดสอบที่มีการตรวจสอบ - 7.4.2 ไม่ถอนการติดตั้ง
การแปลง APK ทำให้เกิดข้อผิดพลาดกับ ListingFileRedirectTask
การถดถอยของเม่น: ปุ่มเรียกใช้จะล่าช้า 2-3 วินาที (การสร้างข้อกำหนด)
Dexer (D8)
เปิดใช้คลาสที่บันทึกและปิดผนึกดั้งเดิมเมื่อ dexing สำหรับ min-api 34 ขึ้นไป
Lint
การตรวจสอบ Lint ที่สร้างขึ้นไม่จัดการ AppComponentFactory ได้ดี
Lint 8.2.0 เวอร์ชันอัลฟายังไม่รองรับการนำเข้าฟังก์ชันระดับบนสุดใน Kotlin
เพิ่มตัวเลือกเพื่อไม่รวมหมายเลขบรรทัดและคอลัมน์ในพื้นฐานของ Lint
เพิ่มตัวเลือกเพื่อไม่รวมหมายเลขบรรทัดและคอลัมน์ในพื้นฐานของ Lint
การทดสอบ Lint ไม่รองรับฟีเจอร์ภาษาของ Java 17
Bumblebee 2021.1.1 Patch 1 ระบุว่า commons-io เวอร์ชันเก่า (20030203.000550) ใหม่กว่า 2.11.0
Lint 8.2.0 เวอร์ชันอัลฟายังไม่รองรับการนำเข้าฟังก์ชันระดับบนสุดใน Kotlin
Bumblebee 2021.1.1 Patch 1 ระบุว่า commons-io เวอร์ชันเก่า (20030203.000550) ใหม่กว่า 2.11.0
Android Studio ทำเครื่องหมายเวอร์ชันที่ระบุว่าล้าสมัยอย่างไม่ถูกต้อง
Lint จะไม่สนใจปัญหา UseValueOf เมื่อใช้ K2 UAST
ปัญหาที่ไม่คาดคิดจากโปรเจ็กต์อื่นที่เครื่องมือวิเคราะห์ซอร์สโค้ดของ Android แจ้ง
Android Lint ล้มเหลวในไลบรารี KMP ที่มี `property 'variantInputs.name' doesn't have a configured value.`
การผสานรวม Lint
ข้อผิดพลาดของ Lint DuplicatePlatformClasses จากการขึ้นต่อกันของ testImplementation
Shrinker (R8)
java.lang.VerifyError: Verifier rejected class
Build ค้างอยู่ที่ :minifyReleaseWithR8 เมื่อใช้ไลบรารี Apache POI
Kotlin 1.9 ทำให้ R8 ทำลาย Lambda ของ Kotlin หากมีการลบการตรวจสอบค่า Null

ปลั๊กอิน Android Gradle 8.2.1

ปัญหาที่แก้ไขแล้ว
ปลั๊กอิน Android Gradle
อย่าเรียกใช้งาน Dexing ในคลาสของโปรเจ็กต์ย่อยเมื่อมีการ Dex ผ่านการแปลงอาร์ติแฟกต์อยู่แล้ว
ปลั๊กอิน Android Gradle ล้มเหลวด้วย JavaVersion.VERSION_11 และ OpenJDK 21 ea
Dexer (D8)
บันทึกการแยกส่วนสำหรับ Android U
Shrinker (R8)
R8 สร้าง DEX ที่เสียซึ่งส่งผลให้เกิดข้อยกเว้นการแคสต์คลาสที่รันไทม์
R8 ทำให้การเปลี่ยนแปลงอินเทอร์เฟซเป็นอินเทอร์เฟซที่เข้าถึงไม่ได้
R8 Flurry SDK ขัดข้องกับ AGP 8.2.0
Android - R8 ทำให้คลาสย่อยของ LinearLayoutManager ขัดข้อง
ClassCastException ใน R8 เมื่อเปิดการเปลี่ยนแพ็กเกจและปิดการย่อ การปรับให้ยากต่อการอ่าน (Obfuscation) และการเพิ่มประสิทธิภาพ
R8 stuck in BridgeAnalyzer.analyzeMethod
R8 v8.2.33, "java.lang.VerifyError: Bad type on operand stack" รันไทม์ขัดข้องหลังการอัปเกรด

ปลั๊กอิน Android Gradle 8.2.2

ปัญหาที่แก้ไขแล้ว
ปลั๊กอิน Android Gradle
ตั้งค่าเวอร์ชัน JaCoCo ใน AGP 8.2.0 ไม่ได้
Dexer (D8)
[desugared library] Desugared library เวอร์ชัน 2.1 ใช้กับ R8 เวอร์ชันก่อนหน้าไม่ได้
การเพิ่มประสิทธิภาพจะทํางานแม้จะใช้เพียง D8 ใช่ไหม
Shrinker (R8)
[R8 8.3.21] R8 8.3.21 มีขนาดใหญ่กว่า R8 8.1.56 อยู่ 1.57 MB
class.getInterfaces() แสดงผลเป็นค่าว่าง