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

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

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

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

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

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

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

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

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

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

إعداد إعدادات النظام

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

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

Kotlin

buildFeatures {
  prefab = true
}

رائع

buildFeatures {
  prefab true
}

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

android.prefabVersion=2.0.0

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

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

تعرض كل اعتمادية حزمة ملف config لإصدارك. ويتم استيراد هذه العناوين باستخدام الأمر find_package. يبحث هذا الأمر عن حزم ملف التكوين التي تطابق اسم الحزمة وإصدارها ويكشف الأهداف التي يحددها للاستخدام في إصدارك. على سبيل المثال، إذا كان تطبيقك يعرّف 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 الأصلية لأول مرة في الإصدار 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"
    }
}

رائع


buildFeatures {
    prefabPublishing true
}

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

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

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