ปลั๊กอิน Android Gradle 4.1.0 (สิงหาคม 2020)
ความเข้ากันได้
เวอร์ชันต่ำสุด | เวอร์ชันเริ่มต้น | หมายเหตุ | |
---|---|---|---|
เกรเดิล | 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
อยู่แล้ว การทำงานดังกล่าวอาจทำให้ข้อผิดพลาดบางอย่างเกี่ยวกับความเข้ากันได้ของแหล่งที่มาเกิดข้อผิดพลาดที่ในไฟล์ Manifest เป็นข้อผิดพลาดด้านเวลาขณะรันไทม์ในรุ่นก่อนหน้า
ตอนนี้ประเภทคอลเล็กชันที่ออกแบบมาเพื่อเปลี่ยนรูปแบบใน 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 Library ได้แล้ว
หากต้องการส่งออกไลบรารีแบบเนทีฟ ให้เพิ่มค่าต่อไปนี้ลงในบล็อก 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 ด้วยการสะท้อน ซึ่งในกรณีนี้จำเป็นต้องเพิ่มกฎ Keep สำหรับคลาส 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 หน่วยของไลบรารี
เราได้เปลี่ยนลักษณะการคอมไพล์และเรียกใช้การทดสอบหน่วยของไลบรารี ขณะนี้ ระบบจะคอมไพล์การทดสอบหน่วยของไลบรารีและทำงานกับคลาสคอมไพล์/รันไทม์ของไลบรารีนั้นเอง ซึ่งทำให้การทดสอบ 1 หน่วยใช้ไลบรารีในลักษณะเดียวกับที่โปรเจ็กต์ย่อยภายนอกทำ โดยทั่วไปการกำหนดค่าแบบนี้ทำให้การทดสอบดีขึ้น
ในบางกรณี การทดสอบหน่วยของไลบรารีที่ใช้การเชื่อมโยงข้อมูลอาจพบคลาส DataBindingComponent
หรือ BR
ที่ขาดหายไป การทดสอบเหล่านั้นต้องพอร์ตไปยังการทดสอบที่มีเครื่องควบคุมในโปรเจ็กต์ androidTest
เนื่องจากการคอมไพล์และเรียกใช้คลาสเหล่านั้นในการทดสอบหน่วยอาจให้เอาต์พุตที่ไม่ถูกต้อง
เลิกใช้งานปลั๊กอิน io.fabric Gradle แล้ว
ปลั๊กอิน io.fabric Gradle เลิกใช้งานแล้วและไม่เข้ากันได้กับปลั๊กอิน Android Gradle เวอร์ชัน 4.1 ดูข้อมูลเพิ่มเติมเกี่ยวกับ Fabric SDK ที่เลิกใช้งานและการย้ายข้อมูลไปยัง Firebase Crashlytics SDK ได้ที่อัปเกรดเป็น Firebase Crashlytics SDK