เพิ่มการพึ่งพิงบิวด์

ระบบบิลด์ 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 เหล่านี้ลงในโปรเจ็กต์ของคุณ

  1. เพิ่มชื่อแทนสำหรับ 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"

  2. เพิ่มชื่อแทนสำหรับทรัพยากร 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 ใน แคตตาล็อกเวอร์ชัน และไฟล์บิลด์ แล้วปล่อยให้แพลตฟอร์มจัดการเวอร์ชันเหล่านั้นให้คุณ โปรดดู การใช้เอกสารสารบัญ สำหรับรายละเอียด

  3. เพิ่มการอ้างอิงไปยังชื่อแทนทรัพยากร 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 สามารถปรับปรุงเวลาบิลด์ได้อย่างมาก เพราะช่วยลดจำนวนโมดูลที่ระบบบิลด์ต้องการ เพื่อคอมไพล์อีกครั้ง ตัวอย่างเช่น หาก implementation ทรัพยากร Dependency เปลี่ยนแปลง API, Gradle จะคอมไพล์เฉพาะทรัพยากร Dependency ดังกล่าวเท่านั้น และโมดูลที่พึ่งพาคีย์ดังกล่าวโดยตรง แอปและการทดสอบส่วนใหญ่ โมดูลควรใช้การกำหนดค่านี้

api Gradle เพิ่ม Dependency ไปยังคลาสพาธการคอมไพล์และบิลด์ เอาต์พุต เมื่อโมดูลมีทรัพยากร Dependency api ทำให้ Gradle ทราบว่าโมดูลต้องการส่งออกแบบสับเปลี่ยน ที่ขึ้นอยู่กับโมดูลอื่นๆ เพื่อให้พร้อมใช้งานที่ ทั้งรันไทม์และเวลาคอมไพล์

โปรดใช้การกำหนดค่านี้อย่างระมัดระวังและใช้สำหรับทรัพยากร Dependency ที่ คุณต้องส่งออกปลายทางไปยังผู้บริโภคต้นทางคนอื่นๆ หากมี ทรัพยากร Dependency api เปลี่ยน API ภายนอก, Gradle คอมไพล์โมดูลทั้งหมดที่มีสิทธิ์เข้าถึงทรัพยากร Dependency อีกครั้งเมื่อคอมไพล์ การมีทรัพยากร Dependency ของ api จำนวนมากได้ จะเพิ่มเวลาบิลด์ได้อย่างมาก หากคุณไม่ต้องการเปิดเผย API ของทรัพยากร Dependency ไปยังโมดูลที่แยกต่างหาก โมดูลไลบรารีควรแทนที่ ใช้การขึ้นต่อกัน implementation

compileOnly Gradle เพิ่ม Dependency ไปยังคลาสพาธคอมไพล์เท่านั้น (กล่าวคือ ไม่ได้เพิ่มลงในเอาต์พุตของบิลด์) วิธีนี้มีประโยชน์เมื่อ คุณกำลังสร้างโมดูล Android และต้องใช้ทรัพยากร Dependency ในระหว่าง ในการคอมไพล์ แต่ไม่จำเป็นต้องแสดงขณะรันไทม์ สำหรับ ตัวอย่างเช่น หากคุณจำเป็นต้องใช้ไลบรารีที่มีเฉพาะคำอธิบายประกอบเวลาคอมไพล์ ซึ่งมักจะใช้ในการสร้างโค้ด แต่มักจะไม่มีอยู่ในเอาต์พุตของบิลด์ คุณสามารถทำเครื่องหมายไลบรารีนั้นว่า compileOnly

หากคุณใช้การกำหนดค่านี้ โมดูลไลบรารีจะต้อง รวมเงื่อนไขรันไทม์เพื่อตรวจสอบว่าทรัพยากร Dependency มีการ ที่มีอยู่ และเปลี่ยนลักษณะการทำงานไปอย่างสุภาพเพื่อให้ยังคง ถ้าไม่ได้ให้ไว้ ซึ่งจะช่วยลดขนาดของ แอปสุดท้ายโดยไม่เพิ่มทรัพยากร Dependency แบบชั่วคราวที่ไม่สำคัญ

หมายเหตุ: คุณไม่สามารถใช้ compileOnly การกำหนดค่าด้วยทรัพยากร Dependency ของ Android Archive (AAR)

runtimeOnly Gradle เพิ่มทรัพยากร Dependency ไปยังเอาต์พุตของบิลด์เท่านั้นเพื่อการใช้งาน ระหว่างรันไทม์ กล่าวคือ ไม่ได้เพิ่มลงใน compile classpath วิธีนี้ไม่ค่อยใช้ใน Android แต่มักใช้ในเซิร์ฟเวอร์ แอปพลิเคชันสำหรับติดตั้งใช้งานการบันทึก ตัวอย่างเช่น ไลบรารีสามารถใช้ API การบันทึกที่ไม่มี การใช้งานของคุณ ผู้บริโภคของห้องสมุดนั้นสามารถเพิ่มเป็น ทรัพยากร Dependency implementation และมี ทรัพยากร Dependency runtimeOnly สำหรับการบันทึกจริง มาใช้จริง
ksp
kapt
annotationProcessor

การกำหนดค่าเหล่านี้จัดหาไลบรารีที่ประมวลผลคำอธิบายประกอบ และสัญลักษณ์อื่นๆ ในโค้ดก่อนที่จะคอมไพล์ ซึ่งโดยทั่วไป ตรวจสอบโค้ดหรือสร้างโค้ดเพิ่มเติม ซึ่งจะลดรหัสที่คุณ ที่จะต้องเขียน

หากต้องการเพิ่มทรัพยากร Dependency ดังกล่าว คุณจะต้องเพิ่มการอ้างอิงไปยังคลาสพาธของตัวประมวลผลคำอธิบายประกอบโดยใช้การกำหนดค่า ksp, kapt หรือ annotationProcessor การใช้สิ่งเหล่านี้ การกำหนดค่าจะปรับปรุงประสิทธิภาพของบิลด์โดยการแยกคอมไพล์ classpath จาก Classpath ตัวประมวลผลคำอธิบายประกอบ หาก Gradle พบ ตัวประมวลผลคำอธิบายประกอบในคลาสพาธคอมไพล์ จะเป็นการปิดใช้งาน การหลีกเลี่ยงคอมไพล์ ซึ่งจะส่งผลเสียต่อเวลาบิลด์ (Gradle 5.0 ขึ้นไปจะไม่สนใจตัวประมวลผลคำอธิบายประกอบที่พบในคอมไพล์ classpath)

ปลั๊กอิน Android Gradle จะถือว่าทรัพยากร Dependency เป็นคำอธิบายประกอบ หากไฟล์ JAR มีไฟล์ต่อไปนี้

META-INF/services/javax.annotation.processing.Processor

หากปลั๊กอินตรวจพบตัวประมวลผลคำอธิบายประกอบที่อยู่บน คอมไพล์คลาสพาธ ซึ่งทำให้เกิดข้อผิดพลาดในการสร้าง

ksp คือโปรเซสเซอร์สัญลักษณ์ Kotlin และขับเคลื่อนโดย คอมไพเลอร์ Kotlin

kapt และ apt เป็นเครื่องมือแยกกันที่ ประมวลผลคำอธิบายประกอบก่อนที่คอมไพเลอร์ Kotlin หรือ Java จะทำงาน

เมื่อตัดสินใจว่าจะใช้การกำหนดค่าใด ให้คำนึงถึง ดังต่อไปนี้:

  • หากมีโปรเซสเซอร์เป็น Kotlin Symbol Processor ให้ใช้ เป็นทรัพยากร Dependency ของ ksp ดูการย้ายข้อมูลจาก kapt ไปยัง ksp เพื่อดูรายละเอียดการใช้ตัวประมวลผลสัญลักษณ์ Kotlin
  • หากโปรเซสเซอร์ไม่พร้อมใช้งานเป็นหน่วยประมวลผลสัญลักษณ์ Kotlin ให้ทำดังนี้
    • โปรเจ็กต์ของคุณมีซอร์ส Kotlin หรือไม่ (แต่ยังสามารถ รวมถึงซอร์ส Java) ใช้ kapt ให้รวมเนื้อหานั้นไว้ด้วย
    • หากโปรเจ็กต์ใช้เฉพาะซอร์สของ Java ให้ใช้ annotationProcessorเพื่อรวมแคมเปญ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ตัวประมวลผลคำอธิบายประกอบ ดูที่ เพิ่มตัวประมวลผลคำอธิบายประกอบ

lintChecks

ใช้การกำหนดค่านี้เพื่อรวมไลบรารีที่มี Lint ตรวจสอบว่าคุณต้องการให้ Gradle ดำเนินการขณะสร้างแอป Android ไหม

โปรดทราบว่า AAR ที่มีไฟล์ lint.jar จะ เรียกใช้การตรวจสอบที่กำหนดไว้ในไฟล์ lint.jar นั้นโดยอัตโนมัติ คุณไม่จำเป็นต้องเพิ่มการอ้างอิง lintChecks แบบชัดแจ้ง ซึ่งช่วยให้คุณกำหนดไลบรารีและการตรวจสอบ Lint ที่เกี่ยวข้องใน การอ้างอิง เพื่อให้แน่ใจว่าการตรวจสอบของคุณจะทำงานเมื่อผู้บริโภคใช้ ไลบรารี

lintPublish ใช้การกำหนดค่านี้ในโปรเจ็กต์ไลบรารี Android เพื่อรวม Lint ตรวจสอบว่าคุณต้องการให้ Gradle คอมไพล์เป็นไฟล์ lint.jar ไหม และบรรจุหีบห่อใน AAR การดำเนินการนี้จะทำให้โปรเจ็กต์ที่ใช้ AAR เพื่อใช้การตรวจสอบ Lint เหล่านั้นด้วย หากคุณเคยใช้ การกำหนดค่าทรัพยากร Dependency ของ lintChecks ที่จะรวม Lint ตรวจสอบใน AAR ที่เผยแพร่ คุณจะต้องย้ายข้อมูลทรัพยากร Dependency เหล่านั้น เพื่อใช้การกำหนดค่า lintPublish แทน

Kotlin

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"))
}

ดึงดูด

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 ด้วย

ลำดับการขึ้นต่อกันแบบคงที่จะเป็นดังนี้

  1. LIB_A
  2. LIB_D
  3. LIB_B
  4. 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'
}