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

ปลั๊กอิน Android เวอร์ชันนี้กำหนดให้ต้องมีสิ่งต่อไปนี้

เวอร์ชันขั้นต่ำ เวอร์ชันเริ่มต้น หมายเหตุ
Gradle 5.1.1 5.1.1 ดูข้อมูลเพิ่มเติมได้ที่การอัปเดต Gradle เมื่อใช้ Gradle 5.0 ขึ้นไป ขนาดฮีปหน่วยความจำของ Gradle Daemon เริ่มต้นจะลดลงจาก 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 และมีการแก้ไขข้อบกพร่อง ต่างๆ รวมถึงการปรับปรุงประสิทธิภาพ หากต้องการดูรายการการแก้ไขข้อบกพร่องที่สำคัญ โปรดอ่านโพสต์ที่เกี่ยวข้องใน บล็อกการอัปเดตการเปิดตัว

ฟีเจอร์ใหม่

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

    • lintChecks: นี่คือการกำหนดค่าที่มีอยู่ซึ่ง คุณควรใช้สำหรับการตรวจสอบ Lint ที่ต้องการเรียกใช้เฉพาะเมื่อสร้าง โปรเจ็กต์ในเครื่อง หากก่อนหน้านี้คุณใช้การกำหนดค่าการขึ้นต่อกันของ lintChecks เพื่อรวมการตรวจสอบ Lint ไว้ใน AAR ที่เผยแพร่ คุณจะต้องย้ายข้อมูลการขึ้นต่อกันเหล่านั้นไปใช้การกำหนดค่า lintPublish ใหม่แทนตามที่อธิบายไว้ด้านล่าง
    • 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"))
        }
            
    • โดยทั่วไปแล้ว งานการแพ็กเกจและการลงนามควรมีการปรับปรุงความเร็วในการบิลด์โดยรวม หากพบว่าประสิทธิภาพลดลงเนื่องจาก งานเหล่านี้ โปรดรายงานข้อบกพร่อง

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

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

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

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

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

ตอนนี้ R8 จะดำเนินการ Desugaring, Shrinking, Obfuscating, การเพิ่มประสิทธิภาพ และ Dexing (D8) ในขั้นตอนเดียว ดังที่แสดงด้านล่าง

R8 จะดำเนินการ Desugaring, Shrinking, Obfuscating, การเพิ่มประสิทธิภาพ และ
      Dexing ทั้งหมดในขั้นตอนการคอมไพล์เดียว

โปรดทราบว่า R8 ออกแบบมาให้ทำงานร่วมกับกฎ ProGuard ที่มีอยู่แล้ว ดังนั้น คุณจึงไม่จำเป็นต้องดำเนินการใดๆ เพื่อรับประโยชน์จาก R8 อย่างไรก็ตาม เนื่องจากเป็นเทคโนโลยีที่แตกต่างจาก 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++ ลงในโปรเจ็กต์

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

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

              android.uniquePackageNames = true
              
            

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