ปลั๊กอิน Android Gradle 3.6.0 (กุมภาพันธ์ 2020)
ปลั๊กอิน Android เวอร์ชันนี้ต้องการสิ่งต่อไปนี้
เวอร์ชันต่ำสุด | เวอร์ชันเริ่มต้น | หมายเหตุ | |
---|---|---|---|
เกรเดิล | 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 มีการสนับสนุนสำหรับ ผู้เชี่ยวชาญ เผยแพร่ปลั๊กอิน 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>
หมายเหตุ: ไฟล์ Manifest ของ extractNativeLibs
มีการแทนที่แอตทริบิวต์ด้วย useLegacyPackaging
DSL
ตัวเลือก ดูข้อมูลเพิ่มเติมได้ในบันทึกประจำรุ่น
ใช้ DSL เพื่อบีบอัดแพ็กเกจ
ไลบรารีแบบเนทีฟ
เวอร์ชัน NDK เริ่มต้น
หากคุณดาวน์โหลด NDK หลายเวอร์ชัน ปลั๊กอิน Android Gradle
จะเลือกเวอร์ชันเริ่มต้นเพื่อคอมไพล์ไฟล์ซอร์สโค้ด
ก่อนหน้านี้ปลั๊กอินจะเลือก NDK เวอร์ชันล่าสุดที่ดาวน์โหลด
ใช้พร็อพเพอร์ตี้ android.ndkVersion
ในโมดูล
build.gradle
เพื่อลบล้างค่าเริ่มต้นที่ปลั๊กอินเลือก
การสร้างคลาส R อย่างง่าย
ปลั๊กอิน Android Gradle ทำให้ Classpath ในการคอมไพล์ง่ายขึ้นโดย สร้างคลาส R เพียง 1 รายการสำหรับโมดูลไลบรารีแต่ละรายการในโปรเจ็กต์และ การแชร์คลาส R เหล่านั้นกับทรัพยากร Dependency ของโมดูลอื่นๆ การเพิ่มประสิทธิภาพนี้ จะทำให้สร้างได้เร็วขึ้น แต่คุณต้องเก็บ ดังต่อไปนี้
- เนื่องจากคอมไพเลอร์แชร์คลาส R กับโมดูลอัปสตรีม ทรัพยากร Dependency จำเป็นที่แต่ละโมดูลในโปรเจ็กต์ของคุณต้องใช้ ชื่อแพ็กเกจที่ไม่ซ้ำกัน
- การเปิดเผยคลาส R ของไลบรารีต่อทรัพยากร Dependency ของโปรเจ็กต์อื่นๆ
จะกำหนดโดยการกำหนดค่าที่ใช้รวมไลบรารีเป็น
การพึ่งพา ตัวอย่างเช่น หากไลบรารี ก มีไลบรารี ข เป็น "api"
ทรัพยากร Dependency เดิม ไลบรารี A และไลบรารีอื่นๆ ที่ขึ้นอยู่กับไลบรารี A
สิทธิ์เข้าถึงคลาส R ของไลบรารี B แต่ไลบรารีอื่นๆ อาจไม่มี
สิทธิ์เข้าถึงคลาส R ของไลบรารี B หากไลบรารี A ใช้เมธอด
การกำหนดค่าทรัพยากร Dependency
implementation
เพื่อเรียนรู้ เพิ่มเติม อ่านเกี่ยวกับ การอ้างอิง และการกำหนดค่าของคุณ
นำทรัพยากรที่หายไปออกจากค่าเริ่มต้น การกำหนดค่า
สำหรับโมดูลห้องสมุด หากคุณรวมทรัพยากรสำหรับภาษาที่คุณ
ห้ามรวมอยู่ในชุดทรัพยากรเริ่มต้น เช่น หากใส่
hello_world
เป็นทรัพยากรสตริงใน
/values-es/strings.xml
แต่คุณไม่ได้กําหนดทรัพยากรนั้นใน
/values/strings.xml
- ปลั๊กอิน Android Gradle จะไม่มีให้บริการอีกต่อไป
รวมทรัพยากรนั้นเมื่อคอมไพล์โปรเจ็กต์ การเปลี่ยนแปลงลักษณะการทำงานนี้
น่าจะทำให้ข้อยกเว้นรันไทม์ลดลง Resource Not Found
และปรับปรุงความเร็วของ
การสร้างแอป
ตอนนี้ D8 เป็นไปตามนโยบายการเก็บรักษาข้อมูลของชั้นเรียนแล้ว สำหรับคำอธิบายประกอบ
เมื่อคอมไพล์แอป ตอนนี้ D8 จะทำงานตามเดิมเมื่อคำอธิบายประกอบใช้ CLASS นโยบายการเก็บรักษา และคำอธิบายประกอบเหล่านั้นจะไม่มีให้ใช้งานอีกต่อไปที่ รันไทม์ ลักษณะการทำงานนี้ก็เกิดขึ้นได้เช่นกันเมื่อตั้งค่า SDK เป้าหมายของแอปเป็น API ระดับ 23 ซึ่งก่อนหน้านี้ได้อนุญาตให้เข้าถึงคำอธิบายประกอบเหล่านี้ระหว่าง รันไทม์เมื่อคอมไพล์แอปโดยใช้ Android Gradle เวอร์ชันเก่า และ D8
การเปลี่ยนแปลงลักษณะการทำงานอื่นๆ
-
aaptOptions.noCompress
ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่แล้ว แพลตฟอร์ม (สำหรับทั้ง APK และ Bundle) และจะเป็นไปตามเส้นทางที่ใช้ อักขระตัวพิมพ์ใหญ่ -
ขณะนี้การเชื่อมโยงข้อมูลจะเป็นแบบเพิ่มขึ้นเรื่อยๆ โดยค่าเริ่มต้น ดูข้อมูลเพิ่มเติมได้ที่ ปัญหา #110061530
-
การทดสอบ 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 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"; } }