ปลั๊กอิน 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 ไม่ได้
- API การเผยแพร่ใหม่ของ AGP 7.1: ระบบจะไม่ลงนามในไฟล์ JAR ของ Javadoc ที่สร้างขึ้น
- ClassesDataSourceCache ควรใช้ Asm เวอร์ชันล่าสุด
- Android Studio BumbleBee ไม่ได้ใช้การเปลี่ยนแปลงล่าสุดเสมอไป
หากต้องการดูรายการการแก้ไขข้อบกพร่องทั้งหมดที่รวมอยู่ในการเปิดตัวนี้ โปรดดู บล็อกโพสต์เกี่ยวกับแพตช์ 2 ของ Android Studio Bumblebee
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 การติดตั้งใช้งานใหม่ รองรับการลดขนาดแอปด้วยฟีเจอร์แบบไดนามิก
การลดขนาดแอปเพิ่มเติมในเวอร์ชันทดลอง
การใช้งาน Resource Shrinker แบบใหม่จะช่วยลดขนาดของแอปที่ลดขนาดแล้วได้มากยิ่งขึ้นด้วยการแก้ไขตารางทรัพยากรเพื่อนำทรัพยากรค่าที่ไม่ได้ใช้และข้อมูลอ้างอิงไปยังทรัพยากรไฟล์ที่ไม่ได้ใช้ออก เครื่องมือลดขนาดทรัพยากรใหม่
สามารถลบทรัพยากรไฟล์ที่ไม่ได้ใช้ออกทั้งหมด ซึ่งจะช่วยลดขนาดของ
แอปได้มากขึ้น ลักษณะการทำงานนี้ยังไม่ได้เปิดใช้โดยค่าเริ่มต้น แต่คุณสามารถ
เลือกใช้เพื่อทดลองได้โดยเพิ่มตัวเลือกทดลอง
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 ได้ เมื่อเทียบกับเวอร์ชันก่อนหน้า การดำเนินการนี้ยังช่วยหลีกเลี่ยงการทำงานที่ไม่จำเป็น เนื่องจากระบบจะไม่สร้างคอมโพเนนต์โดยค่าเริ่มต้น ดูข้อมูลเพิ่มเติมได้ที่ตัวอย่างโค้ดการเผยแพร่
เผยแพร่ 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
และจุดขยาย
ความเข้ากันได้ของ Navigation Safe Args
เราได้นำ AGP API ที่ Navigation ปลั๊กอิน 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
นอกจากนี้ Navigation Safe Args เวอร์ชัน 2.4.1 และ 2.5.0 จะใช้กับ AGP 4.2 ไม่ได้อีกต่อไป หากต้องการใช้ Safe Args เวอร์ชันดังกล่าว คุณต้องใช้ AGP 7.0 ขึ้นไป
ปิดใช้การสร้างคอมโพเนนต์อัตโนมัติ
ตั้งแต่ AGP 8.0 เป็นต้นไป ระบบจะปิดใช้การสร้างคอมโพเนนต์อัตโนมัติโดยค่าเริ่มต้น
ปัจจุบัน AGP 7.1 จะสร้างคอมโพเนนต์สำหรับแต่ละ Build Variant โดยอัตโนมัติ
ซึ่งมีชื่อเดียวกับ Build Variant และคอมโพเนนต์ all
ที่มี Build Variant ทั้งหมด ระบบจะปิดใช้การสร้างคอมโพเนนต์อัตโนมัตินี้ หากต้องการเปลี่ยนไปใช้ลักษณะการทำงานใหม่ คุณควร
ปิดใช้การสร้างคอมโพเนนต์อัตโนมัติด้วยตนเองโดยการตั้งค่า
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
Classpath ของการทดสอบหน่วยประกอบด้วยคลาสแอปที่ไม่ได้ใช้เครื่องมือ ซึ่งหมายความว่า Hilt จะไม่ใช้เครื่องมือกับคลาสแอปเพื่อจัดการการขึ้นต่อกัน เมื่อเรียกใช้การทดสอบหน่วย
ปัญหานี้จะได้รับการแก้ไขในรุ่น 7.1.1 ดูปัญหา #213534628