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