ทรัพยากร 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 แต่ละรายการจะแสดงไฟล์ Android.mk ในบิลด์ของคุณ สิ่งเหล่านี้คือ นำเข้าด้วยคำสั่ง import-module คำสั่งนี้จะค้นหา Android.mk ไฟล์ที่มีเส้นทางที่กำหนดภายในไดเรกทอรีการนำเข้าของบิลด์ (ตามที่กำหนดค่าไว้ โดย import-add-path) และแสดงโมดูลที่กำหนดว่าจะใช้ใน งานสร้าง ตัวอย่างเช่น หากแอปพลิเคชันของคุณกำหนด libapp.so และใช้ cURL ไฟล์ Android.mk ควรมีข้อมูลต่อไปนี้

include $(CLEAR_VARS)
LOCAL_MODULE := libapp
LOCAL_SRC_FILES := app.cpp
LOCAL_SHARED_LIBRARIES := curl
include $(BUILD_SHARED_LIBRARY)

# If you don't need your project to build with NDKs 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

$(call import-module,prefab/curl)

โปรดทราบว่าคุณต้องใช้ import-add-path อย่างชัดแจ้งเมื่อใช้ NDK ก่อนหน้าเท่านั้น ถึง r21 นับตั้งแต่วันที่ r21 เป็นต้นไป NDK_GRADLE_INJECTED_IMPORT_PATH จะเปลี่ยนไปใช้ เพิ่มลงในเส้นทางการนำเข้า

ขณะนี้ 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 ที่ผลิตโดย บิลด์ของคุณ และแต่ละรายการจะส่งออกส่วนหัวจากไดเรกทอรีที่ระบุไปยัง ผู้ติดตามของพวกเขา