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

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

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

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

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

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

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

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

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

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

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

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

برای انجام این کار، موارد زیر را به فایل gradle.properties پروژه‌تان اضافه کنید:

android.enablePrefab=true

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

android.prefabVersion=2.0.0

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

وابستگی‌های واردشده از AAR ازطریق CMAKE_FIND_ROOT_PATH درمعرض CMake قرار می‌گیرند. این مقدار به‌طور خودکار توسط Gradle هنگام فراخوانی CMake تنظیم می‌شود، بنابراین اگر ساخت شما این متغیر را تغییر می‌دهد، حتماً آن را اضافه کنید تا اینکه به آن اختصاص دهید.

هر وابستگی یک بسته فایل پیکربندی را در ساخت شما نمایان می‌کند. این‌ها با فرمان find_package وارد می‌شوند. این فرمان بسته‌های config-file را که با نام و نسخه بسته داده‌شده مطابقت دارند جستجو می‌کند و هدف‌هایی را که برای استفاده در ساخت شما تعریف می‌کند نشان می‌دهد. برای مثال، اگر برنامه‌تان libapp.so را تعریف می‌کند و از 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 پروژه کتابخانه‌تان اضافه کنید:

کاتلین

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