ปลั๊กอิน 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 ล้มเหลวโดยมีข้อความ "โหลดคลาส '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
หากต้องการดูรายการการแก้ไขข้อบกพร่องที่รวมอยู่ในรุ่นนี้ โปรดดู บล็อกโพสต์เกี่ยวกับแพตช์ 1 ของ Android Studio Bumblebee
ความเข้ากันได้
เวอร์ชันต่ำสุด | เวอร์ชันเริ่มต้น | หมายเหตุ | |
---|---|---|---|
เกรเดิล | 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 จะได้รับเอาต์พุตจากแคชการสร้างเมื่อเป็นไปได้
งานวิเคราะห์ Lint มักเป็นปัญหาคอขวดที่สำคัญที่สุดเมื่อเรียกใช้ Lint ด้วยปลั๊กอิน Gradle ของ Android ดังนั้นการเปิดใช้แคชการสร้างจะช่วยเพิ่มความเร็วในการสร้างเมื่อเรียกใช้ Lint ในหลายกรณี คุณควรเห็นการปรับปรุงประสิทธิภาพที่เห็นได้ชัด เช่น หากคุณมีโปรเจ็กต์แบบหลายโมดูลและล้างไดเรกทอรีบิลด์ก่อนเรียกใช้ Lint ในเซิร์ฟเวอร์ CI
ตอนนี้โมดูล C/C++ อาจอ้างอิงโมดูล C/C++ อื่นๆ ในโปรเจ็กต์เดียวกันแล้ว
ตอนนี้คุณตั้งค่าโมดูล Android ของ Gradle ที่มีโค้ด 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
}
}
- โมดูลการบริโภคต้องอ้างอิงโมดูลการเผยแพร่โดยการเพิ่มบรรทัดในบล็อก
build.gradle
ของไฟล์dependencies
เช่น
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 ได้ที่การพึ่งพาแบบดั้งเดิมกับ 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
ของโปรเจ็กต์
โปรดรายงานปัญหาที่คุณพบเกี่ยวกับเครื่องมือบีบอัดทรัพยากรใหม่หรือ Flag เวอร์ชันทดลอง หากต้องการช่วยวิเคราะห์ปัญหาหรือใช้เป็นวิธีแก้ปัญหาชั่วคราว คุณเปลี่ยนกลับไปใช้การติดตั้งใช้งานก่อนหน้านี้ได้โดยเพิ่ม android.enableNewResourceShrinker=false
ลงใน gradle.properties
ของโปรเจ็กต์
ตัวบีบอัดใหม่จะแทนที่ทรัพยากรที่อิงตามไฟล์ที่ไม่ได้ใช้ด้วยไฟล์ขนาดเล็กที่แตกต่างจากตัวบีบอัดทรัพยากรก่อนหน้านี้เล็กน้อย แต่ไม่น่าจะมีผลกระทบต่อรันไทม์
การใช้งานแบบเก่ามีกำหนดเวลาที่จะนำออกในปลั๊กอิน Android Gradle เวอร์ชัน 8.0.0
การเผยแพร่ตัวแปรของบิลด์
ปลั๊กอิน Android Gradle 7.1.0 ขึ้นไปให้คุณกำหนดค่าตัวแปรการสร้างที่จะเผยแพร่ไปยังที่เก็บ Apache Maven ได้ AGP จะสร้างคอมโพเนนต์ที่มีตัวแปรการสร้างรายการเดียวหรือหลายรายการตาม DSL การเผยแพร่แบบใหม่ ซึ่งคุณใช้เพื่อปรับแต่งการเผยแพร่ในที่เก็บ Maven ได้ ซึ่งเมื่อเทียบกับเวอร์ชันก่อนหน้าแล้ว วิธีนี้ยังช่วยหลีกเลี่ยงการทำงานที่ไม่จำเป็นด้วย เนื่องจากระบบจะไม่สร้างคอมโพเนนต์โดยค่าเริ่มต้น ดูข้อมูลเพิ่มเติมได้ในตัวอย่างโค้ดการเผยแพร่
เผยแพร่ Javadoc JAR
AGP 7.1.0 ขึ้นไปช่วยให้คุณสร้าง Javadoc จากแหล่งที่มา Java และ Kotlin และเผยแพร่ไฟล์ Javadoc JAR เพิ่มเติมด้วย 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
ความเข้ากันได้ของ Safe Args สำหรับการนําทาง
ระบบนำ AGP API ที่ปลั๊กอิน Gradle ของ Safe Args ต้องใช้ออกแล้ว 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
นอกจากนี้ 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 ใช้ร่วมกับปลั๊กอิน Gradle ของการตรวจสอบประสิทธิภาพ Firebase เวอร์ชัน 1.4.0 และต่ำกว่าไม่ได้ ผู้ช่วยการอัปเกรด AGP จะไม่อัปเดตปลั๊กอินเป็นเวอร์ชัน 1.4.1 โดยอัตโนมัติ ดังนั้นหากคุณใช้ firebase-perf
และต้องอัปเกรด AGP เป็น 7.1 คุณจะต้องทำการอัปเกรดนี้ด้วยตนเอง
ปัญหาที่ทราบ
ส่วนนี้จะอธิบายปัญหาที่ทราบซึ่งอยู่ในปลั๊กอิน Android Gradle 7.1.0
ปัญหาเกี่ยวกับการทดสอบหน่วยของโปรเจ็กต์แอปที่ใช้ปลั๊กอิน Hilt
เส้นทางคลาสการทดสอบหน่วยประกอบด้วยคลาสแอปที่ไม่ได้เครื่องมือวัด ซึ่งหมายความว่า Hilt จะไม่เครื่องมือวัดคลาสแอปเพื่อจัดการการนําเข้าข้อมูลตามข้อกําหนดเมื่อเรียกใช้การทดสอบหน่วย
ปัญหานี้จะได้รับการแก้ไขในรุ่น 7.1.1 ดูปัญหา #213534628