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