Các thư viện AAR có thể chứa các phần phụ thuộc gốc mà Trình bổ trợ Android cho Gradle có thể sử dụng. AGP cũng có thể tạo ra các AAR để hiển thị các thư viện gốc cho đối tượng sử dụng.
Sử dụng phần phụ thuộc gốc
Kể từ phiên bản 4.0 của Trình bổ trợ Android cho Gradle, bạn có thể nhập phần phụ thuộc C/C++ từ các AAR đã liên kết trong tệp build.gradle. Gradle sẽ tự động cung cấp những phần phụ thuộc này cho hệ thống xây dựng gốc, nhưng bạn cần phải định cấu hình hệ thống xây dựng để sử dụng các thư viện và tiêu đề đã nhập. Vì các phần phụ thuộc C/C++ được phân phối dưới dạng các AAR, nên những đường liên kết sau về các AAR tổng quát có thể sẽ hữu ích:
- Tạo Thư viện Android gồm tài liệu AAR tổng quát và cách tích hợp AAR vào dự án, đặc biệt là khi bạn muốn sử dụng AAR dưới dạng một phần phụ thuộc C/C++ cục bộ.
- Thêm các phần phụ thuộc của bản dựng để biết thông tin về cách thêm các phần phụ thuộc vào tệp
build.gradle, đặc biệt là các phần phụ thuộc từ xa.
Tài liệu này tập trung vào cách định cấu hình hệ thống xây dựng gốc và giả định rằng bạn đã thêm AAR của phần phụ thuộc C/C++ vào môi trường bản dựng Gradle của dự án.
Phần phụ thuộc gốc trong AAR
Các phần phụ thuộc AAR của các mô-đun Gradle có thể làm hiển thị các thư viện gốc để ứng dụng sử dụng. Bên trong AAR, thư mục prefab chứa gói Prefab, bao gồm tiêu đề và thư viện của phần phụ thuộc gốc.
Mỗi phần phụ thuộc có thể hiển thị tối đa một gói Profab, bao gồm một hoặc nhiều mô-đun. Mô-đun Prefab là một thư viện đơn lẻ (có thể là thư viện chia sẻ, thư viện tĩnh hoặc thư viện chỉ chứa tiêu đề).
Để sử dụng các thư viện đó, bạn cần biết tên gói và tên mô-đun. Theo quy ước, tên gói sẽ khớp với tên cấu phần phần mềm Maven và tên mô-đun sẽ khớp với tên thư viện C/C++; nhưng điều này là không bắt buộc. Hãy tham khảo tài liệu về phần phụ thuộc để xác định tên mà phần phụ thuộc đó sử dụng.
Cấu hình hệ thống xây dựng
Bạn phải bật tính năng prefab cho mô-đun Android của Gradle.
Để thực hiện việc này, hãy thêm nội dung sau vào khối android của tệp build.gradle trong mô-đun:
Kotlin
buildFeatures { prefab = true }
Groovy
buildFeatures { prefab true }
Bạn có thể tuỳ chọn định cấu hình một phiên bản trong tệp gradle.properties của dự án:
android.prefabVersion=2.0.0
Thông thường, phiên bản AGP mặc định được chọn sẽ phù hợp với nhu cầu của bạn. Bạn chỉ nên chọn một phiên bản khác nếu cần giải quyết lỗi, hoặc cần thêm một tính năng mới.
Mỗi phần phụ thuộc sẽ hiển thị một tệp Android.mk với bản dựng. Các tệp này được nhập bằng lệnh import-module. Lệnh này tìm kiếm các tệp Android.mk với đường dẫn đã cho trong các thư mục nhập của bản dựng (được import-add-pathđịnh cấu hình) và hiển thị các mô-đun sẽ được khai báo để sử dụng trong bản dựng. Chẳng hạn, nếu ứng dụng của bạn khai báo libapp.so có sử dụng cURL, tệp Android.mk của bạn phải bao gồm nội dung sau:
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)
Lưu ý rằng khi sử dụng các phiên bản NDK trước r21, bạn bắt buộc phải có import-add-path rõ ràng. Kể từ phiên bản r21, NDK_GRADLE_INJECTED_IMPORT_PATH sẽ tự động được thêm vào các đường dẫn nhập.
app.cpp hiện có thể #include "curl/curl.h", libapp.so sẽ tự động được liên kết với libcurl.so khi tạo bản dựng và libcurl.so sẽ được đưa vào ứng dụng.
Phát hành thư viện gốc trong AAR
Chức năng tạo các AAR gốc lần đầu tiên được thêm vào AGP 4.1.
Để xuất các thư viện gốc, hãy thêm đoạn mã sau vào khối android của tệp build.gradle.kts trong dự án thư viện:
Kotlin
buildFeatures { prefabPublishing = true } prefab { create("mylibrary") { headers = "src/main/cpp/mylibrary/include" } create("myotherlibrary") { headers = "src/main/cpp/myotherlibrary/include" } }
Groovy
buildFeatures { prefabPublishing true } prefab { mylibrary { headers "src/main/cpp/mylibrary/include" } myotherlibrary { headers "src/main/cpp/myotherlibrary/include" } }
Trong ví dụ này, thư viện mylibrary và myotherlibrary từ bản dựng gốc ndk-build hoặc CMake bên ngoài sẽ được đóng gói trong AAR do bản dựng của bạn tạo ra, mỗi thư viện sẽ xuất các tiêu đề từ thư mục được chỉ định đến các phần phụ thuộc.