ปลั๊กอิน Android Gradle 4.1.0 (สิงหาคม 2020)
ความเข้ากันได้
เวอร์ชันต่ำสุด | เวอร์ชันเริ่มต้น | หมายเหตุ | |
---|---|---|---|
Gradle | 6.5 | ไม่มี | ดูข้อมูลเพิ่มเติมได้ที่การอัปเดต Gradle |
เครื่องมือสร้าง SDK | 29.0.2 | 29.0.2 | ติดตั้งหรือกําหนดค่าเครื่องมือสร้าง SDK |
NDK | ไม่มี | 21.1.6352462 | ติดตั้งหรือกําหนดค่า NDK เวอร์ชันอื่น |
<p>This version of the Android plugin requires the following:</p>
<ul>
<li>
<p><a href="https://docs.gradle.org/6.5.1/release-notes.html">Gradle 6.5</a>.
To learn more, read the section about <a href="#updating-gradle">updating
Gradle</a>.</p>
</li>
<li>
<p><a href="/studio/releases/build-tools.html#notes">SDK Build Tools
29.0.2</a> or higher.</p>
</li>
</ul>
<p>The default NDK version in this release is 21.1.6352462. To install a
different NDK version, see <a href="/studio/projects/install-ndk#specific-version">Install a specific version of the NDK</a>.</p>
ฟีเจอร์ใหม่
ปลั๊กอิน Android Gradle เวอร์ชันนี้มีฟีเจอร์ใหม่ต่อไปนี้
การสนับสนุน DSL ของ Kotlin Script
เพื่อช่วยปรับปรุงประสบการณ์การแก้ไขสำหรับผู้ใช้บิลด์สคริปต์ Kotlin ตอนนี้เราได้กำหนด DSL และ API ของปลั๊กอิน Gradle ของ Android เวอร์ชัน 4.1 ไว้ในชุดอินเทอร์เฟซ Kotlin แยกต่างหากจากคลาสการใช้งาน ซึ่งหมายความว่า
- ตอนนี้คุณประกาศ Nullability และ Mutability ของประเภท Kotlin ได้อย่างชัดเจนแล้ว
- เอกสารประกอบที่สร้างขึ้นจากอินเทอร์เฟซเหล่านั้นจะเผยแพร่ในข้อมูลอ้างอิงของ Kotlin API
- อินเทอร์เฟซ API ของปลั๊กอิน Android Gradle ได้รับการกําหนดไว้อย่างชัดเจนเพื่อให้การขยายบิลด์ Android ในอนาคตมีความเสถียรมากขึ้น
สำคัญ: หากคุณใช้สคริปต์บิลด์ KTS หรือใช้ Kotlin ใน buildSrc
อยู่แล้ว การดำเนินการนี้อาจทำให้ความเข้ากันได้ของซอร์สโค้ดสำหรับข้อผิดพลาดบางอย่างเสียหาย ซึ่งจะแสดงเป็นข้อผิดพลาดรันไทม์ในรุ่นก่อนหน้า
ตอนนี้ประเภทคอลเล็กชันที่ออกแบบมาเพื่อเปลี่ยนรูปแบบใน DSL ได้รับการกําหนดอย่างสอดคล้องกันดังนี้
val collection: MutableCollectionType
ซึ่งหมายความว่าคุณจะเขียนโค้ดต่อไปนี้ในสคริปต์ Kotlin สำหรับคอลเล็กชันบางรายการที่ก่อนหน้านี้รองรับไม่ได้อีกต่อไป
collection = collectionTypeOf(...)
อย่างไรก็ตาม ระบบรองรับการเปลี่ยนรูปแบบคอลเล็กชันอย่างสม่ำเสมอ ดังนั้น collection += …
และ collection.add(...)
จึงควรใช้งานได้ทุกที่
หากพบปัญหาขณะอัปเกรดโปรเจ็กต์ที่ใช้ปลั๊กอิน Kotlin API และ DSL ของ Android Gradle โปรดรายงานข้อบกพร่อง
ส่งออก Dependency ของ C/C++ จาก AAR
ปลั๊กอิน Android Gradle 4.0 เพิ่มความสามารถในการนําเข้าแพ็กเกจ Prefab ใน Dependency ของ AAR ใน AGP 4.1 ตอนนี้คุณสามารถส่งออกไลบรารีจากบิลด์แบบเนทีฟภายนอกเป็น AAR สำหรับโปรเจ็กต์ไลบรารี Android ได้แล้ว
หากต้องการส่งออกไลบรารีแบบเนทีฟ ให้เพิ่มข้อมูลต่อไปนี้ลงในบล็อก android
ของไฟล์ build.gradle
ของโปรเจ็กต์ไลบรารี
buildFeatures { prefabPublishing true }prefab { <var>mylibrary</var&;gt { headers "src/main/cpp/<var>mylibrary</var>/include" }
<var>myotherlibrary</var> { headers "src/main/cpp/<var>myotherlibrary</var>/include" }
}
buildFeatures { prefabPublishing = true }prefab { create("<var>mylibrary</var>") { headers = "src/main/cpp/<var>mylibrary</var>/include" }
create("<var>myotherlibrary</var>") { headers = "src/main/cpp/<var>myotherlibrary</var>/include" }
}
ในตัวอย่างนี้ ไลบรารี mylibrary
และ myotherlibrary
จาก ndk-build หรือบิลด์เนทีฟภายนอกของ CMake จะได้รับการแพ็กเกจใน AAR ที่บิลด์ของคุณสร้างขึ้น และแต่ละรายการจะส่งออกส่วนหัวจากไดเรกทอรีที่ระบุไปยังรายการที่เกี่ยวข้อง
หมายเหตุ: สำหรับผู้ใช้ปลั๊กอิน Android Gradle 4.0 ขึ้นไป การตั้งค่าการกําหนดค่าเพื่อนําเข้าไลบรารีแบบเนทีฟที่สร้างไว้ล่วงหน้ามีการเปลี่ยนแปลง ดูข้อมูลเพิ่มเติมได้ที่บันทึกประจำรุ่น 4.0
การรองรับข้อมูลเมตา Kotlin ของ R8
Kotlin ใช้ข้อมูลเมตาที่กำหนดเองในไฟล์คลาส Java เพื่อระบุคอนสตรัคต์ภาษา Kotlin ตอนนี้ R8 รองรับการดูแลรักษาและการเขียนข้อมูลเมตา Kotlin อีกครั้งเพื่อรองรับการลดขนาดไลบรารีและแอปพลิเคชัน Kotlin โดยใช้ kotlin-reflect
อย่างเต็มรูปแบบแล้ว
หากต้องการเก็บข้อมูลเมตา Kotlin ให้เพิ่มกฎการเก็บต่อไปนี้
-keep class kotlin.Metadata { *; }
-keepattributes RuntimeVisibleAnnotations
ซึ่งจะสั่งให้ R8 เก็บข้อมูลเมตา Kotlin ของคลาสทั้งหมดที่เก็บไว้โดยตรง
ดูข้อมูลเพิ่มเติมได้ที่การลดขนาดไลบรารีและแอปพลิเคชัน Kotlin โดยใช้ Kotlin Reflection ด้วย R8{:.external} ใน Medium
การยืนยันในบิลด์การแก้ไขข้อบกพร่อง
เมื่อคุณสร้างแอปเวอร์ชันแก้ไขข้อบกพร่องโดยใช้ Android Gradle Plugin 4.1.0 ขึ้นไป คอมไพเลอร์ในตัว (D8) จะเขียนโค้ดของแอปขึ้นใหม่เพื่อเปิดใช้การยืนยัน ณ เวลาคอมไพล์ คุณจึงมีการตรวจสอบการยืนยันที่ทำงานอยู่เสมอ
การเปลี่ยนแปลงลักษณะการทำงาน
นำแคชการสร้างของปลั๊กอิน Android Gradle ออก
ระบบนำแคชบิลด์ AGP ออกแล้วใน AGP 4.1 ก่อนหน้านี้แคชการสร้าง AGP ที่เปิดตัวใน AGP 2.3 เพื่อเสริมแคชการสร้าง Gradle ได้ถูกแทนที่โดยแคชการสร้าง Gradle ใน AGP 4.1 โดยสมบูรณ์ การเปลี่ยนแปลงนี้จะไม่ส่งผลต่อเวลาสร้าง
เราเลิกใช้งานงาน cleanBuildCache
และพร็อพเพอร์ตี้ android.enableBuildCache
และ android.buildCacheDir
แล้ว และจะนําออกใน AGP 7.0 ขณะนี้พร็อพเพอร์ตี้ android.enableBuildCache
ไม่มีผลใดๆ ส่วนพร็อพเพอร์ตี้ android.buildCacheDir
และงาน cleanBuildCache
จะใช้งานได้จนถึง AGP 7.0 สําหรับการลบเนื้อหาแคชบิลด์ AGP ที่มีอยู่
ขนาดแอปลดลงอย่างมากสำหรับแอปที่ใช้การลดขนาดโค้ด
ตั้งแต่รุ่นนี้เป็นต้นไป ระบบจะไม่เก็บฟิลด์จากคลาส R โดยค่าเริ่มต้นอีกต่อไป ซึ่งอาจส่งผลให้ประหยัดขนาด APK ได้มากสําหรับแอปที่เปิดใช้การบีบอัดโค้ด ซึ่งไม่ควรส่งผลให้เกิดการเปลี่ยนแปลงลักษณะการทำงาน เว้นแต่คุณจะเข้าถึงคลาส R โดยใช้การสะท้อน ซึ่งในกรณีนี้คุณจะต้องเพิ่มกฎการเก็บรักษาสำหรับคลาส R เหล่านั้น
เปลี่ยนชื่อพร็อพเพอร์ตี้ android.namespacedRClass เป็น android.nonTransitiveRClass
เปลี่ยนชื่อ Flag ทดลอง android.namespacedRClass
เป็น android.nonTransitiveRClass
แล้ว
ตั้งค่าในไฟล์ gradle.properties
แฟล็กนี้จะเปิดใช้การแยกชื่อของคลาส R ของแต่ละไลบรารีเพื่อให้คลาส R ประกอบด้วยเฉพาะทรัพยากรที่ประกาศในไลบรารีนั้นๆ เท่านั้นและไม่มีทรัพยากรจาก Dependency ของไลบรารี ซึ่งจะช่วยลดขนาดของคลาส R สำหรับไลบรารีนั้น
Kotlin DSL: เปลี่ยนชื่อ coreLibraryDesugaringEnabled
ตัวเลือกการคอมไพล์ Kotlin DSL coreLibraryDesugaringEnabled
เปลี่ยนเป็น isCoreLibraryDesugaringEnabled
แล้ว
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Flag นี้ได้ที่การรองรับการแปลง Sugar ของ API ของ Java 8 ขึ้นไป (Android Gradle Plugin 4.0.0 ขึ้นไป)
นำพร็อพเพอร์ตี้เวอร์ชันออกจากคลาส BuildConfig ในโปรเจ็กต์ไลบรารี
สำหรับโปรเจ็กต์ไลบรารีเท่านั้น ระบบได้นำพร็อพเพอร์ตี้ BuildConfig.VERSION_NAME
และ BuildConfig.VERSION_CODE
ออกจากคลาส BuildConfig
ที่สร้างขึ้น เนื่องจากค่าคงที่เหล่านี้ไม่ได้แสดงค่าสุดท้ายของรหัสและชื่อเวอร์ชันของแอปพลิเคชัน จึงทําให้เข้าใจผิด นอกจากนี้ ระบบยังทิ้งค่าเหล่านี้ระหว่างการผสานไฟล์ Manifest ด้วย
ในปลั๊กอิน Android Gradle เวอร์ชันในอนาคต เราจะนำพร็อพเพอร์ตี้ versionName
และ versionCode
ออกจาก DSL สำหรับไลบรารีด้วย
ปัจจุบันยังไม่มีวิธีเข้าถึงรหัส/ชื่อเวอร์ชันแอปจากโปรเจ็กต์ย่อยของไลบรารีโดยอัตโนมัติ
สำหรับโมดูลแอปพลิเคชันจะไม่มีการเปลี่ยนแปลงใดๆ คุณยังคงกําหนดค่าให้กับ versionCode
และ versionName
ใน DSL ได้ ค่าเหล่านี้จะนำไปเผยแพร่ไปยังไฟล์ Manifest และ BuildConfig
ของแอป
ตั้งค่าเส้นทาง NDK
คุณสามารถตั้งค่าเส้นทางไปยังการติดตั้ง NDK ในเครื่องได้โดยใช้พร็อพเพอร์ตี้ android.ndkPath
ในไฟล์ build.gradle
ของโมดูล
android {
ndkPath "your-custom-ndk-path"
}
android {
ndkPath = "your-custom-ndk-path"
}
หากคุณใช้พร็อพเพอร์ตี้นี้ร่วมกับพร็อพเพอร์ตี้ android.ndkVersion
เส้นทางนี้ต้องมี NDK เวอร์ชันที่ตรงกับ android.ndkVersion
การเปลี่ยนแปลงลักษณะการทํางานของการทดสอบ 1 หน่วยของไลบรารี
เราได้เปลี่ยนลักษณะการคอมไพล์และเรียกใช้การทดสอบหน่วยของไลบรารี ตอนนี้การทดสอบหน่วยของไลบรารีจะคอมไพล์และเรียกใช้กับคลาสคอมไพล์/รันไทม์ของไลบรารีนั้นๆ เอง ซึ่งส่งผลให้การทดสอบหน่วยใช้ไลบรารีในลักษณะเดียวกับโปรเจ็กต์ย่อยภายนอก โดยทั่วไปแล้วการกำหนดค่านี้จะส่งผลให้การทดสอบดีขึ้น
ในบางกรณี การทดสอบหน่วยของไลบรารีที่ใช้การเชื่อมโยงข้อมูลอาจพบคลาส DataBindingComponent
หรือ BR
ที่ขาดหายไป การทดสอบเหล่านั้นต้องพอร์ตไปยังการทดสอบที่มีเครื่องควบคุมในโปรเจ็กต์ androidTest
เนื่องจากการคอมไพล์และเรียกใช้คลาสเหล่านั้นในการทดสอบหน่วยอาจให้เอาต์พุตที่ไม่ถูกต้อง
เลิกใช้งานปลั๊กอิน io.fabric Gradle แล้ว
ปลั๊กอิน io.fabric Gradle เลิกใช้งานแล้วและไม่เข้ากันได้กับปลั๊กอิน Android Gradle เวอร์ชัน 4.1 ดูข้อมูลเพิ่มเติมเกี่ยวกับ Fabric SDK ที่เลิกใช้งานและการย้ายข้อมูลไปยัง Firebase Crashlytics SDK ได้ที่อัปเกรดเป็น Firebase Crashlytics SDK