ปลั๊กอิน 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 สร้างโปรเจ็กต์เสร็จแล้ว ให้คลิกแท็บเครื่องมือวิเคราะห์บิลด์
- หลังจาก Android Studio สร้างโปรเจ็กต์เสร็จแล้ว ให้คลิกลิงก์ทางด้านขวาของหน้าต่างเอาต์พุตบิลด์
หน้าต่างตัววิเคราะห์บิลด์ จะจัดระเบียบปัญหาบิลด์ที่เป็นไปได้ในรูปแบบแผนผังทางด้านซ้าย คุณสามารถตรวจสอบและคลิกปัญหาแต่ละรายการเพื่อดูรายละเอียดใน แผงทางด้านขวา เมื่อ Android Studio วิเคราะห์บิลด์ ระบบจะคำนวณชุด งานที่กำหนดระยะเวลาของบิลด์และแสดงภาพเพื่อ ช่วยให้คุณเข้าใจผลกระทบของงานแต่ละรายการ นอกจากนี้ คุณยังดูรายละเอียดเกี่ยวกับคำเตือนได้โดยขยายโหนดคำเตือน
ดูข้อมูลเพิ่มเติมได้ที่ ระบุการถดถอยของความเร็วบิลด์
การยกเลิกการเพิ่มน้ำตาลในไลบรารี Java 8 ใน D8 และ R8
ตอนนี้ปลั๊กอิน Android Gradle รองรับการใช้ Java 8 Language API จำนวนมากโดยไม่ต้องกำหนดระดับ API ขั้นต่ำสำหรับแอป
คอมไพเลอร์ DEX, D8 ใน Android Studio
3.0 ขึ้นไปรองรับฟีเจอร์ภาษา Java 8 (เช่น นิพจน์แลมบ์ดา, เมธอดอินเทอร์เฟซเริ่มต้น, try-with-resources และอื่นๆ)
อย่างมากผ่านกระบวนการที่เรียกว่า การยกเลิกการเพิ่มน้ำตาล ใน Android Studio 4.0 ระบบได้ขยายเครื่องมือยกเลิกการเพิ่มน้ำตาลให้สามารถ
ยกเลิกการเพิ่มน้ำตาลใน Java Language API ได้ ซึ่งหมายความว่าตอนนี้คุณสามารถรวม Standard
Language API ที่พร้อมใช้งานเฉพาะใน Android เวอร์ชันล่าสุด (เช่น
java.util.streams) ในแอปที่รองรับ Android เวอร์ชันเก่าได้แล้ว
ระบบรองรับ API ชุดต่อไปนี้ในรุ่นนี้
- Sequential Streams (
java.util.stream) java.timeบางส่วน-
java.util.function - การเพิ่มล่าสุดใน
java.util.{Map,Collection,Comparator} - Optionals (
java.util.Optional,java.util.OptionalIntและjava.util.OptionalDouble) และคลาสใหม่อื่นๆ ที่มีประโยชน์กับ API ด้านบน - การเพิ่มบางอย่างใน
java.util.concurrent.atomic(เมธอดใหม่ในAtomicInteger,AtomicLongและAtomicReference) -
ConcurrentHashMap(พร้อมการแก้ไขข้อบกพร่องสำหรับ Android 5.0)
D8 จะคอมไพล์ไฟล์ DEX ของไลบรารีแยกต่างหากที่มีการใช้งาน API ที่ขาดหายไปและรวมไว้ในแอปเพื่อรองรับ Language API เหล่านี้ กระบวนการ Desugaring จะเขียนโค้ดของแอปใหม่เพื่อใช้ไลบรารีนี้แทนในรันไทม์
หากต้องการเปิดใช้การรองรับ Language API เหล่านี้ ให้รวมข้อมูลต่อไปนี้ในไฟล์
โมดูลแอป's 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 ในโมดูลไลบรารีแบบแยก เพื่อให้ 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} คำสั่งนี้จะค้นหาแพ็กเกจ config-file
ที่ตรงกับชื่อแพ็กเกจและเวอร์ชันที่ระบุ และแสดงเป้าหมายที่กำหนดไว้เพื่อใช้ในบิลด์ ตัวอย่างเช่น หากแอปพลิเคชันกำหนด
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 Bundle
ในปลั๊กอิน 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 Plugin เวอร์ชันก่อนหน้ากำหนดให้คุณต้องแพ็กเกจไลบรารีที่สร้างไว้ล่วงหน้าซึ่งระบบบิลด์ที่มาพร้อมเครื่องภายนอกของ 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