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

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