ปลั๊กอิน Android Gradle 4.2.0 (มีนาคม 2021)

ความเข้ากันได้

เวอร์ชันต่ำสุด เวอร์ชันเริ่มต้น หมายเหตุ
Gradle 6.7.1 ไม่มี ดูข้อมูลเพิ่มเติมได้ที่การอัปเดต Gradle
เครื่องมือสร้าง SDK 30.0.2 30.0.2 ติดตั้งหรือกําหนดค่าเครื่องมือสร้าง SDK
NDK ไม่มี 21.4.7075529 ติดตั้งหรือกําหนดค่า NDK เวอร์ชันอื่น

ฟีเจอร์ใหม่

ปลั๊กอิน Android Gradle เวอร์ชันนี้มีฟีเจอร์ใหม่ต่อไปนี้

ภาษา Java เวอร์ชัน 8 โดยค่าเริ่มต้น

ตั้งแต่เวอร์ชัน 4.2 เป็นต้นไป AGP จะใช้ระดับภาษา Java 8 โดยค่าเริ่มต้น Java 8 ให้การเข้าถึงฟีเจอร์ภาษาใหม่ๆ หลายอย่าง เช่น นิพจน์ Lambda, การอ้างอิงเมธอด และเมธอดอินเทอร์เฟซแบบคงที่ ดูรายการฟีเจอร์ทั้งหมดที่รองรับได้ในเอกสารประกอบ Java 8

หากต้องการใช้ลักษณะการทำงานแบบเก่า ให้ระบุ Java 7 อย่างชัดเจนในไฟล์ build.gradle.kts หรือ build.gradle ระดับโมดูล

// build.gradle
android {
  ...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}
// build.gradle.kts
android {
  ...
  compileOptions {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}

คอมไพเลอร์ทรัพยากร JVM ใหม่

เครื่องมือคอมไพเลอร์ทรัพยากร JVM ใหม่ในปลั๊กอิน Gradle 4.2 ของ Android เข้ามาแทนที่บางส่วนของคอมไพเลอร์ทรัพยากร AAPT2 ซึ่งอาจช่วยปรับปรุงประสิทธิภาพการสร้างได้ โดยเฉพาะในเครื่อง Windows ระบบจะเปิดใช้คอมไพเลอร์ทรัพยากร JVM ใหม่โดยค่าเริ่มต้น

รองรับการรับรอง v3 และ v4 แล้ว

ตอนนี้ปลั๊กอิน Android Gradle 4.2 รองรับรูปแบบการรับรองของ APK v3 และ APK v4 แล้ว หากต้องการเปิดใช้รูปแบบเหล่านี้อย่างน้อย 1 รูปแบบในบิลด์ ให้เพิ่มพร็อพเพอร์ตี้ต่อไปนี้ลงในไฟล์ build.gradle หรือ build.gradle.kts ระดับโมดูล

// build.gradle
android {
  ...
  signingConfigs {
    config {
        ...
        enableV3Signing true
        enableV4Signing true
    }
  }
}
// build.gradle.kts
android {
  ...
  signingConfigs {
      config {
          ...
          enableV3Signing = true
          enableV4Signing = true
      }
  }
}

การรับรอง APK v4 ช่วยให้คุณทําให้ APK ขนาดใหญ่ใช้งานได้อย่างรวดเร็วโดยใช้การติดตั้ง APK แบบเพิ่มทีละรายการของ ADB ใน Android 11 แฟล็กใหม่นี้จะจัดการขั้นตอนการลงนาม APK ในกระบวนการทำให้ใช้งานได้

กำหนดค่า App Signing ตามตัวแปร

ตอนนี้คุณสามารถเปิดหรือปิดใช้การรับรองแอปในปลั๊กอิน Android Gradle ตามตัวแปรได้แล้ว

ตัวอย่างนี้แสดงวิธีตั้งค่าการรับรองแอปตามตัวแปรโดยใช้เมธอด onVariants() ใน Kotlin หรือ Groovy

androidComponents {
    onVariants(selector().withName("fooDebug"), {
        signingConfig.enableV1Signing.set(false)
        signingConfig.enableV2Signing.set(true)
    })

พร็อพเพอร์ตี้ Gradle ใหม่: android.native.buildOutput

AGP 4.2 จะกรองข้อความจากบิลด์เนทีฟที่ใช้ CMake และ ndk-build เพื่อลดความกระจัดกระจายในเอาต์พุตของบิลด์ โดยแสดงเฉพาะเอาต์พุตคอมไพเลอร์ C/C++ โดยค่าเริ่มต้น ก่อนหน้านี้ ระบบจะสร้างบรรทัดเอาต์พุตสำหรับไฟล์ทุกไฟล์ที่สร้าง ซึ่งส่งผลให้มีข้อความที่ให้ข้อมูลจำนวนมาก

หากต้องการดูเอาต์พุตเนทีฟทั้งหมด ให้ตั้งค่าพร็อพเพอร์ตี้ Gradle android.native.buildOutput ใหม่เป็น verbose

คุณตั้งค่าพร็อพเพอร์ตี้นี้ได้ในไฟล์ gradle.properties หรือผ่านบรรทัดคำสั่ง

gradle.properties
android.native.buildOutput=verbose

บรรทัดคำสั่ง
-Pandroid.native.buildOutput=verbose

ค่าเริ่มต้นของพร็อพเพอร์ตี้นี้คือ quiet

การเปลี่ยนแปลงลักษณะการทํางานของไฟล์ gradle.properties

ตั้งแต่ AGP 4.2 เป็นต้นไป คุณจะลบล้างพร็อพเพอร์ตี้ Gradle จากโปรเจ็กต์ย่อยไม่ได้อีกต่อไป กล่าวคือ หากคุณประกาศพร็อพเพอร์ตี้ในไฟล์ gradle.properties ในโปรเจ็กต์ย่อยแทนโปรเจ็กต์รูท ระบบจะไม่สนใจพร็อพเพอร์ตี้นั้น

ตัวอย่างเช่น ในรุ่นก่อนหน้า AGP จะอ่านค่าจาก <var>projectDir</var>/gradle.properties, <var>projectDir</var>/app/gradle.properties, <var>projectDir</var>/library/gradle.properties และอื่นๆ สำหรับโมดูลแอป หากพร็อพเพอร์ตี้ Gradle เดียวกันมีอยู่ในทั้ง <var>projectDir</var>/gradle.properties และ <var>projectDir</var>/app/gradle.properties ค่าจาก <var>projectDir</var>/app/gradle.properties จะมีความสําคัญเหนือกว่า

ใน AGP 4.2 ลักษณะการทํางานนี้มีการเปลี่ยนแปลง และ AGP จะไม่โหลดค่าจาก gradle.properties ในโปรเจ็กต์ย่อย (เช่น <var>projectDir</var>/app/gradle.properties) การเปลี่ยนแปลงนี้แสดงถึงลักษณะการทำงานแบบใหม่ของ Gradle และรองรับการแคชการกำหนดค่า

ดูข้อมูลเพิ่มเติมเกี่ยวกับการกําหนดค่าในไฟล์ gradle.properties ได้ในส่วนเอกสารประกอบ Gradle

การเปลี่ยนแปลงความเข้ากันได้และการกำหนดค่า Gradle

เมื่อทำงานใน Android Studio เครื่องมือสร้าง Gradle จะใช้ JDK ที่รวมอยู่ใน Studio ในรุ่นก่อนหน้า JDK 8 จะรวมอยู่กับ Studio แต่เวอร์ชัน 4.2 จะรวม JDK 11 แทน เมื่อใช้ JDK ที่รวมมาใหม่เพื่อเรียกใช้ Gradle การดำเนินการนี้อาจส่งผลให้เกิดการทำงานร่วมกันไม่ได้หรือส่งผลต่อประสิทธิภาพของ JVM เนื่องจากการเปลี่ยนแปลงตัวเก็บขยะ ปัญหาเหล่านี้อธิบายไว้ด้านล่าง

หมายเหตุ: แม้ว่าเราจะแนะนำให้ใช้ Gradle กับ JDK 11 แต่คุณก็เปลี่ยน JDK ที่ใช้เรียกใช้ Gradle ได้ในกล่องโต้ตอบโครงสร้างโปรเจ็กต์ การเปลี่ยนการตั้งค่านี้จะเปลี่ยนเฉพาะ JDK ที่ใช้ในการเรียกใช้ Gradle เท่านั้น และจะไม่เปลี่ยน JDK ที่ใช้ในการเรียกใช้ Studio

ความเข้ากันได้ของ Studio กับปลั๊กอิน Android Gradle (AGP)

Android Studio 4.2 เปิดโปรเจ็กต์ที่ใช้ AGP 3.1 ขึ้นไปได้ โดยมีเงื่อนไขว่า AGP ใช้งาน Gradle 4.8.1 ขึ้นไป ดูข้อมูลเพิ่มเติมเกี่ยวกับความเข้ากันได้ของ Gradle ได้ที่อัปเดต Gradle

การเพิ่มประสิทธิภาพการสร้าง Gradle สำหรับ JDK 11

การอัปเดต JDK 11 นี้ส่งผลต่อการกำหนดค่าเริ่มต้นของโปรแกรมรวบรวมขยะ JVM เนื่องจาก JDK 8 ใช้โปรแกรมรวบรวมขยะแบบขนาน ส่วน JDK 11 ใช้โปรแกรมรวบรวมขยะ G1

เราขอแนะนําให้ทดสอบบิลด์ Gradle ด้วยโปรแกรมรวบรวมขยะแบบขนานเพื่อปรับปรุงประสิทธิภาพการสร้าง ใน gradle.properties ให้ตั้งค่าต่อไปนี้

org.gradle.jvmargs=-XX:+UseParallelGC

หากมีตัวเลือกอื่นๆ ตั้งค่าไว้ในช่องนี้แล้ว ให้เพิ่มตัวเลือกใหม่โดยทำดังนี้

org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC

หากต้องการวัดความเร็วในการสร้างด้วยการกำหนดค่าต่างๆ โปรดดูโปรไฟล์การสร้าง

ไฟล์ DEX ที่ไม่ได้บีบอัดใน APK เมื่อ minSdk = 28 ขึ้นไป

ตอนนี้ AGP จะแพ็กไฟล์ DEX ที่ไม่ได้บีบอัดไว้ใน APK โดยค่าเริ่มต้นเมื่อ minSdk = 28 ขึ้นไป ซึ่งจะทำให้ APK มีขนาดเพิ่มขึ้น แต่จะทำให้ขนาดการติดตั้งในอุปกรณ์มีขนาดเล็กลง และขนาดการดาวน์โหลดจะเท่าเดิม

หากต้องการบังคับให้ AGP แพ็กเกจไฟล์ DEX ที่บีบอัดแทน ให้เพิ่มข้อมูลต่อไปนี้ลงในไฟล์ build.gradle

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

ใช้ DSL เพื่อแพ็กเกจไลบรารีแบบเนทีฟที่บีบอัด

เราขอแนะนำให้แพ็กเกจไลบรารีเนทีฟในรูปแบบที่ไม่มีการบีบอัด เนื่องจากจะส่งผลให้ขนาดการติดตั้งแอปมีขนาดเล็กลง ขนาดการดาวน์โหลดแอปมีขนาดเล็กลง และเวลาในการโหลดแอปของผู้ใช้เร็วขึ้น อย่างไรก็ตาม หากต้องการให้ปลั๊กอิน Android Gradle แพ็กเกจไลบรารีแบบเนทีฟที่บีบอัดไว้เมื่อสร้างแอป ให้ตั้งค่า useLegacyPackaging เป็น true ในไฟล์ build.gradle ของแอป

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

Flag useLegacyPackaging จะแทนที่แอตทริบิวต์ไฟล์ Manifest extractNativeLibs ดูข้อมูลเบื้องต้นเพิ่มเติมได้ที่บันทึกประจำรุ่นการแพ็กเกจไลบรารีเนทีฟที่ไม่ได้บีบอัดโดยค่าเริ่มต้น