ทรัพยากร Dependency ของระบบที่มีปลั๊กอิน Android Gradle

ไลบรารี AAR อาจมีทรัพยากร Dependency แบบเนทีฟซึ่งปลั๊กอิน Android Gradle ทำได้ ใช้ AGP ยังสามารถสร้าง AAR ที่เปิดเผยไลบรารีเนทีฟได้ด้วย ผู้บริโภคของตน

การใช้ทรัพยากร Dependency แบบเนทีฟ

ตั้งแต่ปลั๊กอิน Android Gradle 4.0 เป็นต้นไป คุณจะนำเข้าทรัพยากร Dependency ของ C/C++ ได้จาก AAR ที่ลิงก์ในไฟล์ build.gradle Gradle จะทำให้ ใช้ได้กับระบบบิลด์ดั้งเดิม แต่ต้องกำหนดค่าระบบบิลด์ เพื่อใช้ประโยชน์จากไลบรารีและส่วนหัวที่นำเข้า เนื่องจากทรัพยากร Dependency ของ C/C++ เผยแพร่เป็น AAR ลิงก์ต่อไปนี้เกี่ยวกับ AAR ทั่วไปอาจเป็นประโยชน์

  • การสร้างไลบรารี Android สำหรับเอกสารประกอบเกี่ยวกับ AAR ทั่วไปและ วิธีผสานรวมเทคโนโลยี เข้ากับโปรเจ็กต์ของคุณ โดยเฉพาะอย่างยิ่งเมื่อต้องการ ใช้ AAR เป็นทรัพยากร Dependency ของ C/C++ ในเครื่อง
  • เพิ่มการอ้างอิงของบิลด์สำหรับข้อมูลในการเพิ่มการอ้างอิงลงในไฟล์ build.gradle โดยเฉพาะอย่างยิ่งสำหรับทรัพยากร Dependency ระยะไกล

เอกสารนี้มุ่งเน้นที่วิธีกำหนดค่าระบบบิลด์เนทีฟและจะถือว่าคุณได้ดำเนินการแล้ว เพิ่ม AAR ของ Dependency ของ C/C++ ในสภาพแวดล้อมบิลด์ Gradle ของโปรเจ็กต์แล้ว

ทรัพยากร Dependency ของระบบใน AAR

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

ทรัพยากร Dependency แต่ละรายการจะแสดงแพ็กเกจ Prefab ได้สูงสุด 1 แพ็กเกจ ซึ่งประกอบด้วยแพ็กเกจ 1 รายการหรือ โมดูลเพิ่มเติม โมดูล Prefab คือไลบรารีเดียว ซึ่งอาจเป็น ไลบรารีที่ใช้ร่วมกัน ภาพนิ่ง หรือเฉพาะส่วนหัวเท่านั้น

ต้องระบุชื่อแพ็กเกจและโมดูลจึงจะใช้ไลบรารีได้ โดย รูปแบบ ชื่อแพ็กเกจจะตรงกับชื่ออาร์ติแฟกต์ของ Maven และโมดูล จะตรงกับชื่อไลบรารี C/C++ แต่ไม่จําเป็น ไปที่ เอกสารประกอบของทรัพยากร Dependency เพื่อพิจารณาว่าจะใช้ชื่อใด

การกำหนดค่าระบบของบิลด์

ต้องเปิดใช้ฟีเจอร์ prefab สำหรับโมดูล Android Gradle

โดยในการดำเนินการ ให้เพิ่มค่าต่อไปนี้ในบล็อก android ของโมดูลของคุณ ไฟล์ build.gradle:

Kotlin

buildFeatures {
  prefab = true
}

ดึงดูด

buildFeatures {
  prefab true
}

(ไม่บังคับ) กำหนดค่าเวอร์ชัน ในไฟล์ gradle.properties ของโครงการ:

android.prefabVersion=2.0.0

โดยปกติแล้ว AGP เวอร์ชันเริ่มต้นที่เลือกจะเหมาะกับความต้องการของคุณ คุณควรทำดังนี้ คุณต้องเลือกเวอร์ชันอื่นหากมีข้อบกพร่อง ที่คุณต้องแก้ไขหรือ ฟีเจอร์ใหม่ที่คุณต้องการ

ทรัพยากร Dependency ที่นําเข้าจาก AAR จะแสดงต่อ CMake ผ่าน CMAKE_FIND_ROOT_PATH Gradle จะตั้งค่านี้โดยอัตโนมัติเมื่อ มีการเรียกใช้ CMake ดังนั้นหากบิลด์ของคุณแก้ไขตัวแปรนี้ อย่าลืมเพิ่ม แทนที่จะกำหนดให้กับส่วนนี้

ทรัพยากร Dependency แต่ละรายการจะแสดงแพ็กเกจไฟล์การกำหนดค่าในบิลด์ของคุณ สิ่งเหล่านี้คือ นำเข้าด้วยคำสั่ง find_package คำสั่งนี้จะค้นหาไฟล์การกำหนดค่า แพ็กเกจที่ตรงกับชื่อและเวอร์ชันแพ็กเกจที่ระบุ และแสดงเป้าหมาย กำหนดว่าจะใช้ในบิลด์ของคุณ ตัวอย่างเช่น หากแอปพลิเคชันของคุณกำหนด libapp.so และ URL ใช้ cURL ซึ่ง CMakeLists.txt ของคุณควรมีข้อมูลต่อไปนี้

add_library(app SHARED app.cpp)

# Add these two lines.
find_package(curl REQUIRED CONFIG)
target_link_libraries(app curl::curl)

ขณะนี้ app.cpp สามารถ#include "curl/curl.h"ได้แล้ว libapp.so จะทำสิ่งต่อไปนี้ได้ ลิงก์กับ libcurl.so โดยอัตโนมัติเมื่อสร้าง และ libcurl.so จะ ไปกับแอปได้

การเผยแพร่ไลบรารีแบบเนทีฟใน AAR

โดยมีการเพิ่มความสามารถในการสร้าง AAR ดั้งเดิมเข้ามาครั้งแรกใน AGP 4.1

ในการส่งออกไลบรารีเนทีฟ ให้เพิ่มค่าต่อไปนี้ในบล็อก android ของ ไฟล์ build.gradle.kts ของโครงการห้องสมุดของคุณ:

Kotlin

buildFeatures {
    prefabPublishing = true
}

prefab {
    create("mylibrary") {
      headers = "src/main/cpp/mylibrary/include"
    }

    create("myotherlibrary") {
        headers = "src/main/cpp/myotherlibrary/include"
    }
}

ดึงดูด

buildFeatures {
    prefabPublishing true
}

prefab {
    mylibrary {
      headers "src/main/cpp/mylibrary/include"
    }

    myotherlibrary {
        headers "src/main/cpp/myotherlibrary/include"
    }
}

ในตัวอย่างนี้ ไลบรารี mylibrary และ myotherlibrary จาก ndk-build หรือ CMake เวอร์ชันดั้งเดิมภายนอกจะได้รับการจัดแพ็กเกจใน AAR ที่ผลิตโดย บิลด์ของคุณ และแต่ละรายการจะส่งออกส่วนหัวจากไดเรกทอรีที่ระบุไปยัง ผู้ติดตามของพวกเขา