ปลั๊กอิน 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 แยกจากคลาสการใช้งานแล้ว ซึ่งหมายความว่า
- ตอนนี้มีการประกาศค่า Null และความสามารถในการเปลี่ยนแปลงในประเภท Kotlin อย่างชัดเจนแล้ว
- เอกสารประกอบที่สร้างจากอินเทอร์เฟซเหล่านั้นจะเผยแพร่ในข้อมูลอ้างอิงของ Kotlin API
- เราได้กำหนดพื้นผิว API ของปลั๊กอิน Android Gradle อย่างชัดเจน เพื่อให้ การขยายบิลด์ Android มีความยืดหยุ่นมากขึ้นในอนาคต
สำคัญ: หากคุณใช้สคริปต์บิลด์ KTS หรือใช้ Kotlin ใน
buildSrc
อยู่แล้ว การดำเนินการนี้อาจทำให้เกิดการหยุดทำงานของแหล่งที่มาเนื่องจากข้อผิดพลาดบางอย่าง
ซึ่งจะแสดงเป็นข้อผิดพลาดขณะรันไทม์ในรุ่นก่อนหน้า
ตอนนี้ประเภทคอลเล็กชันที่ออกแบบมาให้เปลี่ยนแปลงใน DSL ได้ได้รับการกำหนดอย่างสม่ำเสมอ ดังนี้
val collection: MutableCollectionType
ซึ่งหมายความว่าคุณจะเขียนโค้ดต่อไปนี้ในสคริปต์ Kotlin สำหรับคอลเล็กชันบางรายการที่รองรับก่อนหน้านี้ไม่ได้อีกต่อไป
collection = collectionTypeOf(...)
อย่างไรก็ตาม เราจะรองรับการเปลี่ยนแปลงคอลเล็กชันอย่างสม่ำเสมอ ดังนั้น collection += …
และ collection.add(...)
ควรใช้งานได้ทุกที่แล้ว
หากพบปัญหาเมื่ออัปเกรดโปรเจ็กต์ที่ใช้ Android Gradle ปลั๊กอิน Kotlin API และ DSL โปรดรายงานข้อบกพร่อง
ส่งออกทรัพยากร 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
การรองรับ 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 Plugin 4.1.0 ขึ้นไป คอมไพเลอร์ในตัว (D8) จะเขียนโค้ดของแอปใหม่ เพื่อเปิดใช้ข้อความยืนยันในเวลาคอมไพล์ เพื่อให้คุณมีการตรวจสอบข้อความยืนยัน ที่ใช้งานอยู่เสมอ
การเปลี่ยนแปลงลักษณะการทำงาน
นำแคชบิลด์ของปลั๊กอิน Android Gradle ออกแล้ว
AGP 4.1 ได้นำแคชบิลด์ AGP ออกแล้ว ก่อนหน้านี้ AGP 2.3 ได้เปิดตัวแคชบิลด์ของ AGP เพื่อเสริมแคชบิลด์ของ Gradle แต่แคชบิลด์ของ Gradle ได้เข้ามาแทนที่แคชบิลด์ของ AGP ทั้งหมดใน 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
ดูข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์นี้ได้ที่
การรองรับการยกเลิกการเพิ่มน้ำตาลใน 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