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

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

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