ระบบบิลด์ Gradle ใน Android Studio ช่วยให้คุณรวมอุปกรณ์ภายนอก ไบนารีหรือโมดูลไลบรารีอื่นๆ ไปยังบิลด์ของคุณเป็นทรัพยากร Dependency ทรัพยากร Dependency อาจพบในเครื่องหรือในที่เก็บระยะไกล และ ทรัพยากร Dependency แบบสับเปลี่ยนที่ประกาศจะรวมไว้โดยอัตโนมัติด้วย หน้านี้อธิบายวิธีใช้ทรัพยากร Dependency กับโปรเจ็กต์ Android ซึ่งรวมถึง รายละเอียดเกี่ยวกับลักษณะการทำงานและการกำหนดค่าที่เจาะจงสำหรับ ปลั๊กอิน Android Gradle (AGP) สำหรับคู่มือเชิงแนวคิดที่เจาะลึกยิ่งขึ้นเกี่ยวกับ Gradle คุณควรจะเห็น คำแนะนำ Gradle สำหรับการจัดการทรัพยากร Dependency -แต่อย่าลืมว่าโปรเจ็กต์ Android ของคุณต้องใช้ การกำหนดค่าการขึ้นต่อกันที่กำหนดไว้ในหน้านี้
เพิ่มทรัพยากร Dependency ของไลบรารีหรือปลั๊กอิน
วิธีที่ดีที่สุดในการเพิ่มและจัดการทรัพยากร Dependency ของบิลด์คือการใช้แคตตาล็อกเวอร์ชัน วิธีที่โปรเจ็กต์ใหม่ใช้โดยค่าเริ่มต้น ส่วนนี้ครอบคลุมหัวข้อการค้นหา ประเภทการกำหนดค่าที่ใช้สำหรับโปรเจ็กต์ Android อ้างอิง เอกสารประกอบของ Gradle เพื่อดูตัวเลือกเพิ่มเติม สำหรับตัวอย่างของแอปที่ใช้แคตตาล็อกเวอร์ชัน โปรดดู พร้อมใช้งานแล้วใน Android หากคุณตั้งค่าทรัพยากร Dependency ของบิลด์ไว้แล้ว ไม่มีแคตตาล็อกเวอร์ชันและมีโปรเจ็กต์หลายโมดูล เราขอแนะนำให้ การย้ายข้อมูล
สำหรับคำแนะนำในการเพิ่มและจัดการทรัพยากร Dependency แบบเนทีฟ (ที่พบไม่บ่อย) โปรดดู ทรัพยากร Dependency แบบเนทีฟ
ในตัวอย่างต่อไปนี้ เราเพิ่มไบนารีระยะไกล
Dependency (Jetpack Macrobenchmark)
Library) โมดูลคลังท้องถิ่น
Dependency (myLibrary
) และปลั๊กอิน
Dependency (ปลั๊กอิน Android Gradle) ในโปรเจ็กต์ นี่คือข้อมูลทั่วไป
ขั้นตอนในการเพิ่มทรัพยากร Dependency เหล่านี้ลงในโปรเจ็กต์ของคุณ
เพิ่มชื่อแทนสำหรับ Dependency เวอร์ชันที่คุณต้องการใน ส่วน
[versions]
ของไฟล์แคตตาล็อกเวอร์ชัน ซึ่งมีชื่อว่าlibs.versions.toml
(ในไดเรกทอรีgradle
ใน มุมมองโปรเจ็กต์หรือสคริปต์ Gradle ในมุมมอง Android มีดังนี้[versions] agp = "8.3.0" androidx-macro-benchmark = "1.2.2" my-library = "1.4" [libraries] ... [plugins] ...
ชื่อแทนสามารถใส่ขีดกลางหรือขีดล่างได้ ชื่อแทนเหล่านี้จะสร้างค่าที่ซ้อนกัน อ้างอิงได้ในสคริปต์บิลด์ การอ้างอิงเริ่มต้นด้วยชื่อของ แคตตาล็อก ส่วน
libs
ของlibs.versions.toml
วันและเวลา โดยใช้แคตตาล็อกเวอร์ชันเดียว เราขอแนะนำให้คงค่าเริ่มต้น "libs"เพิ่มชื่อแทนสำหรับทรัพยากร Dependency ใน
[libraries]
(สำหรับ ไบนารีระยะไกลหรือโมดูลไลบรารีในเครื่อง) หรือ[plugins]
(สำหรับ Plugins) ของไฟล์libs.versions.toml
[versions] ... [libraries] androidx-benchmark-macro = { group = "androidx.benchmark", name = "benchmark-macro-junit4", version.ref = "androidx-macro-benchmark" } my-library = { group = "com.myapplication", name = "mylibrary", version.ref = "my-library" } [plugins] androidApplication = { id = "com.android.application", version.ref = "agp" }
ไลบรารีบางรายการมีอยู่ใน Bill of Materials (BOM) ที่เผยแพร่ซึ่ง จัดกลุ่มไลบรารีและเวอร์ชัน คุณสามารถใส่ BOM ใน แคตตาล็อกเวอร์ชัน และไฟล์บิลด์ แล้วปล่อยให้แพลตฟอร์มจัดการเวอร์ชันเหล่านั้นให้คุณ โปรดดู การใช้เอกสารสารบัญ สำหรับรายละเอียด
เพิ่มการอ้างอิงไปยังชื่อแทนทรัพยากร Dependency ไปยังสคริปต์บิลด์ของ โมดูลที่จำเป็นต้องพึ่งพา แปลงชื่อแทน" ขีดล่างและขีดกลาง เป็นจุดเมื่อคุณอ้างอิงสคริปต์จากบิลด์ สคริปต์บิลด์ระดับโมดูลของเรา จะมีลักษณะดังนี้
Kotlin
plugins { alias(libs.plugins.androidApplication) } dependencies { implementation(libs.androidx.benchmark.macro) implementation(libs.my.library) }
ดึงดูด
plugins { alias 'libs.plugins.androidApplication' } dependencies { implementation libs.androidx.benchmark.macro implementation libs.my.library }
การอ้างอิงปลั๊กอินจะมี
plugins
ต่อท้ายชื่อแคตตาล็อก และ การอ้างอิงเวอร์ชันจะมีversions
หลังชื่อแคตตาล็อก (เวอร์ชัน การอ้างอิงนั้นเป็นเรื่องปกติ ดูการขึ้นต่อกัน ด้วยหมายเลขเวอร์ชันเดียวกันสำหรับตัวอย่างการอ้างอิงเวอร์ชัน) คลัง การอ้างอิงไม่มีตัวระบุlibraries
คุณจึงไม่สามารถใช้versions
หรือplugins
ที่ตอนต้นของคลัง ชื่อแทน
กำหนดค่าทรัพยากร Dependency
ภายในบล็อก dependencies
คุณจะประกาศทรัพยากร Dependency ของไลบรารีได้โดยใช้
ของการกำหนดค่าการขึ้นต่อกันที่แตกต่างกันหลายรายการ (เช่น แสดง implementation
ก่อนหน้า) การกำหนดค่าทรัพยากร Dependency แต่ละรายการจะมี Gradle
วิธีการใช้งานทรัพยากร Dependency ตารางต่อไปนี้จะอธิบายเกี่ยวกับ
การกำหนดค่าที่คุณสามารถใช้สำหรับทรัพยากร Dependency ในโปรเจ็กต์ Android
การกำหนดค่า | ลักษณะการทำงาน |
---|---|
implementation |
Gradle เพิ่ม Dependency ไปยังคลาสพาธการคอมไพล์และ
ทำแพ็กเกจทรัพยากร Dependency ไปยังเอาต์พุตของบิลด์ เมื่อ
จะกำหนดค่าทรัพยากร Dependency ของ implementation
เพื่อให้ Gradle ทราบว่าคุณไม่ต้องการให้โมดูลเปิดเผย
ทรัพยากร Dependency ไปยังโมดูลอื่นๆ ในเวลาคอมไพล์ ซึ่งก็คือการขึ้นต่อกัน
ไม่สามารถใช้งานได้สำหรับโมดูลอื่นๆ ที่ขึ้นอยู่กับ
การใช้การกำหนดค่าทรัพยากร Dependency นี้แทน
|
api |
Gradle เพิ่ม Dependency ไปยังคลาสพาธการคอมไพล์และบิลด์
เอาต์พุต เมื่อโมดูลมีทรัพยากร Dependency api
ทำให้ Gradle ทราบว่าโมดูลต้องการส่งออกแบบสับเปลี่ยน
ที่ขึ้นอยู่กับโมดูลอื่นๆ เพื่อให้พร้อมใช้งานที่
ทั้งรันไทม์และเวลาคอมไพล์
โปรดใช้การกำหนดค่านี้อย่างระมัดระวังและใช้สำหรับทรัพยากร Dependency ที่
คุณต้องส่งออกปลายทางไปยังผู้บริโภคต้นทางคนอื่นๆ หากมี
ทรัพยากร Dependency |
compileOnly |
Gradle เพิ่ม Dependency ไปยังคลาสพาธคอมไพล์เท่านั้น
(กล่าวคือ ไม่ได้เพิ่มลงในเอาต์พุตของบิลด์) วิธีนี้มีประโยชน์เมื่อ
คุณกำลังสร้างโมดูล Android และต้องใช้ทรัพยากร Dependency ในระหว่าง
ในการคอมไพล์ แต่ไม่จำเป็นต้องแสดงขณะรันไทม์ สำหรับ
ตัวอย่างเช่น หากคุณจำเป็นต้องใช้ไลบรารีที่มีเฉพาะคำอธิบายประกอบเวลาคอมไพล์ ซึ่งมักจะใช้ในการสร้างโค้ด แต่มักจะไม่มีอยู่ในเอาต์พุตของบิลด์ คุณสามารถทำเครื่องหมายไลบรารีนั้นว่า compileOnly
หากคุณใช้การกำหนดค่านี้ โมดูลไลบรารีจะต้อง รวมเงื่อนไขรันไทม์เพื่อตรวจสอบว่าทรัพยากร Dependency มีการ ที่มีอยู่ และเปลี่ยนลักษณะการทำงานไปอย่างสุภาพเพื่อให้ยังคง ถ้าไม่ได้ให้ไว้ ซึ่งจะช่วยลดขนาดของ แอปสุดท้ายโดยไม่เพิ่มทรัพยากร Dependency แบบชั่วคราวที่ไม่สำคัญ
หมายเหตุ: คุณไม่สามารถใช้ |
runtimeOnly |
Gradle เพิ่มทรัพยากร Dependency ไปยังเอาต์พุตของบิลด์เท่านั้นเพื่อการใช้งาน
ระหว่างรันไทม์ กล่าวคือ ไม่ได้เพิ่มลงใน compile classpath
วิธีนี้ไม่ค่อยใช้ใน Android แต่มักใช้ในเซิร์ฟเวอร์
แอปพลิเคชันสำหรับติดตั้งใช้งานการบันทึก ตัวอย่างเช่น
ไลบรารีสามารถใช้ API การบันทึกที่ไม่มี
การใช้งานของคุณ ผู้บริโภคของห้องสมุดนั้นสามารถเพิ่มเป็น
ทรัพยากร Dependency implementation และมี
ทรัพยากร Dependency runtimeOnly สำหรับการบันทึกจริง
มาใช้จริง
|
ksp |
การกำหนดค่าเหล่านี้จัดหาไลบรารีที่ประมวลผลคำอธิบายประกอบ และสัญลักษณ์อื่นๆ ในโค้ดก่อนที่จะคอมไพล์ ซึ่งโดยทั่วไป ตรวจสอบโค้ดหรือสร้างโค้ดเพิ่มเติม ซึ่งจะลดรหัสที่คุณ ที่จะต้องเขียน หากต้องการเพิ่มทรัพยากร Dependency ดังกล่าว คุณจะต้องเพิ่มการอ้างอิงไปยังคลาสพาธของตัวประมวลผลคำอธิบายประกอบโดยใช้การกำหนดค่า ปลั๊กอิน Android Gradle จะถือว่าทรัพยากร Dependency เป็นคำอธิบายประกอบ หากไฟล์ JAR มีไฟล์ต่อไปนี้
หากปลั๊กอินตรวจพบตัวประมวลผลคำอธิบายประกอบที่อยู่บน คอมไพล์คลาสพาธ ซึ่งทำให้เกิดข้อผิดพลาดในการสร้าง
เมื่อตัดสินใจว่าจะใช้การกำหนดค่าใด ให้คำนึงถึง ดังต่อไปนี้:
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ตัวประมวลผลคำอธิบายประกอบ ดูที่ เพิ่มตัวประมวลผลคำอธิบายประกอบ |
lintChecks |
ใช้การกำหนดค่านี้เพื่อรวมไลบรารีที่มี Lint ตรวจสอบว่าคุณต้องการให้ Gradle ดำเนินการขณะสร้างแอป Android ไหม โปรดทราบว่า AAR ที่มีไฟล์ |
lintPublish |
ใช้การกำหนดค่านี้ในโปรเจ็กต์ไลบรารี Android เพื่อรวม Lint
ตรวจสอบว่าคุณต้องการให้ Gradle คอมไพล์เป็นไฟล์ lint.jar ไหม
และบรรจุหีบห่อใน AAR การดำเนินการนี้จะทำให้โปรเจ็กต์ที่ใช้
AAR เพื่อใช้การตรวจสอบ Lint เหล่านั้นด้วย หากคุณเคยใช้
การกำหนดค่าทรัพยากร Dependency ของ lintChecks ที่จะรวม Lint
ตรวจสอบใน AAR ที่เผยแพร่ คุณจะต้องย้ายข้อมูลทรัพยากร Dependency เหล่านั้น
เพื่อใช้การกำหนดค่า lintPublish แทน
Kotlindependencies { // Executes lint checks from the ":checks" project at build time. lintChecks(project(":checks")) // Compiles lint checks from the ":checks-to-publish" into a // lint.jar file and publishes it to your Android library. lintPublish(project(":checks-to-publish")) } ดึงดูดdependencies { // Executes lint checks from the ':checks' project at build time. lintChecks project(':checks') // Compiles lint checks from the ':checks-to-publish' into a // lint.jar file and publishes it to your Android library. lintPublish project(':checks-to-publish') } |
กำหนดค่าทรัพยากร Dependency สำหรับตัวแปรบิลด์ที่เฉพาะเจาะจง
การกำหนดค่าก่อนหน้านี้ทั้งหมดจะใช้ทรัพยากร Dependency กับตัวแปรบิลด์ทั้งหมด ถ้า คุณต้องการประกาศทรัพยากร Dependency สำหรับบิลด์ ชุดแหล่งที่มาของตัวแปรหรือสำหรับแหล่งที่มาของการทดสอบ set [ตั้งค่า] คุณต้องใช้ตัวพิมพ์ใหญ่สำหรับการกำหนดค่า และขึ้นต้นชื่อด้วยชื่อของตัวแปรบิลด์หรือชุดแหล่งที่มาของการทดสอบ
เช่น หากต้องการเพิ่มทรัพยากร Dependency ของไบนารีระยะไกลใน "ฟรี" เท่านั้น ผลิตภัณฑ์
รสชาติ โดยใช้การกำหนดค่า implementation
ให้ใช้:
Kotlin
dependencies { freeImplementation("com.google.firebase:firebase-ads:21.5.1") }
ดึงดูด
dependencies { freeImplementation 'com.google.firebase:firebase-ads:21.5.1' }
อย่างไรก็ตาม หากต้องการเพิ่มทรัพยากร Dependency สำหรับผลิตภัณฑ์ย่อยที่รวมผลิตภัณฑ์หนึ่งๆ รสชาติ และประเภทบิลด์ จากนั้นคุณต้องเริ่มต้นชื่อการกำหนดค่าดังนี้
Kotlin
// Initializes a placeholder for the freeDebugImplementation dependency configuration. val freeDebugImplementation by configurations.creating dependencies { freeDebugImplementation(project(":free-support")) }
ดึงดูด
configurations { // Initializes a placeholder for the freeDebugImplementation dependency configuration. freeDebugImplementation {} } dependencies { freeDebugImplementation project(":free-support") }
วิธีเพิ่มทรัพยากร Dependency implementation
สำหรับการทดสอบในเครื่องและการทดสอบแบบมีเครื่องควบคุม
ซึ่งจะมีลักษณะดังนี้
Kotlin
dependencies { // Adds a remote binary dependency only for local tests. testImplementation("junit:junit:4.12") // Adds a remote binary dependency only for the instrumented test APK. androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") }
ดึงดูด
dependencies { // Adds a remote binary dependency only for local tests. testImplementation 'junit:junit:4.12' // Adds a remote binary dependency only for the instrumented test APK. androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' }
อย่างไรก็ตาม การกำหนดค่าบางอย่างอาจไม่สมเหตุสมผลในกรณีนี้ ตัวอย่างเช่น
เนื่องจากโมดูลอื่นๆ ต้องไม่ขึ้นอยู่กับ androidTest
คุณจะได้รับสิ่งต่อไปนี้
คำเตือนหากคุณใช้การกำหนดค่า androidTestApi
:
WARNING: Configuration 'androidTestApi' is obsolete and has been replaced with 'androidTestImplementation'.
ลำดับการขึ้นต่อกัน
ลำดับที่คุณแสดงรายการทรัพยากร Dependency จะระบุลำดับความสำคัญของแต่ละทรัพยากร ดังนี้ ไลบรารีแรกมีความสำคัญสูงกว่าไลบรารีที่สอง ไลบรารีไลบรารีแรกมีความสำคัญสูงกว่า ลำดับความสำคัญที่ 3 เป็นเช่นนี้ไปเรื่อยๆ ลำดับนี้จะมีความสำคัญในกรณีที่ มีการรวมทรัพยากร หรือ ผสานองค์ประกอบไฟล์ Manifest จากไลบรารีลงในแอปของคุณ
เช่น หากโปรเจ็กต์ประกาศสิ่งต่อไปนี้
- การขึ้นต่อกันกับ
LIB_A
และLIB_B
(ตามลำดับนั้น) - และ
LIB_A
ขึ้นอยู่กับLIB_C
และLIB_D
(ตามลำดับ) - และ
LIB_B
ยังขึ้นอยู่กับLIB_C
ด้วย
ลำดับการขึ้นต่อกันแบบคงที่จะเป็นดังนี้
LIB_A
LIB_D
LIB_B
LIB_C
วิธีนี้ช่วยให้มั่นใจว่าทั้ง LIB_A
และ LIB_B
จะลบล้างได้
LIB_C
; และ LIB_D
ยังคงมีลำดับความสำคัญสูงกว่า
LIB_B
เนื่องจาก LIB_A
(แล้วแต่กรณี)
มีลำดับความสำคัญสูงกว่า LIB_B
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีไฟล์ Manifest จากโปรเจ็กต์ต่างๆ มีการรวมแหล่งที่มา/การขึ้นต่อกัน ดู รวมไฟล์ Manifest หลายไฟล์
ข้อมูลการขึ้นต่อกันสำหรับ Play Console
เมื่อสร้างแอปของคุณ AGP จะรวมข้อมูลเมตาที่อธิบายไลบรารี ทรัพยากร Dependency ที่คอมไพล์ลงในแอป เมื่ออัปโหลดแอป Play Console จะตรวจสอบข้อมูลเมตานี้เพื่อแจ้งเตือนปัญหาที่ทราบเกี่ยวกับ SDK และ ทรัพยากร Dependency ที่แอปของคุณใช้ และในบางกรณีอาจให้ความคิดเห็นที่นำไปใช้ได้จริงแก่ แก้ไขปัญหาเหล่านั้นได้
ข้อมูลจะได้รับการบีบอัดและเข้ารหัสโดยคีย์ Signing ของ Google Play แล้วจัดเก็บไว้ใน
บล็อกการลงนามของแอปที่เผยแพร่ เราขอแนะนำให้เก็บทรัพยากร Dependency นี้ไว้
เพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ดีและปลอดภัย คุณสามารถเลือกไม่ใช้โดยใส่
กำลังติดตาม
dependenciesInfo
ในไฟล์ build.gradle.kts
ของโมดูล
android {
dependenciesInfo {
// Disables dependency metadata when building APKs.
includeInApk = false
// Disables dependency metadata when building Android App Bundles.
includeInBundle = false
}
}
ดูข้อมูลเพิ่มเติมเกี่ยวกับนโยบายของเราและปัญหาที่อาจเกิดขึ้นกับทรัพยากร Dependency ได้ที่ หน้าการสนับสนุนของเราที่ การใช้ SDK ของบุคคลที่สามในแอป
ข้อมูลเชิงลึกของ SDK
Android Studio แสดงคำเตือน Lint ในไฟล์แคตตาล็อกเวอร์ชันและโปรเจ็กต์ กล่องโต้ตอบโครงสร้างสำหรับ SDK สาธารณะใน ดัชนี SDK ของ Google Play เมื่อมีปัญหาต่อไปนี้
- ผู้เขียนทำเครื่องหมาย SDK นี้ว่าล้าสมัย
- SDK ละเมิดนโยบายของ Play
คำเตือนเป็นสัญญาณที่คุณควรอัปเดตทรัพยากร Dependency เหล่านี้ เนื่องจาก การใช้เวอร์ชันเก่าอาจขัดขวางไม่ให้คุณเผยแพร่ ไปยัง Google Play คอนโซลในอนาคต
เพิ่มทรัพยากร Dependency ของบิลด์โดยไม่มีแคตตาล็อกเวอร์ชัน
เราขอแนะนำให้ใช้แคตตาล็อกเวอร์ชันเพื่อเพิ่มและจัดการทรัพยากร Dependency ที่ไม่ซับซ้อน อาจไม่จำเป็นต้องใช้ นี่คือตัวอย่างของไฟล์บิลด์ที่ไม่ได้ใช้ แคตตาล็อกเวอร์ชัน:
Kotlin
plugins { id("com.android.application") } android { ... } dependencies { // Dependency on a remote binary implementation("com.example.android:app-magic:12.3") // Dependency on a local library module implementation(project(":mylibrary")) }
ดึงดูด
plugins { id 'com.android.application' } android { ... } dependencies { // Dependency on a remote binary implementation 'com.example.android:app-magic:12.3' // Dependency on a local library module implementation project(':mylibrary') }
ไฟล์บิลด์นี้ประกาศทรัพยากร Dependency ของ "app-magic" เวอร์ชัน 12.3 ภายใน "com.example.android" กลุ่มเนมสเปซ ไบนารีระยะไกล การประกาศการอ้างอิงเป็นชื่อย่อสำหรับรายการต่อไปนี้
Kotlin
implementation(group = "com.example.android", name = "app-magic", version = "12.3")
ดึงดูด
implementation group: 'com.example.android', name: 'app-magic', version: '12.3'
ไฟล์บิลด์จะประกาศทรัพยากร Dependency ในโมดูลไลบรารี Android ด้วยที่ชื่อว่า
"mylibrary"; ชื่อนี้ต้องตรงกับชื่อไลบรารีที่กำหนดไว้ด้วย include:
ใน
ไฟล์ settings.gradle.kts
ของคุณ เมื่อคุณสร้างแอป ระบบบิลด์
คอมไพล์โมดูลไลบรารีและจัดแพ็กเกจเนื้อหาที่ได้คอมไพล์แล้วใน
แอป
ไฟล์บิลด์ประกาศทรัพยากร Dependency ของปลั๊กอิน Android Gradle ด้วย
(com.application.android
) หากคุณมีหลายโมดูลที่ใช้โมดูลเดียวกัน
ปลั๊กอิน คุณจะมีปลั๊กอินได้ในคลาสพาธบิลด์เท่านั้น
ในทุกโมดูล แทนที่จะระบุเวอร์ชันในแต่ละโมดูล
สคริปต์บิลด์ คุณควรรวมการพึ่งพาปลั๊กอินไว้ในสคริปต์บิลด์รูท
พร้อมข้อมูลเวอร์ชัน และระบุว่าไม่ใช้ การเพิ่ม apply false
บอก
Gradle สังเกตเวอร์ชันของปลั๊กอิน แต่ไม่ควรใช้ในรุ่นรูท
โดยทั่วไปแล้ว สคริปต์บิลด์รูทจะว่างเปล่ายกเว้นบล็อก plugins
นี้
Kotlin
plugins { id("org.jetbrains.kotlin.android") version "1.9.0" apply false }
ดึงดูด
plugins { id ‘com.android.application’ version ‘8.3.0-rc02’ apply false }
หากคุณมีโปรเจ็กต์โมดูลเดียว คุณสามารถระบุเวอร์ชันอย่างชัดแจ้งใน สคริปต์บิลด์ระดับโมดูลและปล่อยสคริปต์บิลด์ระดับโปรเจ็กต์ว่างไว้
Kotlin
plugins { id("com.android.application") version "8.3.0" }
ดึงดูด
plugins { id 'com.android.application' version '8.3.0-rc02' }