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

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

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

ฟีเจอร์ใหม่

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

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

    ตัวอย่างโค้ดต่อไปนี้ใช้การกำหนดค่าทรัพยากร Dependency ทั้ง 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 App ในปลั๊กอินเวอร์ชันในอนาคตได้ ให้ย้ายข้อมูล Instant App ไปใช้ปลั๊กอินฟีเจอร์แบบไดนามิก ซึ่งจะช่วยให้คุณเผยแพร่ทั้งประสบการณ์การใช้งานแอปที่ติดตั้งและ Instant App จาก Android App Bundle เดียวได้ด้วย

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

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

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

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

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

โปรดทราบว่า 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++ ลงในโปรเจ็กต์แทน

ปัญหาที่ทราบแล้ว

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

              android.uniquePackageNames = true
              
            

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