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