ปลั๊กอิน 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