ปลั๊กอิน 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
ดูข้อมูลเบื้องต้นเพิ่มเติมได้ที่บันทึกประจำรุ่นการแพ็กเกจไลบรารีเนทีฟที่ไม่ได้บีบอัดโดยค่าเริ่มต้น