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