ปลั๊กอิน 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)
   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 และจุดขยาย

เราได้นำ 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