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

ระบบนำ 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