ปลั๊กอิน 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 เวอร์ชันนี้มีฟีเจอร์ใหม่ต่อไปนี้
การรองรับ Kotlin Script DSL
เพื่อช่วยปรับปรุงประสบการณ์การแก้ไขสำหรับผู้ใช้ Buildscript ของ Kotlin ตอนนี้เราได้กำหนด DSL และ API ของปลั๊กอิน Android Gradle 4.1 ไว้ในชุดอินเทอร์เฟซ Kotlin แยกต่างหากจากคลาสการใช้งานแล้ว ซึ่งหมายความว่า
- ตอนนี้มีการประกาศความสามารถในการเว้นว่างและความสามารถในการเปลี่ยนแปลงในประเภท Kotlin อย่างชัดเจนแล้ว
- เอกสารที่สร้างจากอินเทอร์เฟซเหล่านั้นจะเผยแพร่ในข้อมูลอ้างอิงของ Kotlin API
- เราได้กำหนดพื้นผิว API ของปลั๊กอิน Android Gradle อย่างชัดเจน เพื่อให้ การขยายบิลด์ Android มีความยืดหยุ่นมากขึ้นในอนาคต
สำคัญ: หากคุณใช้สคริปต์บิลด์ KTS หรือใช้ Kotlin ใน
buildSrcอยู่แล้ว การดำเนินการนี้อาจทำให้เกิดการหยุดทำงานของแหล่งที่มาสำหรับข้อผิดพลาดบางอย่าง
ซึ่งจะแสดงเป็นข้อผิดพลาดขณะรันไทม์ในรุ่นก่อนหน้า
ตอนนี้ประเภทคอลเล็กชันที่ออกแบบมาให้เปลี่ยนแปลงใน DSL ได้จะได้รับการกำหนดอย่างสม่ำเสมอ ดังนี้
val collection: MutableCollectionType
ซึ่งหมายความว่าคุณจะเขียนโค้ดต่อไปนี้ในสคริปต์ Kotlin สำหรับคอลเล็กชันบางรายการที่เคยรองรับไม่ได้อีกต่อไป
collection = collectionTypeOf(...)
อย่างไรก็ตาม เราจะรองรับการเปลี่ยนแปลงคอลเล็กชันอย่างสม่ำเสมอ ดังนั้น collection += …
และ collection.add(...) ควรใช้งานได้ทุกที่
หากพบปัญหาเมื่ออัปเกรดโปรเจ็กต์ที่ใช้ Android Gradle API และ DSL ของปลั๊กอิน Kotlin โปรดรายงานข้อบกพร่อง
ส่งออกทรัพยากร Dependency ของ C/C++ จาก AAR
ปลั๊กอิน Android Gradle 4.0 ได้เพิ่มความสามารถในการ นำเข้าแพ็กเกจ Prefab ในทรัพยากร Dependency ของ AAR ใน AGP 4.1 ตอนนี้คุณสามารถส่งออกไลบรารีจากบิลด์ C/C++ ภายนอกใน AAR สำหรับโปรเจ็กต์ไลบรารี Android ได้แล้ว
หากต้องการส่งออกไลบรารี C/C++ ให้เพิ่มข้อมูลต่อไปนี้ลงในบล็อก 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 หรือการสร้าง C/C++ ภายนอกของ CMake จะ
ได้รับการแพ็กเกจใน AAR ที่สร้างขึ้นโดยบิลด์ของคุณ และแต่ละไลบรารีจะส่งออก
ส่วนหัวจากไดเรกทอรีที่ระบุไปยังทรัพยากร Dependency
หมายเหตุ: สำหรับผู้ใช้ปลั๊กอิน Android Gradle 4.0 ขึ้นไป การตั้งค่าการกำหนดค่าสำหรับการนำเข้าไลบรารี C/C++ ที่สร้างไว้ล่วงหน้ามีการเปลี่ยนแปลง ดูข้อมูลเพิ่มเติมได้ที่บันทึกประจำรุ่น 4.0
การรองรับ R8 สำหรับข้อมูลเมตาของ Kotlin
Kotlin ใช้ข้อมูลเมตาที่กำหนดเองในไฟล์คลาส Java เพื่อระบุโครงสร้างภาษา Kotlin
ตอนนี้ R8 รองรับการบำรุงรักษาและการเขียนข้อมูลเมตาของ Kotlin ใหม่
เพื่อรองรับการลดขนาดไลบรารีและแอปพลิเคชัน Kotlin อย่างเต็มรูปแบบ
โดยใช้ kotlin-reflect
หากต้องการเก็บข้อมูลเมตาของ Kotlin ให้เพิ่มกฎการเก็บต่อไปนี้
-keep class kotlin.Metadata { *; }
-keepattributes RuntimeVisibleAnnotations
ซึ่งจะสั่งให้ R8 เก็บข้อมูลเมตา Kotlin สำหรับคลาสทั้งหมดที่เก็บไว้โดยตรง
ดูข้อมูลเพิ่มเติมได้ที่การลดขนาดไลบรารีและแอปพลิเคชัน Kotlin โดยใช้การสะท้อน Kotlin กับ R8{:.external} ใน Medium
การยืนยันในบิลด์การแก้ไขข้อบกพร่อง
เมื่อสร้างแอปเวอร์ชันแก้ไขข้อบกพร่องโดยใช้ปลั๊กอิน Android Gradle เวอร์ชัน 4.1.0 ขึ้นไป คอมไพเลอร์ในตัว (D8) จะเขียนโค้ดของแอปใหม่ เพื่อเปิดใช้การยืนยันในเวลาคอมไพล์ คุณจึงมีการตรวจสอบการยืนยันที่ ใช้งานอยู่เสมอ
การเปลี่ยนแปลงพฤติกรรม
นำแคชบิลด์ของปลั๊กอิน Android Gradle ออกแล้ว
เราได้นำแคชบิลด์ของ AGP ออกใน AGP 4.1 ก่อนหน้านี้ AGP 2.3 ได้เปิดตัวแคชบิลด์ของ AGP เพื่อเสริมแคชบิลด์ของ Gradle และแคชบิลด์ของ AGP ถูกแทนที่ด้วยแคชบิลด์ของ 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
เปลี่ยนชื่อฟีเจอร์ทดลอง android.namespacedRClass เป็น
android.nonTransitiveRClass แล้ว
โดยตั้งค่าในไฟล์ gradle.properties แฟล็กนี้จะเปิดใช้การกำหนด Namespace ของคลาส R ของไลบรารีแต่ละรายการ เพื่อให้คลาส R มีเฉพาะทรัพยากรที่ประกาศไว้ในไลบรารีนั้นๆ และไม่มีทรัพยากรจากทรัพยากร Dependency ของไลบรารี ซึ่งจะช่วยลดขนาดของคลาส R สำหรับไลบรารีนั้น
Kotlin DSL: เปลี่ยนชื่อ coreLibraryDesugaringEnabled
ตัวเลือกการคอมไพล์ Kotlin DSL coreLibraryDesugaringEnabled มีการ
เปลี่ยนเป็น isCoreLibraryDesugaringEnabled
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Flag นี้ได้ที่
การรองรับกระบวนการ Desugaring API ของ Java 8 ขึ้นไป (ปลั๊กอิน Android Gradle 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 เนื่องจากคอมไพล์และเรียกใช้กับคลาสเหล่านั้นในการทดสอบหน่วยอาจทำให้เอาต์พุตไม่ถูกต้อง
เลิกใช้งานปลั๊กอิน Gradle ของ io.fabric แล้ว
ปลั๊กอิน Gradle ของ io.fabric ถูกเลิกใช้งานแล้วและใช้ร่วมกับ ปลั๊กอิน Android Gradle เวอร์ชัน 4.1 ไม่ได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับ Fabric SDK ที่เลิกใช้งานแล้วและการย้ายข้อมูลไปยัง Firebase Crashlytics SDK ได้ที่ อัปเกรดเป็น Firebase Crashlytics SDK