وابستگی های بومی با افزونه Android Gradle

کتابخانه‌های AAR می‌توانند حاوی وابستگی‌های بومی باشند که افزونه Gradle Android می‌تواند از آن استفاده کند. AGP همچنین قادر به تولید AARهایی است که کتابخانه های بومی را در معرض دید مصرف کنندگان خود قرار می دهد.

استفاده از وابستگی های بومی

با شروع پلاگین Android Gradle نسخه 4.0، وابستگی های C/C++ را می توان از AAR هایی که در فایل build.gradle شما پیوند داده شده اند وارد کرد. Gradle به طور خودکار این موارد را برای سیستم ساخت بومی در دسترس قرار می دهد، اما سیستم ساخت شما باید طوری پیکربندی شود که از کتابخانه ها و هدرهای وارد شده استفاده کند. از آنجایی که وابستگی های C/C++ به صورت AAR توزیع می شوند، پیوندهای زیر در مورد AAR های عمومی ممکن است مفید باشند:

  • ایجاد یک کتابخانه Android برای اسناد عمومی AAR و نحوه ادغام آن در پروژه خود، به خصوص زمانی که می خواهید از AAR به عنوان یک وابستگی محلی C/C++ استفاده کنید.
  • برای اطلاعات در مورد افزودن وابستگی ها به فایل build.gradle خود، به خصوص برای وابستگی های راه دور ، وابستگی های ساخت اضافه کنید .

این سند بر نحوه پیکربندی سیستم ساخت بومی خود تمرکز می کند و فرض می کند که قبلاً یک AAR وابستگی C/C++ را به محیط ساخت Gradle پروژه خود اضافه کرده اید.

وابستگی های بومی در AAR ها

وابستگی‌های AAR ماژول‌های Gradle شما می‌توانند کتابخانه‌های بومی را برای استفاده توسط برنامه شما در معرض دید قرار دهند. در داخل AAR، دایرکتوری prefab حاوی یک بسته Prefab است که شامل سرصفحه ها و کتابخانه های وابستگی بومی است.

هر وابستگی می تواند حداکثر یک بسته Prefab را که شامل یک یا چند ماژول است، نشان دهد. یک ماژول Prefab یک کتابخانه واحد است که می تواند یک کتابخانه اشتراکی، ایستا یا فقط هدر باشد.

برای استفاده از کتابخانه ها باید نام بسته و ماژول مشخص باشد. طبق قرارداد، نام بسته با نام مصنوع Maven و نام ماژول با نام کتابخانه C/C++ مطابقت دارد، اما این مورد نیاز نیست. برای تعیین اینکه از چه نام هایی استفاده می کند، با اسناد وابستگی مشورت کنید.

پیکربندی سیستم را بسازید

ویژگی prefab باید برای ماژول Android Gradle شما فعال باشد.

برای انجام این کار، موارد زیر را به بلوک android فایل build.gradle ماژول خود اضافه کنید:

کاتلین

buildFeatures {
  prefab = true
}

شیار

buildFeatures {
  prefab true
}

در صورت تمایل، یک نسخه را در فایل gradle.properties پروژه خود پیکربندی کنید:

android.prefabVersion=2.0.0

به طور معمول نسخه پیش فرض انتخاب شده AGP با نیازهای شما مطابقت دارد. فقط در صورتی باید نسخه دیگری را انتخاب کنید که اشکالی وجود دارد که باید آن را برطرف کنید یا ویژگی جدیدی را می خواهید.

هر وابستگی یک فایل 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 با برنامه گنجانده می‌شود.

انتشار کتابخانه های بومی در AARs

توانایی ایجاد AAR های بومی برای اولین بار در AGP 4.1 اضافه شد.

برای صادر کردن کتابخانه های بومی خود، موارد زیر را به بلوک android فایل build.gradle.kts پروژه کتابخانه خود اضافه کنید:

کاتلین

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 تولید شده توسط بیلد شما بسته‌بندی می‌شوند و هر کدام هدرها را از دایرکتوری مشخص شده به وابستگان خود صادر می‌کنند.