ปลั๊กอิน Android Gradle 3.4.0 (เมษายน 2019)

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

เวอร์ชันต่ำสุด เวอร์ชันเริ่มต้น หมายเหตุ
Gradle 5.1.1 5.1.1 ดูข้อมูลเพิ่มเติมได้ที่การอัปเดต Gradle เมื่อใช้ Gradle 5.0 ขึ้นไป ขนาดกองหน่วยความจำของเดรัม Gradle เริ่มต้นจะลดลงจาก 1 GB เป็น 512 MB ซึ่งอาจส่งผลให้ประสิทธิภาพของบิลด์ลดลง หากต้องการลบล้างการตั้งค่าเริ่มต้นนี้ ให้ระบุขนาดฮีปของ Gradle daemon ในไฟล์ gradle.properties ของโปรเจ็กต์
เครื่องมือสร้าง SDK 28.0.3 28.0.3 ติดตั้งหรือกําหนดค่าเครื่องมือสร้าง SDK

3.4.3 (กรกฎาคม 2020)

การอัปเดตย่อยนี้รองรับความเข้ากันได้กับการตั้งค่าและฟีเจอร์เริ่มต้นใหม่สำหรับ ระดับการเข้าถึงแพ็กเกจใน Android 11

ดูรายละเอียดได้ที่บันทึกประจำรุ่น 4.0.1

3.4.2 (กรกฎาคม 2019)

การอัปเดตเล็กน้อยนี้รองรับ Android Studio 3.4.2 และรวมการแก้ไขข้อบกพร่องและการปรับปรุงประสิทธิภาพหลายรายการ หากต้องการดูรายการข้อบกพร่องที่ควรทราบ โปรดอ่านโพสต์ที่เกี่ยวข้องใน บล็อกการอัปเดตรุ่น

3.4.1 (พฤษภาคม 2019)

การอัปเดตเล็กน้อยนี้รองรับ Android Studio 3.4.1 รวมถึงมีการแก้ไขข้อบกพร่องและการปรับปรุงประสิทธิภาพต่างๆ หากต้องการดูรายการข้อบกพร่องที่ควรทราบ โปรดอ่านโพสต์ที่เกี่ยวข้องใน บล็อกการอัปเดตรุ่น

ฟีเจอร์ใหม่

  • การกำหนดค่าทรัพยากร Dependency ของการตรวจสอบ Lint แบบใหม่: มีการเปลี่ยนแปลงลักษณะการทำงานของ lintChecks และเปิดตัวการกำหนดค่าทรัพยากร Dependency ใหม่ที่ชื่อว่า lintPublish เพื่อให้คุณควบคุมได้มากขึ้นว่าจะจัดแพ็กเกจการตรวจสอบ Lint ใดในไลบรารี Android

    • lintChecks: นี่เป็นการกำหนดค่าที่มีอยู่ซึ่งคุณควรใช้สำหรับการตรวจสอบ Lint ที่ต้องการเรียกใช้เฉพาะเมื่อสร้างโปรเจ็กต์ในเครื่องเท่านั้น หากก่อนหน้านี้คุณใช้การกำหนดค่า Dependency เพื่อรวมการตรวจสอบ Lint ใน AAR ที่เผยแพร่ คุณต้องย้ายข้อมูล Dependency เหล่านั้นเพื่อใช้การกำหนดค่า lintPublish ใหม่ตามที่อธิบายไว้ด้านล่างแทนlintChecks
    • lintPublish: ใช้การกําหนดค่าใหม่นี้ในโปรเจ็กต์ไลบรารีสําหรับการตรวจสอบ Lint ที่ต้องการรวมไว้ใน AAR ที่เผยแพร่ ดังที่แสดงด้านล่าง ซึ่งหมายความว่าโปรเจ็กต์ที่ใช้ไลบรารีของคุณจะใช้การตรวจสอบ Lint เหล่านั้นด้วย

    ตัวอย่างโค้ดต่อไปนี้ใช้การกำหนดค่าทั้ง 2 รายการในโปรเจ็กต์ไลบรารี Android ในพื้นที่

    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks project(':lint')
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish project(':lintpublish')
    }
            
    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks(project(":lint"))
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish(project(":lintpublish"))
        }
            
    • โดยทั่วไปแล้ว งานบรรจุภัณฑ์และการรับรองควรปรับปรุงความเร็วของงานโดยรวม หากคุณสังเกตเห็นประสิทธิภาพถดถอยที่เกี่ยวข้องกับงานเหล่านี้ โปรดรายงานข้อบกพร่อง

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

  • คำเตือนการเลิกใช้งานปลั๊กอินฟีเจอร์ Instant App ของ Android: หากคุณยังคงใช้ปลั๊กอิน com.android.feature เพื่อสร้าง Instant App อยู่ ปลั๊กอิน Android Gradle 3.4.0 จะแสดงคำเตือนการเลิกใช้งาน โปรดย้ายข้อมูล Instant App ของคุณไปใช้ปลั๊กอินฟีเจอร์แบบไดนามิกเพื่อให้คุณยังคงสร้าง Instant App ได้ในปลั๊กอินเวอร์ชันในอนาคต ซึ่งจะช่วยให้คุณเผยแพร่ทั้งประสบการณ์การใช้งานแบบติดตั้งและแบบใช้งานได้ทันทีจาก Android App Bundle รายการเดียวได้

  • เปิดใช้ R8 โดยค่าเริ่มต้น: R8 ผสานรวมการลดน้ำตาล การลดขนาด การสร้างความสับสน การเพิ่มประสิทธิภาพ และการถอดรหัสทั้งหมดในขั้นตอนเดียว ซึ่งส่งผลให้เกิดการปรับปรุงประสิทธิภาพบิลด์ที่สังเกตเห็นได้ R8 เปิดตัวในปลั๊กอิน Android Gradle 3.3.0 และตอนนี้เปิดใช้โดยค่าเริ่มต้นสำหรับทั้งโปรเจ็กต์แอปและไลบรารี Android ที่ใช้ปลั๊กอิน 3.4.0 ขึ้นไป

รูปภาพด้านล่างแสดงภาพรวมระดับสูงของกระบวนการคอมไพล์ก่อนเปิดตัว R8

ก่อน R8 ProGuard เป็นขั้นตอนคอมไพล์ที่แตกต่างจากการแยกไฟล์ Dex และการแยก Sugar

ตอนนี้ R8 จะทำการปรับขนาด การทำให้ซอร์สโค้ดอ่านไม่ออก การเพิ่มประสิทธิภาพ และการแปลงโค้ดเป็นรูปแบบ Dex (D8) ทั้งหมดให้เสร็จสมบูรณ์ในขั้นตอนเดียวดังที่แสดงด้านล่าง

เมื่อใช้ R8 ระบบจะถอด Sugar ออก ย่อขนาด สร้างความสับสน เพิ่มประสิทธิภาพ และถอดรหัสทั้งหมดในขั้นตอนคอมไพล์เดียว

โปรดทราบว่า R8 ออกแบบมาให้ทำงานร่วมกับกฎ ProGuard ที่มีอยู่ คุณจึงอาจไม่ต้องดำเนินการใดๆ เพื่อรับประโยชน์จาก R8 อย่างไรก็ตาม เนื่องจาก ProGuard เป็นเทคโนโลยีที่แตกต่างจาก ProGuard ซึ่งออกแบบมา สำหรับโปรเจ็กต์ Android โดยเฉพาะ ดังนั้น การย่อขนาดและการเพิ่มประสิทธิภาพอาจทำให้ระบบนำโค้ด ที่ ProGuard ยังไม่มีออก ดังนั้นในสถานการณ์ที่ไม่น่าจะเกิดขึ้นนี้ คุณอาจต้องเพิ่มกฎเพิ่มเติมเพื่อเก็บโค้ดนั้นไว้ในเอาต์พุตของบิลด์

หากประสบปัญหาในการใช้ R8 ให้อ่านคำถามที่พบบ่อยเกี่ยวกับความเข้ากันได้ของ R8 เพื่อตรวจสอบว่ามีวิธีแก้ปัญหาดังกล่าวหรือไม่ หากไม่มีวิธีแก้ปัญหาที่บันทึกไว้ โปรดรายงานข้อบกพร่อง คุณสามารถปิดใช้ R8 ได้โดยเพิ่มบรรทัดใดบรรทัดหนึ่งต่อไปนี้ลงในไฟล์ gradle.properties ของโปรเจ็กต์

      # Disables R8 for Android Library modules only.
      android.enableR8.libraries = false
      # Disables R8 for all modules.
      android.enableR8 = false
      
    

หมายเหตุ: สำหรับประเภทบิลด์หนึ่งๆ หากคุณตั้งค่า useProguard เป็น false ในไฟล์ build.gradle ของโมดูลแอป ปลั๊กอิน Android Gradle จะใช้ R8 เพื่อลดขนาดโค้ดของแอปสำหรับประเภทบิลด์นั้น ไม่ว่าคุณจะปิดใช้ R8 ในไฟล์ gradle.properties ของโปรเจ็กต์หรือไม่ก็ตาม

  • เลิกใช้งาน ndkCompile แล้ว: ตอนนี้คุณจะได้รับข้อผิดพลาดในการสร้างหากพยายามใช้ ndkBuild เพื่อคอมไพล์ไลบรารีแบบเนทีฟ คุณควรใช้ CMake หรือ ndk-build เพื่อเพิ่มโค้ด C และ C++ ลงในโปรเจ็กต์แทน

ปัญหาที่ทราบ

  • ปัจจุบันเราไม่ได้บังคับใช้การใช้ชื่อแพ็กเกจที่ไม่ซ้ำกันอย่างถูกต้อง แต่จะใช้แนวทางที่เข้มงวดมากขึ้นในปลั๊กอินเวอร์ชันที่ใหม่กว่า ในปลั๊กอิน Android Gradle เวอร์ชัน 3.4.0 คุณเลือกใช้เพื่อตรวจสอบว่าโปรเจ็กต์ประกาศชื่อแพ็กเกจที่ยอมรับได้หรือไม่โดยการเพิ่มบรรทัดด้านล่างลงในไฟล์ gradle.properties

              android.uniquePackageNames = true
              
            

    ดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าชื่อแพ็กเกจผ่านปลั๊กอิน Android Gradle ได้ที่ตั้งค่ารหัสแอปพลิเคชัน