ปลั๊กอิน Android Gradle เวอร์ชัน 4.0.0 (เมษายน 2020)
ปลั๊กอิน Android เวอร์ชันนี้กำหนดให้ต้องมีสิ่งต่อไปนี้
-
Gradle 6.1.1. ดูข้อมูลเพิ่มเติมได้ในส่วนเกี่ยวกับการอัปเดต Gradle
-
SDK Build Tools 29.0.2 ขึ้นไป
การอัปเดตย่อยนี้รองรับความเข้ากันได้กับการตั้งค่าเริ่มต้นและ ฟีเจอร์ใหม่สำหรับ ระดับการมองเห็นแพ็กเกจ ใน Android 11
ใน Android เวอร์ชันก่อนหน้า คุณสามารถดูรายการแอปทั้งหมด
ที่ติดตั้งในอุปกรณ์ได้ ตั้งแต่ Android 11 (ระดับ API 30) ขึ้นไป แอปจะเข้าถึงได้เฉพาะรายการแพ็กเกจที่ติดตั้งซึ่งกรองแล้วโดยค่าเริ่มต้น
หากต้องการดูรายการแอปที่กว้างขึ้นในระบบ ตอนนี้คุณต้อง
เพิ่ม
<queries> องค์ประกอบ ในไฟล์ Manifest ของ Android ของแอปหรือไลบรารี
ปลั๊กอิน Android Gradle เวอร์ชัน 4.1 ขึ้นไปเข้ากันได้กับการประกาศใหม่
<queries> แล้ว แต่เวอร์ชันเก่าไม่
เข้ากัน หากคุณเพิ่มองค์ประกอบ <queries> หรือหากคุณ
เริ่มใช้ไลบรารีหรือ SDK ที่รองรับการกำหนดเป้าหมายเป็น Android 11 คุณ
อาจพบข้อผิดพลาดในการผสานไฟล์ Manifest เมื่อสร้างแอป
เราจึงออกแพตช์ชุดหนึ่งสำหรับ AGP 3.3 และขึ้นไปเพื่อแก้ไขปัญหานี้ หากใช้ AGP เวอร์ชันเก่า อัปเกรด เป็นเวอร์ชันใดเวอร์ชันหนึ่งต่อไปนี้
| เวอร์ชันขั้นต่ำ | เวอร์ชันเริ่มต้น | หมายเหตุ | |
|---|---|---|---|
| Gradle | 6.1.1 | 6.1.1 | ดูข้อมูลเพิ่มเติมได้ที่การอัปเดต Gradle |
| SDK Build Tools | 29.0.2 | 29.0.2 | ติดตั้ง หรือ กำหนดค่า SDK Build Tools |
ดูข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์ใหม่นี้ได้ที่ ระดับการมองเห็นแพ็กเกจ ใน Android 11
ฟีเจอร์ใหม่
ปลั๊กอิน Android Gradle เวอร์ชันนี้มีฟีเจอร์ใหม่ต่อไปนี้
การรองรับตัววิเคราะห์บิลด์ของ Android Studio
หน้าต่างตัววิเคราะห์บิลด์ ช่วยให้คุณเข้าใจและวินิจฉัยปัญหาเกี่ยวกับกระบวนการบิลด์ เช่น การเพิ่มประสิทธิภาพที่ปิดใช้และงานที่กำหนดค่าไม่ถูกต้อง
ฟีเจอร์นี้พร้อมใช้งานเมื่อคุณใช้ Android Studio 4.0 ขึ้นไปกับ
ปลั๊กอิน Android Gradle 4.0.0 ขึ้นไป คุณสามารถเปิดหน้าต่างตัววิเคราะห์บิลด์ จาก Android Studio ได้โดยทำดังนี้
- หากยังไม่ได้ดำเนินการ ให้สร้างแอปโดยเลือกสร้าง > สร้างโปรเจ็กต์ จากแถบเมนู
- เลือกมุมมอง > หน้าต่างเครื่องมือ > สร้าง จากแถบเมนู
- ในหน้าต่างสร้าง ให้เปิดหน้าต่างตัววิเคราะห์บิลด์ ด้วยวิธีใดวิธีหนึ่งต่อไปนี้
- หลังจาก Android Studio สร้างโปรเจ็กต์เสร็จแล้ว ให้คลิกแท็บBuild Analyzer
- หลังจาก Android Studio สร้างโปรเจ็กต์เสร็จแล้ว ให้คลิกลิงก์ทางด้านขวาของหน้าต่างเอาต์พุตการสร้าง
หน้าต่างตัววิเคราะห์บิลด์ จะจัดระเบียบปัญหาบิลด์ที่อาจเกิดขึ้นในรูปแบบแผนผังทางด้าน ซ้าย คุณสามารถตรวจสอบและคลิกปัญหาแต่ละรายการเพื่อดูรายละเอียดใน แผงทางด้านขวา เมื่อ Android Studio วิเคราะห์บิลด์ ระบบจะคำนวณชุดงานที่กำหนดระยะเวลาของบิลด์และแสดงข้อมูลผ่านภาพเพื่อช่วยให้คุณเข้าใจผลกระทบของงานแต่ละรายการ นอกจากนี้ คุณยังดูรายละเอียดเกี่ยวกับการแจ้งเตือนได้โดยขยายโหนดการแจ้งเตือน
ดูข้อมูลเพิ่มเติมได้ที่ ระบุการถดถอยของความเร็วในการสร้าง
การทำกระบวนการ Desugaring ไลบรารี Java 8 ใน D8 และ R8
ตอนนี้ปลั๊กอิน Android Gradle รองรับการใช้ Java 8 Language API จำนวนมากโดยไม่ต้องกำหนดระดับ API ขั้นต่ำสำหรับแอป
คอมไพเลอร์ DEX, D8 ใน Android Studio
3.0 ขึ้นไปรองรับฟีเจอร์ภาษา Java 8 (เช่น Lambda Expression, Default Interface Method, Try-with-resources และอื่นๆ)
อย่างมากผ่านกระบวนการที่เรียกว่า Desugaring ใน Android Studio 4.0 เราได้ขยายเครื่องมือ Desugaring ให้สามารถ
ทำกระบวนการ Desugaring Java Language API ได้ ซึ่งหมายความว่าตอนนี้คุณสามารถรวม Standard
Language API ที่มีเฉพาะใน Android เวอร์ชันล่าสุด (เช่น
java.util.streams) ไว้ในแอปที่รองรับ Android เวอร์ชันเก่าได้
ระบบรองรับ API ชุดต่อไปนี้ในเวอร์ชันนี้
- Sequential Stream (
java.util.stream) java.timeบางส่วน-
java.util.function - การเพิ่มล่าสุดใน
java.util.{Map,Collection,Comparator} - Optionals (
java.util.Optional,java.util.OptionalIntandjava.util.OptionalDouble) และคลาสใหม่ๆ อื่นๆ ที่มีประโยชน์กับ API ด้านบน - การเพิ่มบางอย่างใน
java.util.concurrent.atomic(เมธอดใหม่ในAtomicInteger,AtomicLongและAtomicReference) -
ConcurrentHashMap(พร้อมการแก้ไขข้อบกพร่องสำหรับ Android 5.0)
D8 จะคอมไพล์ไฟล์ DEX ของไลบรารีแยกต่างหากที่มีการใช้งาน API ที่ขาดหายไปและรวมไว้ในแอปเพื่อรองรับ Language API เหล่านี้ กระบวนการ Desugaring จะเขียนโค้ดของแอปใหม่เพื่อใช้ไลบรารีนี้แทนในรันไทม์
หากต้องการเปิดใช้การรองรับ Language API เหล่านี้ ให้รวมข้อมูลต่อไปนี้ไว้ใน
โมดูลแอปของbuild.gradleไฟล์:
android {
defaultConfig {
// Required when setting minSdkVersion to 20 or lower
multiDexEnabled true
}
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
// Sets Java compatibility to Java 8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.4'
}
android {
defaultConfig {
// Required when setting minSdkVersion to 20 or lower
multiDexEnabled = true
}
compileOptions {
// Flag to enable support for the new language APIs
isCoreLibraryDesugaringEnabled = true
// Sets Java compatibility to Java 8
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
}
dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.0.4")
}
โปรดทราบว่าคุณอาจต้องรวมข้อมูลโค้ดด้านบนไว้ในไฟล์
โมดูลไลบรารี's build.gradle ด้วยในกรณีต่อไปนี้
-
การทดสอบแบบมีเครื่องมือของโมดูลไลบรารีใช้ Language API เหล่านี้ (โดยตรงหรือผ่านโมดูลไลบรารีหรือทรัพยากร Dependency) เพื่อให้ระบบมี API ที่ขาดหายไปสำหรับ APK การทดสอบแบบมีเครื่องมือ
-
คุณต้องการเรียกใช้เครื่องมือวิเคราะห์ซอร์สโค้ดในโมดูลไลบรารีแบบแยก เพื่อให้ Lint จดจำการใช้งาน Language API ที่ถูกต้องและหลีกเลี่ยงการรายงานการแจ้งเตือนที่ผิดพลาด
ตัวเลือกใหม่ในการเปิดหรือปิดใช้ฟีเจอร์บิลด์
ปลั๊กอิน Android Gradle เวอร์ชัน 4.0.0 ขอแนะนำวิธีใหม่ในการควบคุมฟีเจอร์บิลด์ที่ต้องการเปิดและปิดใช้ เช่น View Binding และ Data Binding เมื่อมีการเพิ่มฟีเจอร์ใหม่ ระบบจะปิดใช้ฟีเจอร์เหล่านั้นโดยค่าเริ่มต้น จากนั้นคุณสามารถใช้บล็อก buildFeatures เพื่อเปิดใช้เฉพาะฟีเจอร์ที่ต้องการ ซึ่งจะช่วยเพิ่มประสิทธิภาพบิลด์สำหรับโปรเจ็กต์ คุณสามารถตั้งค่าตัวเลือกสำหรับแต่ละโมดูลในไฟล์ระดับโมดูล build.gradle ได้ดังนี้
android {
// The default value for each feature is shown below. You can change the value to
// override the default behavior.
buildFeatures {
// Determines whether to generate a BuildConfig class.
buildConfig = true
// Determines whether to support View Binding.
// Note that the viewBinding.enabled property is now deprecated.
viewBinding = false
// Determines whether to support Data Binding.
// Note that the dataBinding.enabled property is now deprecated.
dataBinding = false
// Determines whether to generate binder classes for your AIDL files.
aidl = true
// Determines whether to support RenderScript.
renderScript = true
// Determines whether to support injecting custom variables into the module’s R class.
resValues = true
// Determines whether to support shader AOT compilation.
shaders = true
}
}android {
// The default value for each feature is shown below. You can change the value to
// override the default behavior.
buildFeatures {
// Determines whether to generate a BuildConfig class.
buildConfig = true
// Determines whether to support View Binding.
// Note that the viewBinding.enabled property is now deprecated.
viewBinding = false
// Determines whether to support Data Binding.
// Note that the dataBinding.enabled property is now deprecated.
dataBinding = false
// Determines whether to generate binder classes for your AIDL files.
aidl = true
// Determines whether to support RenderScript.
renderScript = true
// Determines whether to support injecting custom variables into the module’s R class.
resValues = true
// Determines whether to support shader AOT compilation.
shaders = true
}
}นอกจากนี้ คุณยังระบุการตั้งค่าเริ่มต้นสำหรับฟีเจอร์เหล่านี้ในทุกโมดูล
ของโปรเจ็กต์ได้โดยรวมรายการต่อไปนี้อย่างน้อย 1 รายการไว้ในไฟล์
gradle.properties ของโปรเจ็กต์ ดังที่แสดงด้านล่าง โปรดทราบว่าคุณยังคงใช้บล็อก
buildFeatures ในไฟล์ระดับโมดูล build.gradle เพื่อลบล้างการตั้งค่าเริ่มต้นทั่วทั้งโปรเจ็กต์เหล่านี้ได้
android.defaults.buildfeatures.buildconfig=true
android.defaults.buildfeatures.aidl=true
android.defaults.buildfeatures.renderscript=true
android.defaults.buildfeatures.resvalues=true
android.defaults.buildfeatures.shaders=trueทรัพยากร Dependency ของฟีเจอร์กับฟีเจอร์
ในปลั๊กอิน Android Gradle เวอร์ชันก่อนหน้า โมดูลฟีเจอร์ทั้งหมด
ขึ้นอยู่กับโมดูลฐานของแอปเท่านั้น เมื่อใช้ปลั๊กอิน Android Gradle
4.0.0 ตอนนี้คุณสามารถรวมโมดูลฟีเจอร์ที่ขึ้นอยู่กับโมดูลฟีเจอร์อื่นได้ นั่นคือ ฟีเจอร์ :video สามารถขึ้นอยู่กับฟีเจอร์
:camera ซึ่งขึ้นอยู่กับโมดูลฐาน ดังที่แสดงในรูปภาพด้านล่าง
โมดูลฟีเจอร์ :video ขึ้นอยู่กับฟีเจอร์
:camera ซึ่งขึ้นอยู่กับโมดูลฐาน :app
ซึ่งหมายความว่าเมื่อแอปขอให้ดาวน์โหลดโมดูลฟีเจอร์ แอปจะดาวน์โหลดโมดูลฟีเจอร์อื่นๆ ที่ขึ้นอยู่กับโมดูลนั้นด้วย หลังจากสร้างโมดูลฟีเจอร์สำหรับแอปแล้ว คุณสามารถประกาศทรัพยากร Dependency ของฟีเจอร์กับฟีเจอร์ในไฟล์ build.gradle ของโมดูลได้ เช่น โมดูล :video จะประกาศทรัพยากร Dependency ใน
:camera ดังนี้
// In the build.gradle file of the ':video' module.
dependencies {
// All feature modules must declare a dependency
// on the base module.
implementation project(':app')
// Declares that this module also depends on the 'camera'
// feature module.
implementation project(':camera')
...
}// In the build.gradle file of the ':video' module.
dependencies {
// All feature modules must declare a dependency
// on the base module.
implementation(project(":app"))
// Declares that this module also depends on the 'camera'
// feature module.
implementation(project(":camera"))
...
}นอกจากนี้ คุณควรเปิดใช้ฟีเจอร์ทรัพยากร Dependency ของฟีเจอร์กับฟีเจอร์ใน Android Studio (เพื่อรองรับฟีเจอร์เมื่อแก้ไขการกำหนดค่าการเรียกใช้ เช่น) โดยคลิก ความช่วยเหลือ > แก้ไขตัวเลือก VM ที่กำหนดเอง จากแถบเมนู แล้วรวมข้อมูลต่อไปนี้
-Drundebug.feature.on.feature=trueข้อมูลเมตาของทรัพยากร Dependency
เมื่อสร้างแอปโดยใช้ปลั๊กอิน Android Gradle เวอร์ชัน 4.0.0 ขึ้นไป ปลั๊กอินจะรวมข้อมูลเมตาที่อธิบายทรัพยากร Dependency ที่คอมไพล์ลงในแอป เมื่ออัปโหลดแอป Play Console จะตรวจสอบข้อมูลเมตานี้เพื่อให้คุณได้รับประโยชน์ต่อไปนี้
- รับการแจ้งเตือนเกี่ยวกับปัญหาที่ทราบแล้วเกี่ยวกับ SDK และทรัพยากร Dependency ที่แอปใช้
- รับความคิดเห็นที่นำไปใช้ได้จริงเพื่อแก้ไขปัญหาเหล่านั้น
ระบบจะบีบอัดข้อมูล เข้ารหัสด้วยคีย์การลงนามของ Google Play และจัดเก็บไว้ในบล็อกการลงนามของแอปที่เผยแพร่ อย่างไรก็ตาม คุณสามารถตรวจสอบข้อมูลเมตาด้วยตนเองในไฟล์การสร้างระดับกลางในเครื่องในไดเรกทอรี <project>/<module>/build/outputs/sdk-dependencies/release/sdkDependency.txt
หากไม่ต้องการแชร์ข้อมูลนี้ คุณสามารถเลือกไม่รับได้โดยรวมข้อมูลต่อไปนี้ไว้ในไฟล์ build.gradle ของโมดูล
android {
dependenciesInfo {
// Disables dependency metadata when building APKs.
includeInApk = false
// Disables dependency metadata when building Android App Bundles.
includeInBundle = false
}
}android {
dependenciesInfo {
// Disables dependency metadata when building APKs.
includeInApk = false
// Disables dependency metadata when building Android App Bundles.
includeInBundle = false
}
}นำเข้าไลบรารีที่มาพร้อมเครื่องจากทรัพยากร Dependency ของ AAR
ตอนนี้คุณสามารถนำเข้าไลบรารี C/C++ จากทรัพยากร Dependency ของ AAR ของแอปได้แล้ว เมื่อทำตามขั้นตอนการกำหนดค่าที่อธิบายไว้ด้านล่าง Gradle จะทำให้ไลบรารีแบบเนทีฟเหล่านี้พร้อมใช้งานโดยอัตโนมัติเพื่อใช้กับระบบบิลด์แบบเนทีฟภายนอก เช่น CMake โปรดทราบว่า Gradle จะทำให้ไลบรารีเหล่านี้พร้อมใช้งานสำหรับการสร้างเท่านั้น คุณยังคงต้องกำหนดค่าสคริปต์การสร้างเพื่อใช้ไลบรารีเหล่านี้
ระบบจะส่งออกไลบรารีโดยใช้รูปแบบแพ็กเกจ Prefab
ทรัพยากร Dependency แต่ละรายการจะแสดงแพ็กเกจ Prefab ได้อย่างมาก 1 รายการ ซึ่งประกอบด้วยโมดูลอย่างน้อย 1 รายการ โมดูล Prefab คือไลบรารีเดียว ซึ่งอาจเป็นไลบรารีที่ใช้ร่วมกัน ไลบรารีแบบคงที่ หรือไลบรารีส่วนหัวเท่านั้น
โดยปกติแล้วชื่อแพ็กเกจจะตรงกับชื่ออาร์ติแฟกต์ Maven และชื่อโมดูล ตรงกับชื่อไลบรารี แต่ก็ไม่เสมอไป เนื่องจากคุณต้องทราบชื่อแพ็กเกจและชื่อโมดูลของไลบรารี คุณจึงอาจต้องดูเอกสารประกอบของทรัพยากร Dependency เพื่อกำหนดชื่อเหล่านั้น
กำหนดค่าระบบบิลด์ที่มาพร้อมเครื่องภายนอก
หากต้องการดูขั้นตอนที่ต้องทำ ให้ทำตามขั้นตอนด้านล่างสำหรับระบบบิลด์ที่มาพร้อมเครื่องภายนอกที่คุณวางแผนจะใช้
ทรัพยากร Dependency ของ AAR แต่ละรายการของแอปที่มีโค้ดแบบเนทีฟจะแสดงไฟล์
Android.mk ที่คุณต้องนำเข้าไปยังโปรเจ็กต์ ndk-build คุณนำเข้า
ไฟล์นี้โดยใช้คำสั่ง import&endash;module ซึ่งจะค้นหาเส้นทางที่คุณ
ระบุโดยใช้พร็อพเพอร์ตี้ import&endash;add&endash;path ในโปรเจ็กต์ ndk-build เช่น
หากแอปพลิเคชันกำหนด libapp.so และใช้ curl คุณ
ควรใส่ข้อมูลต่อไปนี้ในไฟล์ Android.mk
-
สำหรับ CMake
add_library(app SHARED app.cpp)# Add these two lines. find_package(curl REQUIRED CONFIG) target_link_libraries(app curl::curl)
-
สำหรับ
ndk-buildinclude $(CLEAR_VARS) LOCAL_MODULE := libapp LOCAL_SRC_FILES := app.cpp # Link libcurl from the curl AAR. LOCAL_SHARED_LIBRARIES := curl include $(BUILD_SHARED_LIBRARY)# If you don't expect that your project will be built using versions of the NDK # older than r21, you can omit this block. ifneq ($(call ndk-major-at-least,21),true) $(call import-add-path,$(NDK_GRADLE_INJECTED_IMPORT_PATH)) endif
# Import all modules that are included in the curl AAR. $(call import-module,prefab/curl)
ระบบจะแสดงทรัพยากร Dependency ที่มาพร้อมเครื่องซึ่งรวมอยู่ใน AAR ให้โปรเจ็กต์ CMake ผ่าน CMAKE_FIND_ROOT_PATH{: .external} ตัวแปร Gradle จะตั้งค่านี้โดยอัตโนมัติเมื่อ เรียกใช้ CMake ดังนั้นหากระบบบิลด์แก้ไขตัวแปรนี้ ให้ตรวจสอบว่าได้เพิ่มค่าต่อท้ายตัวแปรแทนการกำหนดค่า
ทรัพยากร Dependency แต่ละรายการจะแสดงแพ็กเกจ config-file{: .external} ให้การสร้าง CMake ซึ่งคุณ
นำเข้าด้วยคำสั่ง find_package{: .external} คำสั่งนี้จะค้นหาแพ็กเกจไฟล์การกำหนดค่าที่ตรงกับชื่อแพ็กเกจและเวอร์ชันที่ระบุ และแสดงเป้าหมายที่กำหนดไว้เพื่อใช้ในการบิลด์ เช่น หากแอปพลิเคชันกำหนด
libapp.so และใช้ curl คุณควรใส่ข้อมูลต่อไปนี้ในไฟล์
CMakeLists.txt
add_library(app SHARED app.cpp)
# Add these two lines.
find_package(curl REQUIRED CONFIG)
target_link_libraries(app curl::curl)
ตอนนี้คุณสามารถระบุ #include "curl/curl.h" ใน app.cpp ได้แล้ว เมื่อสร้างโปรเจ็กต์ ระบบบิลด์ที่มาพร้อมเครื่องภายนอกจะลิงก์ libapp.so กับ libcurl.so และแพ็กเกจ libcurl.so ใน APK หรือ App Bundle โดยอัตโนมัติ ดูข้อมูลเพิ่มเติมได้ที่ ตัวอย่าง Prefab ของ curl{:.external}
การเปลี่ยนแปลงพฤติกรรม
เมื่อใช้ปลั๊กอินเวอร์ชันนี้ คุณอาจพบการเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้
การอัปเดตการกำหนดค่าการลงชื่อ v1/v2
ลักษณะการทำงานสำหรับการกำหนดค่า App Signing ในบล็อก signingConfig เปลี่ยนไปดังนี้
การลงนาม v1
- หากเปิดใช้
v1SigningEnabledอย่างชัดแจ้ง AGP จะทำการลงนามแอป v1 - หากผู้ใช้ปิดใช้
v1SigningEnabledอย่างชัดแจ้ง ระบบจะไม่ทำการลงนามแอป v1 - หากผู้ใช้ไม่ได้เปิดใช้การลงนาม v1 อย่างชัดแจ้ง ระบบอาจปิดใช้โดยอัตโนมัติ
ตาม
minSdkและtargetSdk
การลงนาม v2
- หากเปิดใช้
v2SigningEnabledอย่างชัดแจ้ง AGP จะทำการลงนามแอป v2 - หากผู้ใช้ปิดใช้
v2SigningEnabledอย่างชัดแจ้ง ระบบจะไม่ทำการลงนามแอป v2 - หากผู้ใช้ไม่ได้เปิดใช้การลงนาม v2 อย่างชัดแจ้ง ระบบอาจปิดใช้โดยอัตโนมัติ
ตาม
targetSdk
การเปลี่ยนแปลงเหล่านี้ช่วยให้ AGP เพิ่มประสิทธิภาพการสร้างได้โดยการปิดใช้กลไกการลงนาม
ตามที่ผู้ใช้เปิดใช้แฟล็กเหล่านี้อย่างชัดแจ้งหรือไม่ ก่อนหน้านี้
รีลีสนี้ v1Signing อาจถูกปิดใช้แม้ว่าจะเปิดใช้อย่างชัดแจ้ง
ซึ่งอาจทำให้เกิดความสับสน
นำปลั๊กอิน Android Gradle feature และ instantapp ออกแล้ว
ปลั๊กอิน Android Gradle เวอร์ชัน 3.6.0 เลิกใช้งานปลั๊กอินฟีเจอร์
(com.android.feature) และปลั๊กอิน Instant App
(com.android.instantapp) และแนะนำให้ใช้ปลั๊กอินฟีเจอร์แบบไดนามิก
(com.android.dynamic-feature) เพื่อสร้างและแพ็กเกจ
Instant App โดยใช้ Android App Bundles
ในปลั๊กอิน Android Gradle เวอร์ชัน 4.0.0 ขึ้นไป เราได้นำปลั๊กอินที่เลิกใช้งานแล้วเหล่านี้ออกทั้งหมด ดังนั้น หากต้องการใช้ปลั๊กอิน Android Gradle เวอร์ชันล่าสุด คุณต้องย้ายข้อมูล Instant App เพื่อรองรับ Android App Bundle การย้ายข้อมูล Instant App จะช่วยให้คุณใช้ประโยชน์จาก App Bundle และ ลดความซับซ้อนของการออกแบบแบบแยกส่วนของแอปได้
หมายเหตุ: หากต้องการเปิดโปรเจ็กต์ที่ใช้ปลั๊กอินที่นำออกแล้วใน Android Studio 4.0 ขึ้นไป โปรเจ็กต์ต้องใช้ปลั๊กอิน Android Gradle เวอร์ชัน 3.6.0 หรือต่ำกว่า
นำฟีเจอร์การประมวลผลคำอธิบายประกอบแยกต่างหากออกแล้ว
เราได้นำความสามารถในการแยกการประมวลผลคำอธิบายประกอบออกเป็นงานเฉพาะออกแล้ว
ตัวเลือกนี้ใช้เพื่อรักษาการคอมไพล์ Java แบบเพิ่มทีละน้อยเมื่อใช้โปรเซสเซอร์สำหรับคำอธิบายประกอบที่ไม่เพิ่มทีละน้อยในโปรเจ็กต์ Java เท่านั้น โดยเปิดใช้ได้โดยตั้งค่า android.enableSeparateAnnotationProcessing เป็น true ในไฟล์ gradle.properties ซึ่งใช้ไม่ได้อีกต่อไป
คุณควรย้ายข้อมูลไปใช้ โปรเซสเซอร์สำหรับคำอธิบายประกอบแบบเพิ่มทีละน้อย แทนเพื่อปรับปรุงประสิทธิภาพการสร้าง
includeCompileClasspath เลิกใช้งานแล้ว
ปลั๊กอิน Android Gradle จะไม่ตรวจสอบหรือรวมโปรเซสเซอร์สำหรับคำอธิบายประกอบที่คุณประกาศใน Compile Classpath อีกต่อไป และพร็อพเพอร์ตี้ DSL annotationProcessorOptions.includeCompileClasspath จะไม่มีผลอีกต่อไป หากคุณรวมโปรเซสเซอร์สำหรับคำอธิบายประกอบไว้ใน Compile Classpath คุณ
อาจได้รับข้อผิดพลาดต่อไปนี้
Error: Annotation processors must be explicitly declared now.หากต้องการแก้ไขปัญหานี้ คุณต้องรวมโปรเซสเซอร์สำหรับคำอธิบายประกอบไว้ในไฟล์
build.gradle โดยใช้การกำหนดค่าทรัพยากร Dependency annotationProcessor
ดูข้อมูลเพิ่มเติมได้ที่เพิ่มโปรเซสเซอร์สำหรับคำอธิบายประกอบ
การแพ็กเกจทรัพยากร Dependency ที่สร้างไว้ล่วงหน้าซึ่ง CMake ใช้โดยอัตโนมัติ
ปลั๊กอิน Android Gradle เวอร์ชันก่อนหน้ากำหนดให้คุณต้องแพ็กเกจไลบรารีที่สร้างไว้ล่วงหน้าซึ่งระบบการสร้างที่มาพร้อมเครื่องภายนอกของ CMake ใช้โดยชัดแจ้งโดยใช้ jniLibs คุณอาจมีไลบรารีในไดเรกทอรี
src/main/jniLibs ของโมดูล หรืออาจอยู่ในไดเรกทอรีอื่นๆ ที่กำหนดค่าไว้ในไฟล์ build.gradle
sourceSets {
main {
// The libs directory contains prebuilt libraries that are used by the
// app's library defined in CMakeLists.txt via an IMPORTED target.
jniLibs.srcDirs = ['libs']
}
}sourceSets {
main {
// The libs directory contains prebuilt libraries that are used by the
// app's library defined in CMakeLists.txt via an IMPORTED target.
jniLibs.setSrcDirs(listOf("libs"))
}
}ปลั๊กอิน Android Gradle เวอร์ชัน 4.0 ไม่จำเป็นต้องมีการกำหนดค่าข้างต้นอีกต่อไป และจะทำให้การสร้างล้มเหลว
* What went wrong:
Execution failed for task ':app:mergeDebugNativeLibs'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
> More than one file was found with OS independent path 'lib/x86/libprebuilt.so'ตอนนี้ระบบการสร้างที่มาพร้อมเครื่องภายนอกจะแพ็กเกจไลบรารีเหล่านั้นโดยอัตโนมัติ ดังนั้นการแพ็กเกจไลบรารีด้วย jniLibs อย่างชัดแจ้งจะทำให้เกิดการซ้ำกัน หากต้องการหลีกเลี่ยงข้อผิดพลาดในการบิลด์ ให้ย้ายไลบรารีที่สร้างไว้ล่วงหน้าไปยังตำแหน่ง
ภายนอก jniLibs หรือนำการกำหนดค่า jniLibs ออกจากไฟล์ build.gradle
ของคุณ
ปัญหาที่ทราบแล้ว
ส่วนนี้อธิบายปัญหาที่ทราบแล้วซึ่งพบในปลั๊กอิน Android Gradle เวอร์ชัน 4.0.0
ภาวะแข่งขันในกลไกการทำงานของ Gradle
การเปลี่ยนแปลงในปลั๊กอิน Android Gradle เวอร์ชัน 4.0 อาจทำให้เกิดภาวะแข่งขันใน Gradle เมื่อเรียกใช้ด้วย &endash;&endash;no&endash;daemon และ Gradle เวอร์ชัน 6.3 หรือต่ำกว่า ซึ่งจะทำให้บิลด์ค้างหลังจากบิลด์เสร็จแล้ว
เราจะแก้ไขปัญหานี้ใน Gradle เวอร์ชัน 6.4