ปลั๊กอิน Android Gradle 3.6.0 (กุมภาพันธ์ 2020)
ปลั๊กอิน Android เวอร์ชันนี้ต้องใช้สิ่งต่อไปนี้
เวอร์ชันต่ำสุด | เวอร์ชันเริ่มต้น | หมายเหตุ | |
---|---|---|---|
Gradle | 5.6.4 | 5.6.4 | ดูข้อมูลเพิ่มเติมได้ที่การอัปเดต Gradle |
เครื่องมือสร้าง SDK | 28.0.3 | 28.0.3 | ติดตั้งหรือกําหนดค่าเครื่องมือสร้าง SDK |
การอัปเดตเล็กน้อยนี้รองรับความเข้ากันได้กับการตั้งค่าเริ่มต้นและฟีเจอร์ใหม่สำหรับ ระดับการเข้าถึงแพ็กเกจใน Android 11
ดูรายละเอียดได้ที่บันทึกประจำรุ่น 4.0.1
ฟีเจอร์ใหม่
ปลั๊กอิน Android Gradle เวอร์ชันนี้มีฟีเจอร์ใหม่ต่อไปนี้
ดูการเชื่อมโยง
การเชื่อมโยงมุมมองจะเพิ่มความปลอดภัยเมื่อคอมไพล์เมื่ออ้างอิงมุมมองในโค้ด ตอนนี้คุณแทนที่ findViewById()
ด้วยข้อมูลอ้างอิงคลาสการเชื่อมโยงที่สร้างขึ้นโดยอัตโนมัติได้แล้ว หากต้องการเริ่มใช้การเชื่อมโยงมุมมอง ให้ใส่ข้อมูลต่อไปนี้ในไฟล์ build.gradle
ของโมดูลแต่ละรายการ
android { viewBinding.enabled = true }
android { viewBinding.enabled = true }
ดูข้อมูลเพิ่มเติมได้ที่ดูเอกสารประกอบเกี่ยวกับการเชื่อมโยง
การรองรับปลั๊กอิน Maven Publish
ปลั๊กอิน Android Gradle รองรับปลั๊กอิน Maven Publish Gradle ซึ่งช่วยให้คุณเผยแพร่อาร์ติแฟกต์การสร้างไปยังที่เก็บ Apache Maven ได้ ปลั๊กอิน Gradle ของ Android จะสร้างคอมโพเนนต์สำหรับอาร์ติแฟกต์ตัวแปรของบิลด์แต่ละรายการในแอปหรือโมดูลไลบรารีที่คุณสามารถใช้เพื่อปรับแต่งการเผยแพร่ไปยังที่เก็บ Maven
ดูข้อมูลเพิ่มเติมได้ที่หน้าเกี่ยวกับวิธีใช้ปลั๊กอิน Maven Publish
เครื่องมือการสร้างแพ็กเกจเริ่มต้นใหม่
เมื่อสร้างแอปเวอร์ชันแก้ไขข้อบกพร่อง ปลั๊กอินจะใช้เครื่องมือแพ็กเกจใหม่ที่เรียกว่า zipflinger เพื่อสร้าง APK เครื่องมือใหม่นี้ควรช่วยปรับปรุงความเร็วในการสร้าง หากเครื่องมือแพ็กเกจใหม่ไม่ทำงานตามที่คาดไว้ โปรดรายงานข้อบกพร่อง คุณเปลี่ยนกลับไปใช้เครื่องมือแพ็กเกจแบบเก่าได้โดยใส่ข้อมูลต่อไปนี้ในไฟล์ gradle.properties
android.useNewApkCreator=false
การระบุแหล่งที่มาของการสร้างแบบเนทีฟ
ตอนนี้คุณกำหนดระยะเวลาที่ Clang ใช้ในการสร้างและลิงก์ไฟล์ C/C++ แต่ละไฟล์ในโปรเจ็กต์ได้แล้ว Gradle สามารถแสดงผลร่องรอย Chrome ที่มีการประทับเวลาสำหรับเหตุการณ์คอมไพเลอร์เหล่านี้เพื่อให้คุณเข้าใจเวลาที่จำเป็นในการสร้างโปรเจ็กต์ได้ดียิ่งขึ้น หากต้องการแสดงผลไฟล์การระบุแหล่งที่มาของบิลด์นี้ ให้ทําดังนี้
-
เพิ่ม Flag
-Pandroid.enableProfileJson=true
เมื่อเรียกใช้การบิลด์ Gradle เช่นgradlew assembleDebug -Pandroid.enableProfileJson=true
-
เปิดเบราว์เซอร์ Chrome แล้วพิมพ์
chrome://tracing
ในแถบค้นหา -
คลิกปุ่มโหลดและไปที่
<var>project-root</var>/build/android-profile
เพื่อค้นหาไฟล์ ไฟล์มีชื่อว่าprofile-<var>timestamp</var>.json.gz
คุณดูข้อมูลการระบุแหล่งที่มาของการสร้างเนทีฟได้ที่ด้านบนของโปรแกรมดู
การเปลี่ยนแปลงลักษณะการทำงาน
เมื่อใช้ปลั๊กอินเวอร์ชันนี้ คุณอาจพบการเปลี่ยนแปลงต่อไปนี้ในลักษณะการทํางาน
ไลบรารีเนทีฟที่แพ็กเกจโดยไม่ได้บีบอัดโดยค่าเริ่มต้น
เมื่อคุณสร้างแอป ปลั๊กอินจะตั้งค่า extractNativeLibs
เป็น "false"
โดยค่าเริ่มต้น กล่าวคือ ไลบรารีเนทีฟจะจัดแนวหน้าเว็บและแพ็กเกจแบบไม่บีบอัด แม้ว่าการอัปโหลดด้วยวิธีนี้จะส่งผลให้ไฟล์มีขนาดใหญ่ขึ้น แต่ผู้ใช้จะได้รับประโยชน์ต่อไปนี้
- ขนาดการดาวน์โหลดแอปเล็กลงเนื่องจากแพลตฟอร์มเข้าถึงไลบรารีแบบเนทีฟได้โดยตรงจาก APK ที่ติดตั้งโดยไม่ต้องสร้างสำเนาของไลบรารี
- ขนาดการดาวน์โหลดที่เล็กลง เนื่องจากโดยทั่วไปการบีบอัดของ Play Store จะมีประสิทธิภาพดีกว่าเมื่อคุณรวมไลบรารีแบบเนทีฟที่ไม่ได้บีบอัดไว้ใน APK หรือ Android App Bundle
หากต้องการให้ Android Gradle Plugin แพ็กเกจไลบรารีแบบเนทีฟที่บีบอัดแทน ให้ใส่ข้อมูลต่อไปนี้ในไฟล์ Manifest ของแอป
<application
android:extractNativeLibs="true"
... >
</application>
หมายเหตุ: ระบบได้แทนที่ตัวเลือก useLegacyPackaging
DSL กับแอตทริบิวต์ extractNativeLibs
manifest แล้ว ดูข้อมูลเพิ่มเติมได้ที่บันทึกประจำรุ่นใช้ DSL เพื่อแพ็กเกจไลบรารีเนทีฟที่บีบอัด
เวอร์ชัน NDK เริ่มต้น
หากคุณดาวน์โหลด NDK หลายเวอร์ชัน ตอนนี้ปลั๊กอิน Gradle ของ Android จะเลือกเวอร์ชันเริ่มต้นที่จะใช้ในการคอมไพล์ไฟล์ซอร์สโค้ด
ก่อนหน้านี้ ปลั๊กอินจะเลือก NDK เวอร์ชันที่ดาวน์โหลดล่าสุด
ใช้พร็อพเพอร์ตี้ android.ndkVersion
ในไฟล์ build.gradle
ของโมดูลเพื่อลบล้างค่าเริ่มต้นที่ปลั๊กอินเลือก
การสร้างคลาส R ที่ง่ายขึ้น
ปลั๊กอิน Android Gradle ช่วยลดความซับซ้อนของเส้นทางการคอมไพล์ด้วยการสร้างคลาส R เพียงคลาสเดียวสําหรับโมดูลไลบรารีแต่ละรายการในโปรเจ็กต์ และแชร์คลาส R เหล่านั้นกับโมดูล Dependency อื่นๆ การเพิ่มประสิทธิภาพนี้ควรทําให้บิลด์เร็วขึ้น แต่คุณต้องคำนึงถึงสิ่งต่อไปนี้
- เนื่องจากคอมไพเลอร์จะแชร์คลาส R กับโมดูลที่ขึ้นต่อกัน คุณจึงควรให้แต่ละโมดูลในโปรเจ็กต์ใช้ชื่อแพ็กเกจที่ไม่ซ้ำกัน
- ระดับการเข้าถึงคลาส R ของไลบรารีสำหรับทรัพยากร Dependency อื่นๆ ของโปรเจ็กต์จะกำหนดโดยการกำหนดค่าที่ใช้รวมไลบรารีเป็น Dependency ตัวอย่างเช่น หากไลบรารี ก มีไลบรารี ข เป็นไลบรารีที่ต้องพึ่งพา "api" ไลบรารี ก และไลบรารีอื่นๆ ที่ขึ้นต่อกันกับไลบรารี ก จะมีสิทธิ์เข้าถึงคลาส R ของไลบรารี ข แต่ไลบรารีอื่นๆ อาจไม่มีสิทธิ์เข้าถึงชั้นเรียน R ของไลบรารี ข. หากไลบรารี ก ใช้การกำหนดค่าความเกี่ยวข้อง
implementation
อ่านข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าความเกี่ยวข้อง
นำทรัพยากรที่ขาดหายไปจากการกําหนดค่าเริ่มต้นออก
สำหรับโมดูลไลบรารี หากคุณรวมทรัพยากรสำหรับภาษาที่ไม่ได้รวมไว้ในชุดทรัพยากรเริ่มต้น เช่น หากคุณรวม hello_world
เป็นทรัพยากรสตริงใน /values-es/strings.xml
แต่ไม่ได้กำหนดทรัพยากรนั้นใน /values/strings.xml
ปลั๊กอิน Gradle ของ Android จะไม่รวมทรัพยากรนั้นอีกต่อไปเมื่อคอมไพล์โปรเจ็กต์ การเปลี่ยนแปลงลักษณะการทํางานนี้ควรส่งผลให้มีResource Not Found
ข้อยกเว้นรันไทม์น้อยลงและความเร็วในการบิลด์ดีขึ้น
ตอนนี้ D8 ปฏิบัติตามนโยบายการเก็บรักษา CLASS สำหรับคำอธิบายประกอบแล้ว
เมื่อคอมไพล์แอป ตอนนี้ D8 จะพิจารณาเมื่อคำอธิบายประกอบใช้นโยบายการเก็บรักษา CLASS และคำอธิบายประกอบเหล่านั้นจะไม่พร้อมใช้งานอีกต่อไปเมื่อรันไทม์ ลักษณะการทำงานนี้จะปรากฏขึ้นเมื่อตั้งค่า SDK เป้าหมายของแอปเป็น API ระดับ 23 ซึ่งก่อนหน้านี้อนุญาตให้เข้าถึงคําอธิบายประกอบเหล่านี้ระหว่างรันไทม์เมื่อคอมไพล์แอปโดยใช้ Android Gradle Plugin และ D8 เวอร์ชันเก่า
การเปลี่ยนแปลงลักษณะการทำงานอื่นๆ
-
aaptOptions.noCompress
จะไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ในแพลตฟอร์มทั้งหมดอีกต่อไป (ทั้งสำหรับ APK และ App Bundle) และจะยึดตามเส้นทางที่ใช้อักขระตัวพิมพ์ใหญ่ -
ตอนนี้การเชื่อมโยงข้อมูลจะเพิ่มข้อมูลโดยค่าเริ่มต้น ดูข้อมูลเพิ่มเติมได้ที่ปัญหา #110061530
-
ตอนนี้การทดสอบ 1 หน่วยทั้งหมด รวมถึงการทดสอบ 1 หน่วยของ Roboelectric แคชได้ทั้งหมดแล้ว ดูข้อมูลเพิ่มเติมได้ที่ปัญหา #115873047
การแก้ไขข้อบกพร่อง
ปลั๊กอิน Android Gradle เวอร์ชันนี้มีการแก้ไขข้อบกพร่องต่อไปนี้
- ตอนนี้โมดูลไลบรารีที่ใช้การเชื่อมโยงข้อมูลรองรับการทดสอบหน่วย Robolectric แล้ว ดูข้อมูลเพิ่มเติมได้ที่ ปัญหา #126775542
- ตอนนี้คุณสามารถเรียกใช้
connectedAndroidTest
งานในหลายข้อบังคับได้ขณะที่เปิดใช้โหมดการเรียกใช้แบบขนานของ Gradle
ปัญหาที่ทราบ
ส่วนนี้จะอธิบายปัญหาที่ทราบซึ่งอยู่ในปลั๊กอิน Android Gradle 3.6.0
ประสิทธิภาพของงาน Android Lint ช้า
Android Lint อาจใช้เวลานานกว่ามากในการตรวจสอบโปรเจ็กต์บางโปรเจ็กต์เนื่องจากการถดถอยในโครงสร้างพื้นฐานการแยกวิเคราะห์ ซึ่งส่งผลให้การคํานวณประเภทที่อนุมานสําหรับ Lambda ในโครงสร้างโค้ดบางรายการช้าลง
ปัญหานี้ได้รับการรายงานว่าเป็นข้อบกพร่องใน IDEA และจะได้รับการแก้ไขในปลั๊กอิน Android Gradle 4.0
ไม่มีคลาส Manifest {:#agp-missing-manifest}
หากแอปกำหนดสิทธิ์ที่กำหนดเองในไฟล์ Manifest โดยปกติแล้วปลั๊กอิน Gradle ของ Android จะสร้างคลาส Manifest.java
ที่มีสิทธิ์ที่กำหนดเองเป็นสตริงคงที่ ปลั๊กอินจะรวมคลาสนี้ไว้ในแอปของคุณ เพื่อให้คุณอ้างอิงสิทธิ์เหล่านั้นได้ง่ายขึ้นเมื่อรันไทม์
การสร้างคลาสไฟล์ Manifest ใช้งานไม่ได้ในปลั๊กอิน Android Gradle 3.6.0
หากคุณสร้างแอปด้วยปลั๊กอินเวอร์ชันนี้และมีการอ้างอิงคลาสไฟล์ Manifest คุณอาจเห็นClassNotFoundException
ข้อยกเว้น หากต้องการแก้ไขปัญหานี้ ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้
-
อ้างอิงสิทธิ์ที่กำหนดเองตามชื่อที่มีคุณสมบัติครบถ้วน เช่น
"com.example.myapp.permission.DEADLY_ACTIVITY"
-
กําหนดค่าคงที่ของคุณเอง ดังที่แสดงด้านล่าง
public final class CustomPermissions { public static final class permission { public static final String DEADLY_ACTIVITY="com.example.myapp.permission.DEADLY_ACTIVITY"; } }