ปลั๊กอิน 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 Expression, Method Reference และ Static Interface Method ดูรายการฟีเจอร์ที่รองรับทั้งหมด ได้ในเอกสารประกอบของ 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 ขนาดใหญ่ได้อย่างรวดเร็วโดยใช้การติดตั้ง APK แบบเพิ่มทีละส่วนของ ADB Incremental APK installation ใน Android 11 แฟล็กใหม่นี้จะจัดการขั้นตอนการลงนาม APK ในกระบวนการติดตั้งใช้งาน
กำหนดค่า App Signing ต่อตัวแปร
ตอนนี้คุณสามารถเปิดหรือปิดใช้ App Signing ในปลั๊กอิน Android Gradle ต่อตัวแปรได้แล้ว
ตัวอย่างนี้แสดงวิธีตั้งค่า App Signing ต่อตัวแปรโดยใช้
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++ โดยค่าเริ่มต้น เพื่อลดความยุ่งเหยิงในเอาต์พุตบิลด์ ก่อนหน้านี้ ระบบจะสร้างเอาต์พุต 1 บรรทัดสำหรับทุกไฟล์ที่สร้าง ซึ่งส่งผลให้มีข้อความข้อมูลจำนวนมาก
หากต้องการดูเอาต์พุตแบบเนทีฟทั้งหมด ให้ตั้งค่าพร็อพเพอร์ตี้ 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 มาพร้อมกับ Studio แทน เมื่อใช้ JDK ใหม่ที่มาพร้อมกับ Studio เพื่อเรียกใช้ Gradle การดำเนินการนี้อาจส่งผลให้เกิดความไม่เข้ากันหรือส่งผลต่อประสิทธิภาพของ JVM เนื่องจากการเปลี่ยนแปลง Garbage Collector ปัญหาเหล่านี้อธิบายไว้ด้านล่าง
หมายเหตุ: แม้ว่าเราจะแนะนำให้เรียกใช้ 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 นี้ส่งผลต่อการกำหนดค่าเริ่มต้นของ Garbage Collector ของ JVM เนื่องจาก JDK 8 ใช้ Parallel Garbage Collector ในขณะที่ JDK 11 ใช้G1 Garbage Collector
เราขอแนะนำให้ทดสอบการสร้าง Gradle ด้วย Parallel Garbage Collector เพื่อปรับปรุงประสิทธิภาพการสร้าง ตั้งค่าต่อไปนี้ใน 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
}
}
}แฟล็ก useLegacyPackaging จะแทนที่แอตทริบิวต์ Manifest extractNativeLibs ดูข้อมูลเบื้องหลังเพิ่มเติมได้ที่หมายเหตุประจำรุ่น
ไลบรารีแบบเนทีฟที่แพ็กเกจแบบไม่ได้บีบอัดโดยค่าเริ่มต้น