ปลั๊กอิน 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 }
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบเกี่ยวกับการเชื่อมโยงมุมมองView Binding
การรองรับปลั๊กอิน Maven Publish
ปลั๊กอิน Android Gradle รองรับปลั๊กอิน Maven Publish Gradle ซึ่งช่วยให้คุณเผยแพร่สิ่งประดิษฐ์บิลด์ไปยัง ที่เก็บ Apache Maven ได้ ปลั๊กอิน Android Gradle จะสร้าง คอมโพเนนต์ สำหรับอาร์ติแฟกต์ของตัวแปรบิลด์แต่ละรายการในโมดูลแอปหรือไลบรารี ซึ่งคุณสามารถ ใช้เพื่อปรับแต่ง การเผยแพร่ ไปยังที่เก็บ Maven ได้
ดูข้อมูลเพิ่มเติมได้ที่หน้าเกี่ยวกับวิธีใช้ปลั๊กอิน Maven Publish plugin
เครื่องมือการสร้างแพ็กเกจเริ่มต้นใหม่
เมื่อสร้างแอปเวอร์ชันดีบัก ปลั๊กอินจะใช้เครื่องมือการสร้างแพ็กเกจใหม่ ที่ชื่อว่า zipflinger เพื่อสร้าง APK เครื่องมือใหม่นี้ควรช่วยเพิ่มความเร็วในการสร้าง หากเครื่องมือการสร้างแพ็กเกจใหม่
ทำงานไม่เป็นไปตามที่คาดไว้
โปรดรายงานข้อบกพร่อง คุณสามารถกลับไปใช้เครื่องมือการสร้างแพ็กเกจแบบเก่าได้โดยใส่ข้อมูลต่อไปนี้ในไฟล์ gradle.properties
android.useNewApkCreator=false
การระบุแหล่งที่มาของบิลด์เนทีฟ
ตอนนี้คุณสามารถกำหนดระยะเวลาที่ Clang ใช้ในการสร้างและลิงก์ไฟล์ C/C++ แต่ละไฟล์ในโปรเจ็กต์ได้แล้ว Gradle สามารถแสดงผลการติดตาม Chrome ที่มีไทม์สแตมป์สำหรับเหตุการณ์คอมไพเลอร์เหล่านี้ เพื่อให้คุณเข้าใจเวลาที่ต้องใช้ในการสร้างโปรเจ็กต์ได้ดียิ่งขึ้น หากต้องการแสดงผลไฟล์การระบุแหล่งที่มาของบิลด์ นี้ ให้ทำดังนี้
-
เพิ่มแฟล็ก
-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 สร้างแพ็กเกจไลบรารีเนทีฟที่บีบอัด แทน ให้ใส่ข้อมูลต่อไปนี้ในไฟล์ Manifest ของแอป
<application
android:extractNativeLibs="true"
... >
</application>
หมายเหตุ: แอตทริบิวต์ extractNativeLibs manifest ถูกแทนที่ด้วยตัวเลือก useLegacyPackaging DSL ดูข้อมูลเพิ่มเติมได้ในหมายเหตุประจำรุ่น
ใช้ DSL เพื่อสร้างแพ็กเกจไลบรารีเนทีฟที่บีบอัด
เวอร์ชัน NDK เริ่มต้น
หากคุณดาวน์โหลด NDK หลายเวอร์ชัน ตอนนี้ปลั๊กอิน Android Gradle
จะเลือกเวอร์ชันเริ่มต้นที่จะใช้ในการคอมไพล์ไฟล์ซอร์สโค้ด
ก่อนหน้านี้ ปลั๊กอินจะเลือก NDK เวอร์ชันล่าสุดที่ดาวน์โหลด
ใช้พร็อพเพอร์ตี้ android.ndkVersion ในไฟล์
build.gradle ของโมดูลเพื่อลบล้างค่าเริ่มต้นที่ปลั๊กอินเลือก
การสร้างคลาส R ที่ง่ายขึ้น
ปลั๊กอิน Android Gradle ช่วยลดความซับซ้อนของคลาสพาธในการคอมไพล์โดย สร้างคลาส R เพียงคลาสเดียวสำหรับโมดูลไลบรารีแต่ละโมดูลในโปรเจ็กต์ และ แชร์คลาส R เหล่านั้นกับทรัพยากร Dependency ของโมดูลอื่นๆ การเพิ่มประสิทธิภาพนี้ ควรส่งผลให้บิลด์เร็วขึ้น แต่คุณต้องคำนึงถึง สิ่งต่อไปนี้
- เนื่องจากคอมไพเลอร์แชร์คลาส R กับทรัพยากร Dependency ของโมดูลต้นน้ำ จึงเป็นเรื่องสำคัญที่แต่ละโมดูลในโปรเจ็กต์จะต้องใช้ชื่อแพ็กเกจที่ไม่ซ้ำกัน
- การมองเห็นคลาส R ของไลบรารีสำหรับทรัพยากร Dependency อื่นๆ ของโปรเจ็กต์ กำหนดโดยการกำหนดค่าที่ใช้ในการรวมไลบรารีเป็น ทรัพยากร Dependency เช่น หากไลบรารี A รวมไลบรารี B เป็นทรัพยากร Dependency 'api' ไลบรารี A และไลบรารีอื่นๆ ที่ขึ้นต่อกันกับไลบรารี A จะเข้าถึงคลาส R ของไลบรารี B ได้ อย่างไรก็ตาม ไลบรารีอื่นๆ อาจเข้าถึงคลาส R ของไลบรารี B ไม่ได้ หากไลบรารี A ใช้การกำหนดค่าทรัพยากร Dependency
implementationดูข้อมูลเพิ่มเติมได้ที่ เกี่ยวกับการกำหนดค่าทรัพยากร Dependency
นำทรัพยากรที่ขาดหายไปจากการกำหนดค่าเริ่มต้น ออก
สำหรับโมดูลไลบรารี หากคุณรวมทรัพยากรสำหรับภาษาที่คุณ
ไม่ได้รวมไว้ในชุดทรัพยากรเริ่มต้น เช่น หากคุณรวม
hello_world เป็นทรัพยากรสตริงใน
/values-es/strings.xml แต่ไม่ได้กำหนดทรัพยากรดังกล่าวใน
/values/strings.xml ปลั๊กอิน Android Gradle จะไม่รวมทรัพยากรดังกล่าวเมื่อคอมไพล์โปรเจ็กต์อีกต่อไป การเปลี่ยนแปลงลักษณะการทำงานนี้
ควรส่งผลให้เกิดข้อยกเว้น Resource Not Found ในรันไทม์
และความเร็วในการสร้างดีขึ้น
ตอนนี้ D8 จะปฏิบัติตามนโยบายการเก็บรักษา CLASS สำหรับคำอธิบายประกอบ
เมื่อคอมไพล์แอป ตอนนี้ D8 จะปฏิบัติตามเมื่อคำอธิบายประกอบใช้นโยบายการเก็บรักษา CLASS และคำอธิบายประกอบเหล่านั้นจะไม่พร้อมใช้งานใน รันไทม์อีกต่อไป ลักษณะการทำงานนี้จะเกิดขึ้นเมื่อตั้งค่า SDK เป้าหมายของแอปเป็น ระดับ API 23 ด้วย ซึ่งก่อนหน้านี้อนุญาตให้เข้าถึงคำอธิบายประกอบเหล่านี้ในระหว่าง รันไทม์เมื่อคอมไพล์แอปโดยใช้ปลั๊กอิน Android Gradle และ D8 เวอร์ชันเก่า
การเปลี่ยนแปลงลักษณะการทำงานอื่นๆ
-
aaptOptions.noCompressไม่พิจารณาตัวพิมพ์เล็กและใหญ่ในทุก แพลตฟอร์ม (ทั้งสำหรับ APK และ App Bundle) และจะพิจารณาเส้นทางที่ใช้อักขระตัวพิมพ์ใหญ่ -
ตอนนี้การเชื่อมโยงข้อมูลจะเพิ่มขึ้นทีละน้อยโดยค่าเริ่มต้น ดูข้อมูลเพิ่มเติมได้ที่ ปัญหา #110061530.
-
ตอนนี้ Unit Test ทั้งหมด รวมถึง Unit Test ของ Robolectric สามารถแคชได้อย่างสมบูรณ์ ดูข้อมูลเพิ่มเติมได้ที่ ปัญหา #115873047.
แก้ไขข้อบกพร่อง
ปลั๊กอิน Android Gradle เวอร์ชันนี้มีการแก้ไขข้อบกพร่องต่อไปนี้
- ตอนนี้โมดูลไลบรารีที่ใช้ การเชื่อมโยงข้อมูลรองรับ Unit Test ของ Robolectric แล้ว ดูข้อมูลเพิ่มเติมได้ที่ ปัญหา #126775542
- ตอนนี้คุณสามารถเรียกใช้งาน
connectedAndroidTestในหลายโมดูลพร้อมกันได้ขณะที่เปิดใช้โหมดการดำเนินการแบบขนานของ Gradle
ปัญหาที่ทราบแล้ว
ส่วนนี้อธิบายปัญหาที่ทราบแล้วซึ่งพบในปลั๊กอิน Android Gradle 3.6.0
ประสิทธิภาพของงาน Android Lint ช้า
Android Lint อาจใช้เวลานานขึ้นมากในการดำเนินการให้เสร็จสมบูรณ์ในบางโปรเจ็กต์เนื่องจากมีการเกิดปัญหาซ้ำในโครงสร้างพื้นฐานการแยกวิเคราะห์ ซึ่งส่งผลให้การคำนวณประเภทที่อนุมานสำหรับแลมบ์ดาในโครงสร้างโค้ดบางอย่างช้าลง
ระบบรายงานปัญหาดังกล่าวเป็น ข้อบกพร่องใน IDEA และจะได้รับการแก้ไขในปลั๊กอิน Android Gradle 4.0
คลาส Manifest หายไป {:#agp-missing-manifest}
หากแอปกำหนดสิทธิ์ที่กำหนดเองในไฟล์ Manifest โดยปกติแล้วปลั๊กอิน Android Gradle จะสร้างคลาส 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"; } }