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