ปลั๊กอิน Android Gradle เวอร์ชัน 7.1.0 (มกราคม 2022)
ปลั๊กอิน Android Gradle เวอร์ชัน 7.1.0 เป็นรุ่นหลักที่มี ฟีเจอร์และการปรับปรุงใหม่ๆ มากมาย
7.1.3 (เมษายน 2022)
การอัปเดตย่อยนี้มีการแก้ไขข้อบกพร่องต่อไปนี้
- ปัญหาคลาสที่ซ้ำกันซึ่ง R8 รายงาน
หากต้องการดูรายการการแก้ไขข้อบกพร่องทั้งหมดที่รวมอยู่ในการเผยแพร่รุ่นนี้ โปรดดู บล็อกโพสต์ Android Studio Bumblebee Patch 3
7.1.2 (กุมภาพันธ์ 2022)
การอัปเดตย่อยนี้มีการแก้ไขข้อบกพร่องต่อไปนี้
- ปลั๊กอิน Android Gradle เวอร์ชัน 7.1.0-rc01 ไม่สามารถทำการแปลงไบต์โค้ด ASM การแปลงระหว่างการทดสอบหน่วย
- การซิงค์ Gradle ล้มเหลวโดยมีข้อความ "Unable to load class 'com.android.build.api.extension.AndroidComponentsExtension'."
- ไม่สามารถใช้บล็อก DSL ใหม่บางบล็อกจาก Groovy DSL ในปลั๊กอิน Android Gradle Plugin เวอร์ชัน 7.0.0
- AGP 7.1 API การเผยแพร่ใหม่: ระบบไม่ได้ลงนามใน JAR ของ Javadoc ที่สร้างขึ้น
- ClassesDataSourceCache ควรใช้ Asm เวอร์ชันล่าสุด
- Android Studio BumbleBee ไม่ได้ติดตั้งใช้งานการเปลี่ยนแปลงล่าสุดเสมอไป
หากต้องการดูรายการการแก้ไขข้อบกพร่องทั้งหมดที่รวมอยู่ในการเผยแพร่รุ่นนี้ โปรดดูบล็อกโพสต์ Android Studio Bumblebee Patch 2
7.1.1 (กุมภาพันธ์ 2022)
การอัปเดตย่อยนี้สอดคล้องกับการเผยแพร่ Android Studio Bumblebee Patch 1
หากต้องการดูรายการการแก้ไขข้อบกพร่องที่รวมอยู่ในการเผยแพร่รุ่นนี้ โปรดดู บล็อกโพสต์ Android Studio Bumblebee Patch 1
ความเข้ากันได้
| เวอร์ชันขั้นต่ำ | เวอร์ชันเริ่มต้น | หมายเหตุ | |
|---|---|---|---|
| Gradle | 7.2 | 7.2 | ดูข้อมูลเพิ่มเติมได้ที่การอัปเดต Gradle |
| เครื่องมือสร้าง SDK | 30.0.3 | 30.0.3 | ติดตั้งหรือกำหนดค่าเครื่องมือสร้าง SDK |
| NDK | ไม่มี | 21.4.7075529 | ติดตั้งหรือกำหนดค่า NDK เวอร์ชันอื่น |
| JDK | 11 | 11 | ดูข้อมูลเพิ่มเติมได้ที่การตั้งค่าเวอร์ชัน JDK |
ตอนนี้งานการวิเคราะห์ Lint สามารถแคชได้แล้ว
ตอนนี้ AndroidLintAnalysisTask เข้ากันได้กับ
Gradle
แคชบิลด์แล้ว หากคุณเปิดใช้แคชบิลด์โดยตั้งค่า
org.gradle.caching=true ในไฟล์ gradle.properties
งานการวิเคราะห์ Lint จะรับเอาต์พุตจากแคชบิลด์เมื่อ
เป็นไปได้
งานการวิเคราะห์ซอร์สโค้ดมักเป็นจุดคอขวดที่ใหญ่ที่สุดเมื่อเรียกใช้เครื่องมือวิเคราะห์ซอร์สโค้ด ด้วยปลั๊กอิน Android Gradle ดังนั้นการเปิดใช้แคชบิลด์จะช่วยเพิ่มความเร็วในการบิลด์เมื่อเรียกใช้เครื่องมือวิเคราะห์ซอร์สโค้ดในหลายๆ สถานการณ์ คุณควรเห็นการปรับปรุงประสิทธิภาพอย่างเห็นได้ชัด เช่น หากคุณมีโปรเจ็กต์แบบหลายโมดูลและ ล้างไดเรกทอรีบิลด์ก่อนที่จะเรียกใช้ Lint ในเซิร์ฟเวอร์ CI
ตอนนี้โมดูล C/C++ สามารถอ้างอิงโมดูล C/C++ อื่นๆ ใน โปรเจ็กต์เดียวกันได้แล้ว
ตอนนี้คุณสามารถตั้งค่าโมดูล Gradle Android ที่มีโค้ด C/C++ เพื่ออ้างอิง ไฟล์ส่วนหัวและโค้ดไลบรารีในโมดูล Gradle อื่นได้แล้ว ระบบจะใช้โปรโตคอล Prefab เพื่อ สื่อสารส่วนหัวและไลบรารีระหว่างโมดูล Gradle
ข้อกำหนด
-
โมดูล ที่ใช้ ต้องเป็น
CMakeไม่ใช่ndk-buildการรองรับ ndk-build จะต้องมีการอัปเดต NDK ในอนาคต โมดูล ที่เผยแพร่ อาจเป็นCMakeหรือndk-build -
โมดูล ที่ใช้ ต้องเปิดใช้
prefabใน ไฟล์build.gradle
android {
buildFeatures {
prefab true
}
}- โมดูล ที่เผยแพร่ ต้องเปิดใช้
prefabPublishingในไฟล์build.gradle
android {
buildFeatures {
prefabPublishing true
}
}- โมดูล ที่ใช้ ต้องอ้างอิงโมดูล ที่เผยแพร่
โดยเพิ่มบรรทัดในบล็อก
dependenciesของไฟล์build.gradleเช่น
dependencies {
implementation project(':mylibrary')
}- โมดูล การเผยแพร่ ต้องแสดงแพ็กเกจโดยใช้ส่วน
prefabเช่น
android {
prefab {
mylibrary {
libraryName "libmylibrary"
headers "src/main/cpp/include"
}
}
}- ไฟล์
CMakeLists.txtของโมดูลที่ใช้สามารถใช้find_package()เพื่อค้นหาแพ็กเกจที่เผยแพร่โดย โมดูลที่สร้าง เช่น
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
myapplication
mylibrary::mylibrary)- ต้องมี STL 1 รายการสำหรับทั้งแอปพลิเคชัน เช่น ทั้งโมดูลที่ใช้และ โมดูลที่เผยแพร่สามารถใช้ STL ที่แชร์ของ C++ ได้
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_shared'
}
}
}
}ดูคำอธิบายเพิ่มเติมเกี่ยวกับวิธีกำหนดค่าผู้ใช้และ ผู้สร้าง AAR แบบเนทีฟด้วย AGP ได้ที่ ทรัพยากร Dependency แบบเนทีฟกับ AGP
การตั้งค่าที่เก็บในไฟล์ settings.gradle
เมื่อสร้างโปรเจ็กต์ใหม่ใน Android Studio Bumblebee ไฟล์ระดับบนสุด
build.gradle มีบล็อก plugins ตามด้วยโค้ดเพื่อล้างไดเรกทอรีบิลด์:
plugins {
id 'com.android.application' version '7.1.0-beta02' apply false
id 'com.android.library' version '7.1.0-beta02' apply false
id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}ตอนนี้การตั้งค่าที่เก็บที่เคยอยู่ในไฟล์ระดับบนสุด
build.gradle จะอยู่ในไฟล์ settings.gradle
แล้ว:
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'ไฟล์ build.gradle ระดับโมดูลยังคงเหมือนเดิม ดังนั้น ให้ใช้ไฟล์
build.gradle และไฟล์ settings.gradle เพื่อกำหนดค่าบิลด์
ที่จะใช้กับโมดูลทั้งหมดในโปรเจ็กต์ หรือที่เก็บ
และทรัพยากร Dependency ที่ใช้กับ Gradle เอง และใช้ไฟล์
build.gradle ระดับโมดูลเพื่อกำหนดค่าบิลด์ที่เฉพาะเจาะจงกับโมดูลหนึ่งๆ
ในโปรเจ็กต์
การลดขนาดทรัพยากรที่ปรับปรุงแล้ว
Android Studio Bumblebee มีการลดขนาดทรัพยากรที่ปรับปรุงแล้วซึ่งช่วย ลดขนาดแอป
การรองรับแอปที่มีฟีเจอร์แบบไดนามิก
ระบบได้อัปเดตการใช้งานเริ่มต้นของการลดขนาดทรัพยากร Android ในปลั๊กอิน Android Gradle เวอร์ชัน 7.1.0-alpha09 การใช้งานใหม่นี้ รองรับการลดขนาดแอปที่มีฟีเจอร์แบบไดนามิก
การลดขนาดแอปเพิ่มเติมแบบทดลอง
การใช้งานการลดขนาดทรัพยากรใหม่สามารถลดขนาดแอปที่ลดขนาดแล้วได้มากยิ่งขึ้นโดยการแก้ไขตารางทรัพยากรเพื่อนำทรัพยากรค่าที่ไม่ได้ใช้และการอ้างอิงทรัพยากรไฟล์ที่ไม่ได้ใช้ออก การลดขนาดทรัพยากรใหม่
สามารถลบทรัพยากรไฟล์ที่ไม่ได้ใช้ออกได้อย่างสมบูรณ์ ซึ่งจะช่วยลดขนาดแอปได้มากขึ้น
ลักษณะการทำงานนี้ยังไม่ได้เปิดใช้โดยค่าเริ่มต้น แต่คุณเลือกเข้าร่วมเพื่อลองใช้ได้โดยเพิ่มตัวเลือกแบบทดลอง android.experimental.enableNewResourceShrinker.preciseShrinking=true ลงในไฟล์ gradle.properties ของโปรเจ็กต์
โปรดรายงานปัญหาที่พบเกี่ยวกับการลดขนาดทรัพยากรใหม่หรือ
แฟล็กแบบทดลอง คุณสามารถเปลี่ยนกลับไปใช้การใช้งานก่อนหน้าได้โดยเพิ่ม
android.enableNewResourceShrinker=false ลงใน
gradle.properties ของโปรเจ็กต์ เพื่อช่วยในการวินิจฉัยปัญหาหรือใช้เป็นวิธีแก้ปัญหาชั่วคราว
การลดขนาดใหม่จะแทนที่ทรัพยากรที่อิงตามไฟล์ที่ไม่ได้ใช้ด้วยไฟล์ขนาดเล็กที่แตกต่างกันเล็กน้อย จากการลดขนาดทรัพยากรเดิม แต่คาดว่าจะไม่ส่งผลต่อการทำงาน
ระบบจะนำการใช้งานเดิมออกในปลั๊กอิน Android Gradle เวอร์ชัน 8.0.0
การเผยแพร่ตัวแปรบิลด์
ปลั๊กอิน Android Gradle เวอร์ชัน 7.1.0 ขึ้นไปช่วยให้คุณกำหนดค่าตัวแปรบิลด์ ที่จะเผยแพร่ไปยังที่เก็บ Apache Maven ได้ AGP จะสร้างคอมโพเนนต์ ที่มีตัวแปรบิลด์เดียวหรือหลายตัวแปรบิลด์ตาม DSL การเผยแพร่ใหม่ ซึ่ง คุณสามารถใช้เพื่อปรับแต่งการเผยแพร่ไปยังที่เก็บ Maven ได้ เมื่อเทียบกับ เวอร์ชันก่อนหน้า การดำเนินการนี้ยังช่วยหลีกเลี่ยงงานที่ไม่จำเป็น เนื่องจากระบบจะไม่สร้างคอมโพเนนต์โดยค่าเริ่มต้น ดูข้อมูลเพิ่มเติมได้ที่ตัวอย่างโค้ดการเผยแพร่
เผยแพร่ JAR ของ Javadoc
AGP เวอร์ชัน 7.1.0 ขึ้นไปช่วยให้คุณสร้าง Javadoc จากแหล่งที่มาของ Java และ Kotlin
และเผยแพร่ไฟล์ JAR ของ Javadoc นอกเหนือจาก AAR สำหรับโปรเจ็กต์ไลบรารี
ได้ ระบบจะเพิ่ม Javadoc ลงในไฟล์ POM และ
ไฟล์ข้อมูลเมตาของโมดูล Gradle{:.external}
เปิดใช้ฟีเจอร์นี้โดยเพิ่ม withJavadocJar() ใน
singleVariant หรือ multipleVariants บล็อกการเผยแพร่
ดูข้อมูลเพิ่มเติมได้ที่
ตัวอย่างโค้ดตัวเลือกการเผยแพร่
เผยแพร่ JAR ของแหล่งที่มา
AGP เวอร์ชัน 7.1.0 ขึ้นไปช่วยให้คุณเผยแพร่ไฟล์ JAR ของแหล่งที่มาของ Java และ Kotlin
นอกเหนือจาก AAR สำหรับโปรเจ็กต์ไลบรารีได้ ระบบจะเพิ่มแหล่งที่มาลงใน
ไฟล์ POM และ
ไฟล์ข้อมูลเมตาของโมดูล Gradle{:.external} คุณเปิดใช้ฟีเจอร์นี้ได้โดยเพิ่ม withSourcesJar() ในบล็อกการเผยแพร่ singleVariant หรือ multipleVariants ดูข้อมูลเพิ่มเติมได้ที่
ตัวอย่างโค้ดตัวเลือกการเผยแพร่
การเปลี่ยนแปลงความหมายของบล็อก Lint
ตอนนี้เมธอด Lint ทั้งหมดที่ลบล้างระดับความรุนแรงที่กำหนดของ
ปัญหา ได้แก่ enable, disable/ignore,
informational, warning, error,
fatal จะพิจารณาลำดับการกำหนดค่า ตัวอย่างเช่น
การตั้งค่าปัญหาเป็นระดับร้ายแรงใน
finalizeDsl()
จะลบล้างการปิดใช้ใน DSL หลัก ดูข้อมูลเพิ่มเติมได้ที่
lint{}
เอกสารอ้างอิงบล็อก และ
โฟลว์บิลด์
และจุดขยายของ Android
ความเข้ากันได้ของ Navigation Safe Args
ระบบได้นำ AGP API ที่ Navigation Safe Args Gradle plugin ใช้ในการทำงานออกแล้ว AGP เวอร์ชัน 7.1 ใช้ไม่ได้กับ Navigation Safe Args เวอร์ชัน 2.4.0-rc1 หรือ 2.4.0 แต่จะใช้ได้กับเวอร์ชัน 2.5.0-alpha01 และ 2.4.1 ในระหว่างนี้ คุณสามารถใช้ AGP เวอร์ชัน 7.1 กับบิลด์สแนปช็อตของ Navigation Safe Args, Navigation 2.5.0-SNAPSHOT เป็นวิธีแก้ปัญหาชั่วคราวได้ หากต้องการใช้บิลด์สแนปช็อต ให้ทำตาม วิธีการสแนปช็อต ที่มีรหัสบิลด์ #8054565
นอกจากนี้ Navigation Safe Args เวอร์ชัน 2.4.1 และ 2.5.0 จะใช้ไม่ได้กับ AGP เวอร์ชัน 4.2 อีกต่อไป หากต้องการใช้ Safe Args เวอร์ชันดังกล่าว คุณต้องใช้ AGP เวอร์ชัน 7.0 ขึ้นไป
ปิดใช้การสร้างคอมโพเนนต์อัตโนมัติ
ตั้งแต่ AGP เวอร์ชัน 8.0 เป็นต้นไป ระบบจะปิดใช้การสร้างคอมโพเนนต์อัตโนมัติโดยค่าเริ่มต้น
ปัจจุบัน AGP เวอร์ชัน 7.1 จะสร้างคอมโพเนนต์สำหรับตัวแปรบิลด์แต่ละรายการโดยอัตโนมัติ
ซึ่งจะมีชื่อเดียวกับตัวแปรบิลด์ และคอมโพเนนต์ all
ที่มีตัวแปรบิลด์ทั้งหมด ระบบจะปิดใช้การสร้างคอมโพเนนต์อัตโนมัตินี้
หากต้องการเปลี่ยนไปใช้ลักษณะการทำงานใหม่ คุณควร
ปิดใช้การสร้างคอมโพเนนต์อัตโนมัติด้วยตนเองโดยตั้งค่า
android.disableAutomaticComponentCreation เป็น true.
ดูข้อมูลเพิ่มเติมได้ที่
ใช้ปลั๊กอิน Maven Publish
ความเข้ากันได้ของการตรวจสอบประสิทธิภาพ Firebase
AGP เวอร์ชัน 7.1 ไม่เข้ากันกับปลั๊กอิน Firebase Performance Monitoring Gradle
เวอร์ชัน 1.4.0 ลงไป ผู้ช่วยอัปเกรด AGP จะไม่อัปเดตปลั๊กอินเป็นเวอร์ชัน 1.4.1 โดยอัตโนมัติ
ดังนั้นหากคุณใช้ firebase-perf และต้องการ
อัปเกรด AGP เป็นเวอร์ชัน 7.1 คุณจะต้องทำการอัปเกรดนี้ด้วยตนเอง
ปัญหาที่ทราบแล้ว
ส่วนนี้อธิบายปัญหาที่ทราบแล้วซึ่งมีอยู่ในปลั๊กอิน Android Gradle เวอร์ชัน 7.1.0
ปัญหาเกี่ยวกับการทำ Unit Test ของโปรเจ็กต์แอปที่ใช้ปลั๊กอิน Hilt
คลาสพาธของการทดสอบหน่วยมีคลาสแอปที่ไม่ได้วัดคุม ซึ่ง หมายความว่า Hilt จะไม่วัดคุมคลาสแอปเพื่อจัดการการแทรกทรัพยากร Dependency เมื่อเรียกใช้การทดสอบหน่วย
ปัญหานี้จะได้รับการแก้ไขในรุ่น 7.1.1 โปรดดูปัญหา #213534628