ปลั๊กอิน Android Gradle 3.6.0 (กุมภาพันธ์ 2020)

ปลั๊กอิน Android เวอร์ชันนี้ต้องการสิ่งต่อไปนี้

ฟีเจอร์ใหม่

ปลั๊กอิน 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 ได้ ที่มีการประทับเวลาสำหรับเหตุการณ์คอมไพเลอร์เหล่านี้เพื่อให้คุณสามารถ เข้าใจเวลาที่ต้องใช้ในการสร้างโปรเจ็กต์ เพื่อส่งออกบิลด์นี้ โปรดทำตามขั้นตอนต่อไปนี้

  1. เพิ่มแฟล็ก -Pandroid.enableProfileJson=true เมื่อ กำลังใช้บิลด์ Gradle เช่น

    gradlew assembleDebug -Pandroid.enableProfileJson=true

  2. เปิดเบราว์เซอร์ Chrome และพิมพ์ chrome://tracing แถบค้นหา

  3. คลิกปุ่มโหลด และไปยัง <var>project-root</var>/build/android-profile เพื่อค้นหาไฟล์ ไฟล์ได้รับการตั้งชื่อแล้ว profile-<var>timestamp</var>.json.gz

คุณสามารถดูข้อมูลการระบุแหล่งที่มาของบิลด์เนทีฟใกล้กับด้านบนของ ผู้ดู:

การติดตามการระบุแหล่งที่มาบิลด์เนทีฟใน Chrome

การเปลี่ยนแปลงลักษณะการทำงาน

เมื่อใช้ปลั๊กอินเวอร์ชันนี้ คุณอาจพบสิ่งต่อไปนี้ การเปลี่ยนแปลงของลักษณะการทำงาน

ไลบรารีเนทีฟได้รับการบีบอัดโดย ค่าเริ่มต้น

เมื่อคุณสร้างแอป ปลั๊กอินจะตั้งค่า 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";
                  }
                }