ปลั๊กอิน 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 Plugin 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 ต่อรูปแบบ
ตอนนี้คุณสามารถเปิดหรือปิดใช้การลงนามในแอปในปลั๊กอิน 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
หากต้องการวัดความเร็วในการบิลด์ด้วยการกำหนดค่าต่างๆ ให้ดู�0x0A> สร้างโปรไฟล์การบิลด์
ไฟล์ DEX ที่ไม่ได้บีบอัดใน APK เมื่อ minSdk
= 28 ขึ้นไป
ตอนนี้ AGP จะแพ็กเกจไฟล์ DEX ที่ไม่ได้บีบอัดใน APK โดยค่าเริ่มต้นเมื่อ minSdk
= 28 หรือ
สูงกว่า ซึ่งจะทำให้ขนาด APK เพิ่มขึ้น แต่จะส่งผลให้ขนาดการติดตั้งในอุปกรณ์เล็กลง และขนาดการดาวน์โหลดจะเท่ากันโดยประมาณ
หากต้องการบังคับให้ AGP บีบอัดไฟล์ DEX แทน คุณสามารถเพิ่มข้อมูลต่อไปนี้ลงในไฟล์ build.gradle
android {
packagingOptions {
dex {
useLegacyPackaging true
}
}
}
ใช้ DSL เพื่อแพ็กเกจไลบรารีเนทีฟที่บีบอัด
เราขอแนะนำให้แพ็กเกจไลบรารีเนทีฟในรูปแบบที่ไม่ได้บีบอัด เนื่องจากวิธีนี้
จะทำให้ขนาดการติดตั้งแอป ขนาดการดาวน์โหลดแอป และเวลาในการโหลดแอป
ของผู้ใช้มีขนาดเล็กลง อย่างไรก็ตาม หากต้องการให้ Android Gradle Plugin
แพ็กเกจไลบรารีแบบเนทีฟที่บีบอัดเมื่อสร้างแอป ให้ตั้งค่า
useLegacyPackaging
เป็น true
ในไฟล์ build.gradle
ของแอป
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
โดยแฟล็ก useLegacyPackaging
จะแทนที่แอตทริบิวต์ไฟล์ Manifest extractNativeLibs
ดูข้อมูลเบื้องหลังเพิ่มเติมได้ที่บันทึกประจำรุ่น
ไลบรารีเนทีฟที่แพ็กเกจโดยไม่ได้บีบอัดโดยค่าเริ่มต้น