الأجهزة التابعة الأصلية باستخدام المكوّن الإضافي لنظام Gradle المتوافق مع Android

يمكن أن تحتوي مكتبات AAR على تبعيات أصلية يمكن لمكوّن Android Gradle الإضافي المستهلك. كما يستطيع AGP إنتاج ملفات AAR التي تعرض المكتبات الأصلية للمستهلكين.

استخدام التبعيات الأصلية

بدءًا من الإصدار 4.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android، يمكن استيراد تبعيات C/C++ من ملفات AAR المرتبطة في ملف build.gradle ستجعل Gradle هذه تلقائيًا متاحة لنظام الإصدار الأصلي، ولكن يجب إعداد نظام التصميم للاستفادة من المكتبات والعناوين المستوردة نظرًا لأن تبعيات C/C++ هي يتم توزيعها كاقتراحات AAR، قد تكون الروابط التالية حول AAR العامة مفيدة:

  • إنشاء مكتبة Android للمستندات العامة في ميزة "الاقتراحات المطبّقة تلقائيًا" وكيفية دمجها في مشروعك، خاصة عندما تريد استخدام AAR كتبعية محلية لـ C/C++.
  • يمكنك إضافة تبعيات الإصدار للحصول على معلومات حول إضافة الملحقات إلى ملف build.gradle. خاصة للتبعيات البعيدة.

يركّز هذا المستند على كيفية ضبط نظام التصميم الأصلي ويفترض أنّك أجريت أضفت تبعية AAR لـ C/C++ إلى بيئة إصدار Gradle لمشروعك.

الاعتماديات الأصلية في الاقتراحات المطبّقة تلقائيًا

يمكن أن تكشف تبعيات AAR لوحدات Gradle عن المكتبات الأصلية للاستخدام من قِبل تطبيقك. داخل AAR، يحتوي الدليل prefab على Prefab والتي تتضمن عناوين ومكتبات التبعية الأصلية.

يمكن أن تعرض كل تبعية حزمة Prefab واحدة على الأكثر، والتي تتكون من واحدة أو المزيد من الوحدات. وحدة Prefab هي مكتبة واحدة، والتي يمكن أن تكون إما مكتبة مشتركة أو ثابتة أو ذات عناوين فقط

ويجب أن تكون أسماء الحزم والوحدات معروفة للاستفادة من المكتبات. من سيتطابق اسم الحزمة مع اسم عناصر Maven والوحدة. مع اسم مكتبة C/C++ ، ولكن هذا الأمر ليس مطلوبًا. الرجوع إلى وثائق التبعية لتحديد الأسماء التي تستخدمها.

إنشاء تهيئة النظام

يجب تفعيل ميزة "prefab" في وحدة نظام Gradle المتوافق مع Android.

لإجراء ذلك، يمكنك إضافة ما يلي إلى كتلة android في الوحدة. ملف build.gradle:

Kotlin

buildFeatures {
  prefab = true
}

Groovy

buildFeatures {
  prefab true
}

اختياريًا، يمكنك ضبط إصدار في ملف gradle.properties الخاص بمشروعك:

android.prefabVersion=2.0.0

عادةً ما يتناسب الإصدار الافتراضي المحدد من AGP مع احتياجاتك. يجب عليك فقط إلى تحديد إصدار مختلف إذا كان هناك خطأ تحتاج إلى حله أو ميزة جديدة تريدها.

تخضع التبعيات المستوردة من ميزة AAR لـ CMake عبر CMake_FIND_ROOT_PATH. سيتم ضبط هذه القيمة تلقائيًا بواسطة Gradle عندما تم استدعاء CMake، لذا إذا عدّل إصدارك هذا المتغير، فتأكد من إلحاق بدلاً من التكليف بها.

تعرض كل تبعية حزمة config-file في تصميمك. وهي باستخدام الأمر 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 أصلية في الإصدار 4.1 من AGP.

لتصدير مكتباتك الأصلية، أضِف ما يلي إلى كتلة 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"
    }
}

Groovy

buildFeatures {
    prefabPublishing true
}

prefab {
    mylibrary {
      headers "src/main/cpp/mylibrary/include"
    }

    myotherlibrary {
        headers "src/main/cpp/myotherlibrary/include"
    }
}

في هذا المثال، المكتبات mylibrary وmyotherlibrary من إما سيتم تضمين إصدار ndk-build أو CMake الخارجي في تقنية AAR التي تنتجها الإصدار الخاص بك، وسيقوم كل منها بتصدير العناوين من الدليل المحدد إلى التابع لهم.