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

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

ตอนนี้ปลั๊กอิน Android Gradle 4.2 รองรับรูปแบบการลงนาม APK v3 และ APK v4 แล้ว หากต้องการเปิดใช้รูปแบบใดรูปแบบหนึ่งหรือทั้ง 2 รูปแบบในบิลด์ ให้เพิ่มพร็อพเพอร์ตี้ต่อไปนี้ลงในไฟล์ 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 ขนาดใหญ่ได้อย่างรวดเร็วโดยใช้ADB การติดตั้ง APK แบบเพิ่มทีละรายการใน Android 11 แฟล็กใหม่นี้จะดูแลขั้นตอนการลงนาม APK ในกระบวนการ การติดตั้งใช้งาน

กำหนดค่า App Signing ต่อรูปแบบ

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

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

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

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

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

หากต้องการดูเอาต์พุต 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 เพื่อแพ็กเกจไลบรารี C/C++ ที่บีบอัด

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

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

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