ปลั๊กอิน Android Gradle 7.1.0 (มกราคม 2022)
ปลั๊กอิน Android Gradle 7.1.0 เป็นรุ่นหลักที่มีฟีเจอร์และการปรับปรุงใหม่ๆ มากมาย
7.1.3 (เมษายน 2022)
การอัปเดตเล็กน้อยนี้มีการแก้ไขข้อบกพร่องต่อไปนี้
- ปัญหาคลาสที่ซ้ำกันซึ่ง R8 รายงาน
หากต้องการดูรายการข้อบกพร่องทั้งหมดที่แก้ไขแล้วในรุ่นนี้ โปรดดู บล็อกโพสต์เกี่ยวกับแพตช์ 3 ของ Android Studio Bumblebee
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 new publishing API: created javadoc jar does not get signed
- ClassesDataSourceCache ควรใช้ Asm เวอร์ชันล่าสุด
- Android Studio Bumblebee อาจไม่ติดตั้งใช้งานการเปลี่ยนแปลงล่าสุดเสมอไป
หากต้องการดูรายการข้อบกพร่องทั้งหมดที่แก้ไขแล้วในรุ่นนี้ โปรดดู บล็อกโพสต์เกี่ยวกับ Android Studio Bumblebee Patch 2
7.1.1 (กุมภาพันธ์ 2022)
การอัปเดตเล็กน้อยนี้สอดคล้องกับรุ่น Android Studio Bumblebee Patch 1
หากต้องการดูรายการการแก้ไขข้อบกพร่องที่รวมอยู่ในรุ่นนี้ โปรดดู บล็อกโพสต์เกี่ยวกับแพตช์ 1 ของ Android Studio Bumblebee
ความเข้ากันได้
เวอร์ชันต่ำสุด | เวอร์ชันเริ่มต้น | หมายเหตุ | |
---|---|---|---|
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 จะได้รับเอาต์พุตจากแคชการสร้างเมื่อเป็นไปได้
งานวิเคราะห์ Lint มักเป็นปัญหาคอขวดที่สำคัญที่สุดเมื่อเรียกใช้ Lint ด้วยปลั๊กอิน Android Gradle ดังนั้นการเปิดใช้แคชการสร้างจะช่วยเพิ่มความเร็วในการสร้างเมื่อเรียกใช้ 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 และเผยแพร่ไฟล์ 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
ความเข้ากันได้ของ 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