ปลั๊กอิน Android Gradle 3.4.0 (เมษายน 2019)
ปลั๊กอิน Android เวอร์ชันนี้ต้องใช้สิ่งต่อไปนี้
เวอร์ชันต่ำสุด | เวอร์ชันเริ่มต้น | หมายเหตุ | |
---|---|---|---|
Gradle | 5.1.1 | 5.1.1 | ดูข้อมูลเพิ่มเติมได้ที่การอัปเดต Gradle เมื่อใช้ Gradle 5.0 ขึ้นไป ขนาดกองหน่วยความจำของเดรัม Gradle เริ่มต้นจะลดลงจาก 1 GB เป็น 512 MB ซึ่งอาจส่งผลให้ประสิทธิภาพของบิลด์ลดลง หากต้องการลบล้างการตั้งค่าเริ่มต้นนี้ ให้ระบุขนาดฮีปของ Daemon ของ Gradle ในไฟล์ 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 รวมถึงมีการแก้ไขข้อบกพร่องและการปรับปรุงประสิทธิภาพต่างๆ หากต้องการดูรายการข้อบกพร่องที่ควรทราบ โปรดอ่านโพสต์ที่เกี่ยวข้องใน บล็อกการอัปเดตรุ่น
ฟีเจอร์ใหม่
-
การกำหนดค่าใหม่สำหรับทรัพยากรที่ต้องพึ่งพาในการตรวจสอบโปรแกรมวิเคราะห์โค้ดภาษาจาวา:
lintChecks
มีการเปลี่ยนแปลงลักษณะการทำงานและมีการเปิดตัวการกำหนดค่าใหม่สำหรับทรัพยากรที่ต้องพึ่งพาอย่างlintPublish
เพื่อให้คุณควบคุมได้มากขึ้นว่าจะรวมการตรวจสอบโปรแกรมวิเคราะห์โค้ดภาษาจาวาใดไว้ในไลบรารี Android-
lintChecks
: นี่เป็นการกำหนดค่าที่มีอยู่ซึ่งคุณควรใช้สำหรับการตรวจสอบ Lint ที่ต้องการเรียกใช้เฉพาะเมื่อสร้างโปรเจ็กต์ในเครื่องเท่านั้น หากก่อนหน้านี้คุณใช้การกำหนดค่า Dependency เพื่อรวมการตรวจสอบ Lint ไว้ใน AAR ที่เผยแพร่ คุณต้องย้ายข้อมูล Dependency เหล่านั้นเพื่อใช้การกำหนดค่าlintPublish
ใหม่ตามที่อธิบายไว้ด้านล่างแทนlintChecks
-
lintPublish
: ใช้การกำหนดค่าใหม่นี้ในโปรเจ็กต์ไลบรารีสำหรับการตรวจสอบ Lint ที่ต้องการรวมไว้ใน AAR ที่เผยแพร่ ดังที่แสดงด้านล่าง ซึ่งหมายความว่าโปรเจ็กต์ที่ใช้ไลบรารีของคุณจะใช้การตรวจสอบ Lint เหล่านั้นด้วย
ตัวอย่างโค้ดต่อไปนี้ใช้การกำหนดค่าทั้ง 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")) }
-
โดยทั่วไปแล้ว งานแพ็กเกจและการลงนามควรมีความเร็วโดยรวมในการสร้างที่ดีขึ้น หากสังเกตเห็นประสิทธิภาพที่ลดลงที่เกี่ยวข้องกับงานเหล่านี้ โปรดรายงานข้อบกพร่อง
-
การเปลี่ยนแปลงลักษณะการทำงาน
-
คำเตือนการเลิกใช้งานปลั๊กอินฟีเจอร์ Instant App ของ Android: หากคุณยังคงใช้ปลั๊กอิน
com.android.feature
เพื่อสร้าง Instant App อยู่ ปลั๊กอิน Android Gradle 3.4.0 จะแสดงคำเตือนการเลิกใช้งาน โปรดย้ายข้อมูล Instant App ของคุณไปใช้ปลั๊กอินฟีเจอร์แบบไดนามิกเพื่อให้คุณยังคงสร้าง Instant App ได้ในปลั๊กอินเวอร์ชันในอนาคต ซึ่งจะช่วยให้คุณเผยแพร่ทั้งประสบการณ์การใช้งานแบบติดตั้งและแบบใช้งานได้ทันทีจาก Android App Bundle รายการเดียวได้ -
เปิดใช้ R8 โดยค่าเริ่มต้น: R8 รวมการกรอง Sugar, การลดขนาด, การสร้างความสับสน, การเพิ่มประสิทธิภาพ และการแปลงเป็น Dex ไว้ในขั้นตอนเดียว ซึ่งส่งผลให้ประสิทธิภาพของบิลด์ดีขึ้นอย่างเห็นได้ชัด R8 เปิดตัวในปลั๊กอิน Android Gradle 3.3.0 และตอนนี้เปิดใช้โดยค่าเริ่มต้นสำหรับทั้งโปรเจ็กต์แอปและไลบรารี Android ที่ใช้ปลั๊กอิน 3.4.0 ขึ้นไป
รูปภาพด้านล่างแสดงภาพรวมระดับสูงของกระบวนการคอมไพล์ก่อนเปิดตัว R8
![ก่อน R8 ProGuard เป็นขั้นตอนคอมไพล์ที่แตกต่างจากการแยกไฟล์ Dex และการแยก Sugar](https://developer.android.google.cn/static/studio/images/build/r8/compile_with_d8_proguard.png?hl=th)
ตอนนี้ R8 จะทำการปรับขนาด การทำให้ซอร์สโค้ดอ่านไม่ออก การเพิ่มประสิทธิภาพ และการแปลงโค้ด Java เป็นรูปแบบ DEX (D8) ทั้งหมดในขั้นตอนเดียวดังที่แสดงด้านล่าง
![เมื่อใช้ R8 ระบบจะถอด Sugar ออก ย่อขนาด สร้างความสับสน เพิ่มประสิทธิภาพ และถอดรหัสทั้งหมดในขั้นตอนคอมไพล์เดียว](https://developer.android.google.cn/static/studio/images/build/r8/compile_with_r8.png?hl=th)
โปรดทราบว่า 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.properties
android.uniquePackageNames = true
ดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าชื่อแพ็กเกจผ่านปลั๊กอิน Android Gradle ได้ที่ตั้งค่ารหัสแอปพลิเคชัน