ปลั๊กอิน Android Gradle 3.4.0 (เมษายน 2019)
ปลั๊กอิน Android เวอร์ชันนี้ต้องใช้สิ่งต่อไปนี้
| เวอร์ชันขั้นต่ำ | เวอร์ชันเริ่มต้น | หมายเหตุ | |
|---|---|---|---|
| Gradle | 5.1.1 | 5.1.1 | ดูข้อมูลเพิ่มเติมได้ที่การอัปเดต Gradle เมื่อใช้ Gradle 5.0 ขึ้นไป ขนาดฮีปหน่วยความจำ Daemon ของ Gradle เริ่มต้นจะลดลงจาก 1 GB เป็น 512 MB ซึ่งอาจส่งผลให้ประสิทธิภาพของบิลด์ลดลง หากต้องการลบล้างการตั้งค่าเริ่มต้นนี้ ให้ระบุขนาดฮีปของ Gradle Daemon ในไฟล์ gradle.properties ของโปรเจ็กต์ |
| เครื่องมือสร้าง SDK | 28.0.3 | 28.0.3 | ติดตั้งหรือกำหนดค่าเครื่องมือสร้าง SDK |
การอัปเดตเล็กน้อยนี้รองรับความเข้ากันได้กับการตั้งค่าและฟีเจอร์เริ่มต้นใหม่สำหรับ ระดับการมองเห็นแพ็กเกจใน Android 11
ดูรายละเอียดได้ที่บันทึกประจำรุ่น 4.0.1
3.4.2 (กรกฎาคม 2019)
การอัปเดตเล็กน้อยนี้รองรับ Android Studio 3.4.2 และรวมถึงการแก้ไขข้อบกพร่องและการปรับปรุงประสิทธิภาพต่างๆ หากต้องการดูรายการการแก้ไขข้อบกพร่องที่สำคัญ โปรดอ่านโพสต์ที่เกี่ยวข้องใน บล็อกการอัปเดตการเผยแพร่
3.4.1 (พฤษภาคม 2019)
การอัปเดตเล็กน้อยนี้รองรับ Android Studio 3.4.1 และรวมถึงการแก้ไขข้อบกพร่องและการปรับปรุงประสิทธิภาพต่างๆ หากต้องการดูรายการการแก้ไขข้อบกพร่องที่สำคัญ โปรดอ่านโพสต์ที่เกี่ยวข้องใน บล็อกการอัปเดตการเผยแพร่
ฟีเจอร์ใหม่
-
การกำหนดค่าการขึ้นต่อกันของการตรวจสอบ Lint ใหม่: ลักษณะการทำงานของ
lintChecksมีการเปลี่ยนแปลง และมีการเปิดตัวการกำหนดค่าการขึ้นต่อกันใหม่lintPublishเพื่อให้คุณควบคุมได้มากขึ้นว่าการตรวจสอบ Lint ใดจะรวมอยู่ในแพ็กเกจไลบรารี Android ของคุณ-
lintChecks: นี่คือการกำหนดค่าที่มีอยู่ซึ่งคุณควรใช้สำหรับการตรวจสอบ Lint ที่ต้องการเรียกใช้เมื่อสร้างโปรเจ็กต์ในเครื่องเท่านั้น หากก่อนหน้านี้คุณใช้การกำหนดค่าทรัพยากร DependencylintChecksเพื่อรวมการตรวจสอบ Lint ใน AAR ที่เผยแพร่ คุณต้องย้ายข้อมูลทรัพยากร Dependency เหล่านั้นไปใช้การกำหนดค่าlintPublishใหม่แทน -
lintPublish: ใช้การกำหนดค่าใหม่นี้ในโปรเจ็กต์ไลบรารีสำหรับการตรวจสอบ Lint ที่คุณต้องการรวมไว้ใน AAR ที่เผยแพร่ ดังที่แสดงในตัวอย่างต่อไปนี้ ซึ่งหมายความว่าโปรเจ็กต์ที่ใช้ไลบรารีของคุณจะใช้การตรวจสอบ Lint เหล่านั้นด้วย
ตัวอย่างโค้ดต่อไปนี้ใช้การกำหนดค่าทรัพยากร Dependency ทั้ง 2 รายการในโปรเจ็กต์ไลบรารี Android ในเครื่อง
dependencies { // Executes lint checks from the ':lint' project at build time. lintChecks project(':lint') // Packages lint checks from the ':lintpublish' in the published AAR. lintPublish project(':lintpublish') }
dependencies { // Executes lint checks from the ':lint' project at build time. lintChecks(project(":lint")) // Packages lint checks from the ':lintpublish' in the published AAR. lintPublish(project(":lintpublish")) }
-
โดยทั่วไปแล้ว งานการแพ็กเกจและการรับรองควรมีความเร็วในการบิลด์โดยรวมที่ดีขึ้น หากคุณสังเกตเห็นประสิทธิภาพที่ลดลงซึ่งเกี่ยวข้องกับงานเหล่านี้ โปรดรายงานข้อบกพร่อง
-
การเปลี่ยนแปลงพฤติกรรม
-
คำเตือนการเลิกใช้งานปลั๊กอินฟีเจอร์ Android Instant Apps: หากคุณยังคงใช้ปลั๊กอิน
com.android.featureเพื่อสร้าง Instant App อยู่ ปลั๊กอิน Android Gradle 3.4.0 จะแสดงคำเตือนการเลิกใช้งาน หากต้องการให้แน่ใจว่าคุณยังคงสร้าง Instant App ในปลั๊กอินเวอร์ชันในอนาคตได้ ให้ย้ายข้อมูล Instant App ไปใช้ปลั๊กอินฟีเจอร์แบบไดนามิก ซึ่งจะช่วยให้คุณเผยแพร่ทั้งประสบการณ์การใช้งานแอปที่ติดตั้งและ Instant App จาก Android App Bundle เดียวได้ด้วย -
เปิดใช้ R8 โดยค่าเริ่มต้น: R8 ผสานรวมกระบวนการ Desugaring, การลดขนาด, การปรับให้ยากต่อการอ่าน (Obfuscation), การเพิ่มประสิทธิภาพ และการแปลงเป็น Dex ไว้ในขั้นตอนเดียว ซึ่งจะส่งผลให้ประสิทธิภาพของบิลด์ดีขึ้นอย่างเห็นได้ชัด R8 เปิดตัวในปลั๊กอิน Android Gradle 3.3.0 และตอนนี้เปิดใช้โดยค่าเริ่มต้นสำหรับทั้งโปรเจ็กต์แอปและไลบรารี Android ที่ใช้ปลั๊กอิน 3.4.0 ขึ้นไป
รูปภาพด้านล่างแสดงภาพรวมระดับสูงของกระบวนการคอมไพล์ก่อนที่จะมีการเปิดตัว R8
ตอนนี้เมื่อใช้ R8 กระบวนการ Desugaring, การลดขนาด, การสร้างความสับสน, การเพิ่มประสิทธิภาพ และการแปลงเป็น Dex (D8) จะเสร็จสมบูรณ์ในขั้นตอนเดียว ดังที่แสดงด้านล่าง
โปรดทราบว่า R8 ออกแบบมาให้ทำงานร่วมกับกฎ ProGuard ที่มีอยู่ คุณจึงไม่จำเป็นต้องดำเนินการใดๆ เพื่อรับประโยชน์จาก R8 อย่างไรก็ตาม เนื่องจากเป็นเทคโนโลยีที่แตกต่างจาก ProGuard ซึ่งออกแบบมาสำหรับโปรเจ็กต์ Android โดยเฉพาะ การลดขนาดและการเพิ่มประสิทธิภาพจึงอาจส่งผลให้มีการนำโค้ดที่ ProGuard อาจไม่ได้นำออกออกไป ดังนั้นในสถานการณ์ที่ไม่น่าจะเกิดขึ้นนี้ คุณอาจต้องเพิ่มกฎเพิ่มเติมเพื่อเก็บโค้ดนั้นไว้ในเอาต์พุตบิลด์
หากพบปัญหาในการใช้ R8 โปรดอ่านคำถามที่พบบ่อยเกี่ยวกับความเข้ากันได้ของ R8 เพื่อดูว่ามีวิธีแก้ปัญหาหรือไม่ หากไม่มีการบันทึกวิธีแก้ปัญหา โปรดรายงานข้อบกพร่อง
คุณปิดใช้ R8 ได้โดยเพิ่มบรรทัดใดบรรทัดหนึ่งต่อไปนี้ลงในไฟล์ gradle.properties ของโปรเจ็กต์
# Disables R8 for Android Library modules only.
android.enableR8.libraries = false
# Disables R8 for all modules.
android.enableR8 = false
หมายเหตุ: สำหรับบิลด์ประเภทหนึ่งๆ หากคุณตั้งค่า useProguard เป็น false ในไฟล์ build.gradle ของโมดูลแอป ปลั๊กอิน Android Gradle จะใช้ R8 เพื่อลดขนาดโค้ดของแอปสำหรับบิลด์ประเภทนั้น ไม่ว่าคุณจะปิดใช้ R8 ในไฟล์ gradle.properties ของโปรเจ็กต์หรือไม่ก็ตาม
-
ndkCompileเลิกใช้งานแล้ว: ตอนนี้คุณจะได้รับข้อผิดพลาดในการบิลด์หากพยายามใช้ndkBuildเพื่อคอมไพล์ไลบรารีแบบเนทีฟ คุณควรใช้ CMake หรือ ndk-build เพื่อเพิ่มโค้ด C และ C++ ลงในโปรเจ็กต์แทน
ปัญหาที่ทราบแล้ว
-
ปัจจุบันเราไม่ได้บังคับให้ใช้ชื่อแพ็กเกจที่ไม่ซ้ำกันอย่างถูกต้อง แต่จะเข้มงวดมากขึ้นในปลั๊กอินเวอร์ชันต่อๆ ไป ในปลั๊กอิน Android Gradle เวอร์ชัน 3.4.0 คุณสามารถเลือกรับเพื่อตรวจสอบว่าโปรเจ็กต์ประกาศชื่อแพ็กเกจที่ยอมรับได้หรือไม่โดยเพิ่มบรรทัดด้านล่างลงในไฟล์
gradle.propertiesandroid.uniquePackageNames = trueดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งชื่อแพ็กเกจผ่านปลั๊กอิน Android Gradle ได้ที่ตั้งค่ารหัสแอปพลิเคชัน