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

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

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

ฟีเจอร์ใหม่

  • การกำหนดค่าใหม่สำหรับทรัพยากรที่ต้องพึ่งพาในการตรวจสอบโปรแกรมวิเคราะห์โค้ดภาษาจาวา: lintChecks มีการเปลี่ยนแปลงลักษณะการทำงานและมีการเปิดตัวการกำหนดค่าใหม่สำหรับทรัพยากรที่ต้องพึ่งพาอย่าง lintPublish เพื่อให้คุณควบคุมได้มากขึ้นว่าจะรวมการตรวจสอบโปรแกรมวิเคราะห์โค้ดภาษาจาวาใดไว้ในไลบรารี 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 รวมการกรอง Sugar, การลดขนาด, การสร้างความสับสน, การเพิ่มประสิทธิภาพ และการแปลงเป็น Dex ไว้ในขั้นตอนเดียว ซึ่งส่งผลให้ประสิทธิภาพของบิลด์ดีขึ้นอย่างเห็นได้ชัด R8 เปิดตัวในปลั๊กอิน Android Gradle 3.3.0 และตอนนี้เปิดใช้โดยค่าเริ่มต้นสำหรับทั้งโปรเจ็กต์แอปและไลบรารี Android ที่ใช้ปลั๊กอิน 3.4.0 ขึ้นไป

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

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

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

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

โปรดทราบว่า 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 ได้ที่ตั้งค่ารหัสแอปพลิเคชัน