ปลั๊กอิน 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 Build Tools 28.0.3 28.0.3 ติดตั้ง หรือ กำหนดค่า SDK Build Tools

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 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 จาก Android App Bundle เดียวได้ เพื่อให้แน่ใจว่าคุณจะยังคงสร้าง Instant App ในปลั๊กอินเวอร์ชันในอนาคตได้

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

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

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

ตอนนี้ R8 จะดำเนินการยกเลิกการทำน้ำตาลออก การลดขนาด การปรับให้ยากต่อการอ่าน (Obfuscation) การเพิ่มประสิทธิภาพ และการแปลงเป็น Dex (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++ ลงใน โปรเจ็กต์แทน

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

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

              android.uniquePackageNames = true
              
            

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