اكواد سي

الإعلانات

إضافة اكواد C و ++C إلى مشروعك

 

يمكنك إضافة اكواد C و ++C إلى مشروع اندرويد، عن طريق وضع الكود في مجلد cpp في نموذج مشروعك.

عند بناء مشروعك، يتم تجميع هذا الكود في مكتبة أصلية يمكن لـ Gradle حزمها مع ملف APK الخاص بك. 

بعد ذلك يمكن لكود Java أو Kotlin إستدعاء الوظائف الموجودة في مكتبتك الأصلية، من خلال واجهة (Java Native Interface (JNI.

لمعرفة المزيد حول إستخدام إطار عمل JNI، اقرأ نصائح JNI لنظام اندرويد.

 

اندرويد ستوديو يدعم CMake، و هو جيد للمشاريع التي تعمل عبر الأنظمة الأساسية، و ndk-build، الذي يمكن أن يكون أسرع من CMake ولكنه يدعم أنظمة اندرويد فقط.

إستخدام كلٍ من CMake و ndk-build في نفس النموذج غير مدعوم حالياً.

إذا كنت ترغب في إستيراد مكتبة ndk-build موجودة، إلى مشروع اندرويد ستوديو الخاص بك، فتعرف على كيفية ربط Gradle بمشروع مكتبتك الأصلية.

توضح لك هذه الصفحة كيفية إعداد اندرويد ستوديو بإستخدام أدوات البناء اللازمة، و إنشاء مشروع

جديد بإستخدام دعم C++ / C و إضافة ملفات C++ / C جديدة إلى مشروعك.

 

إذا كنت بدلاً من ذلك، ترغب في إضافة اكواد أصلية إلى مشروع موجود، فأنت بحاجة إلى إتباع الخطوات التالية:

1. أنشئ ملفات مصدر أصلية جديدة ثم أضفها إلى مشروع اندرويد ستوديو.

    • يمكنك تخطي هذه الخطوة، إذا كان لديك بالفعل كود أصلي، أو تريد إستيراد مكتبة أصلية تم إنشاؤها مسبقاً.

2. تكوين CMake لإنشاء الكود المصدري الأصلي في مكتبةٍ ما. تحتاج أيضاً إلى سكربت

البناء هذا إذا كنت تقوم بالإستيراد والربط مقابل مكتبات سابقة الإنشاء أو منصات النظام الأساسي.

    • إذا كانت لديك مكتبة أصلية حالية، تحتوي بالفعل على سكربت بناء CMakeLists.txt ، أو تستخدم ndk-build تتضمن سكربت بناء Android.mk ، يمكنك تخطي هذه الخطوة.

3. تكوين Gradle من خلال توفير مسار إلى ملف سكربت CMake أو ndk-build.

يستخدم Gradle سكربت البناء لإستيراد الكود المصدر إلى مشروع اندرويد ستوديو، وحزم مكتبتك الأصلية (ملف SO) في ملف APK.

بمجرد قيامك بتكوين مشروعك، يصبح بإمكانك الوصول إلى وظائفك الأصلية، من خلال كود Java أو كود Kotlin بإستخدام إطار عمل JNI.

لإنشاء وتشغيل تطبيقك، ببساطة انقر على تشغيل Run.

ملاحظة: إذا كان مشروعك الحالي يستخدم أداة ndkCompile الموقوفة، فيجب عليك الإنتقال إلى إستخدام CMake أو ndk-build. لمعرفة المزيد انتقل إلى القسم الخاص بكيفية الترحيل من ndkCompile.
ملاحظة لمستخدمي Gradle التجريبيين: ضع في إعتبارك الترحيل إلى المكون الإضافي 2.2.0 أو أعلى، و إستخدام CMake أو ndk-build لإنشاء مكتباتك الأصلية، إذا كان أي مما يلي ينطبق عليك:

مشروعك الأصلي يستخدم بالفعل CMake أو ndk-build؛ تفضل إستخدام إصدار ثابت من نظام البناء Gradle؛ أو تريد دعم أدوات الوظيفة الإضافية، مثل CCache.

خلاف ذلك، يمكنك الإستمرار في إستخدام الإصدار التجريبي من Gradle والمكون الإضافي لنظام اندرويد.

 

تنزيل NDK و أدوات البناء


لتجميع الكود الأصلي لتطبيقك وتصحيحه، تحتاج إلى المكونات التالية:

  • عدة تطوير اندرويد الأصلية (NDK): وهي مجموعة أدوات تتيح لك إستخدام اكواد C و ++C

في اندرويد، وتوفر مكتبات النظام التي تتيح لك إدارة الأنشطة الأصلية، والوصول إلى مكونات

الجهاز المادية، مثل المستشعرات والإدخال باللمس.

  • CMake: وهي أداة بناء خارجية تعمل جنباً إلى جنب مع Gradle لإنشاء مكتبتك الأصلية.

لا تحتاج إلى هذا المكون إذا كنت تخطط فقط لإستخدام ndk-build.

  • LLDB: يستخدم المصحح الخاص بأندرويد ستوديو، لتصحيح أخطاء الكود الأصلي.

للحصول على معلومات حول تثبيت هذه المكونات، راجع تثبيت وتكوين NDK و CMake و LLDB.

 

إستخدام CMake الإصدار 3.6.0 أو 3.10.2

يتضمن مدير SDK الإصدار المتفرع 3.6.0 من CMake والإصدار 3.10.2. المشاريع التي لا تقوم بتعيين، إصدار CMake محدد، في

build.gradle تكون مبنية بواسطة CMake 3.6.0.

لإستخدام الإصدار المُضمن لاحقاً، حدد CMake الإصدار 3.10.2 في ملف build.gradle الخاص بنموذجك:

android {
    ...
    externalNativeBuild {
        cmake {
            ...
            version "3.10.2"
        }
    }
}

على الرغم من أنها ليست أفضل ممارسة، يمكنك تحديد إصدار CMake كحد أدنى للإصدار، عن طريق إضافة + إلى نهاية إدخال

build.gradle، مثال +3.10.2.

إستخدام إصدار CMake مخصص

إذا أردت إستخدام CMake الإصدار 3.7 أو أعلى، والذي لم يتم تضمينه من قبل مدير SDK، اتبع هذه الخطوات:

1. قم بتنزيل وتثبيت CMake 3.7 أو أعلى من موقع CMake الرسمي.

2. حدد إصدار CMake الذي تريد أن يستخدمه Gradle، في ملف build.gradle الخاص بنموذجك:

android {
    ...
    externalNativeBuild {
        cmake {
            ...
            version "cmake-version"
        }
    }
}

3. قم إما، بإضافة مسار تثبيت CMake إلى متغير البيئة PATH، أو قم بتضمينه في ملف local.properties لمشروعك، كما هو موضح أدناه.

إذا تعذر على Gradle العثور على إصدار CMake الذي حددته في ملف build.gradle، فسيظهر لك خطأ في البناء.

# If you set this property, Gradle no longer uses PATH to find CMake.
cmake.dir="path-to-cmake"

4. إذا لم يكن لديك نظام بناء Ninja مثبتاً بالفعل، على مساحة العمل الخاصة بك، فأنتقل إلى موقع Ninja الرسمي، وقم

بتنزيل وتثبيت أحدث إصدار من Ninja، المتاح لنظام التشغيل الخاص بك. تأكد أيضاً من إضافة مسار تثبيت Ninja إلى متغير البيئة PATH.

 

إنشاء مشروع جديد يدعم اكواد C++/C


إنشاء مشروع جديد يدعم الأكواد الأصلية، يشبه إنشاء أي مشروع اندرويد ستوديو آخر، ولكن هناك خطوة إضافية:

1. في قسم Choose your project من المعالج، حدد نوع المشروع ++Native C.

2. انقر فوق Next.

3. أكمل جميع الحقول الأخرى، في القسم التالي من المعالج.

4. انقر فوق Next.

5. في قسم Customize C++ Support من المعالج، يمكنك تخصيص مشروعك بإستخدام الحقل C++ Standard.

إستخدم القائمة المنسدلة لتحديد معيار ++C الذي تريد إستخدامه. عند تحديد Toolchain Default يتم إستخدام إعدادات CMake الإفتراضية.

6. انقر فوق Finish.

بعد إنتهاء اندرويد ستوديو من إنشاء مشروعك الجديد، افتح لوحة Project من الجانب الأيسر من IDE وحدد المعاينة Android.

كما هو موضح في الشكل 2، يضيف اندرويد ستوديو مجموعة cpp:

الشكل 2. مجموعات معاينة اندرويد، للمصادر الأصلية وسكربت البناء الخارجي.

 

ملاحظة: طريقة العرض هذه، لا تعكس التسلسل الهرمي الفعلي للملف على القرص، ولكنها تجمع الملفات المتشابهة لتبسيط التنقل خلال مشروعك.

مجموعة cpp هي المكان الذي يمكنك فيه، العثور على جميع ملفات المصادر الأصلية، العناوين headers، سكربتات البناء الخاصة بـ

CMake أو ndk-build، المكتبات المُنشئة مسبقاً، و التي تعد جزءاً من مشروعك. بالنسبة إلى المشاريع الجديدة، يقوم اندرويد

ستوديو بإنشاء نموذج لملف مصدر ++C، و native-lib.cpp، ويضعه بداخل مجلد /src/main/cpp لنموذج تطبيقك. يوفر نموذج

الكود هذا، وظيفة ++C بسيطة، ()stringFromJNI، والتي تقوم بإرجاع السلسلة (العبارة) “++Hello from C”. يمكنك التعرف

على كيفية إضافة، ملفات مصدر إضافية إلى مشروعك، في القسم الخاص بكيفية إنشاء ملفات مصدر أصلية جديدة.

بشكلٍ مشابه لكيفية قيام ملفات build.gradle بإخبار Gradle بكيفية إنشاء تطبيقك، فإن CMake و ndk-build تتطلبان وجود

سكربت بناء لمعرفة كيفية إنشاء مكتبتك الأصلية.

بالنسبة للمشاريع الجديدة، ينشئ اندرويد ستوديو سكربت بناء CMake و CMakeLists.txt ويضعه بداخل المجلد الأصلي

لنموذجك. لمعرفة المزيد حول محتويات سكربت البناء هذا، اقرأ تكوين CMake.

 

إنشاء وتشغيل نموذج تطبيق

عند النقر فوق Run، يقوم اندرويد ستوديو بإنشاء وتشغيل تطبيق يعرض النص “++Hello from C” على جهازك الاندرويد أو على المحاكي.

الملخص التالي يصف الأحداث التي تحدث عند إنشاء وتشغيل نموذج التطبيق:

1. يقوم Gradle بإستدعاء سكربت البناء الخارجي CMakeLists.txt.

2. يقوم CMake بإتباع الأوامر الموجودة في سكربت البناء، لتجميع ملف مصدر ++C، و native-lib.cpp في مكتبة كائنات

مشتركة، وتسميتها بـ libnative-lib.so، والتي يقوم Gradle لاحقاً بحزمها في ملف APK.

3. أثناء وقت التشغيل، يقوم النشاط الرئيسي MainActivity للتطبيق، بتحميل المكتبة الأصلية بإستخدام دالة

()System.loadLibrary. الوظيفة الأصلية للمكتبة ()stringFromJNI تكون متاحة الآن للتطبيق.

4. تقوم دالة ()MainActivity.onCreate بإستدعاء ()stringFromJNI، التي تُرجع العبارة “++Hello from C” وتستخدمها لتحديث TextView.

ملاحظة: التشغيل الفوري لا يتوافق مع مكونات مشروعك المكتوبة بالكود الأصلي.

إذا أردت التحقق من أن Gradle يحزم المكتبة الأصلية في ملف APK، فيمكنك إستخدام APK Analyzer:

  1. حدد (Build > Build Bundles(s) / APK(s) > Build APK(s.
  2. حدد Build > Analyze APK.
  3. حدد APK من المجلد /app/build/outputs/apk ثم انقر فوق OK.
  4. كما هو موضح في الشكل 3، يمكنك رؤية libnative-lib.so في نافذة APK Analyzer تحت /<lib/<ABI.

الشكل 3. تحديد موقع مكتبةً أصلية بإستخدام APK Analyzer.

نصيحة: إذا رغبت في تجربة تطبيقات اندرويد الأخرى والتي تستخدم اكواد أصلية، فأنقر على File > New > Import Sample ثم حدد مشروع نموذج من قائمة Ndk.

 

إنشاء ملفات مصدر C++/C جديدة


لإضافة ملفات مصدر C++ /C جديدة إلى مشروع حالي، تابع ما يلي:

  1. إذا لم يكن لديك بالفعل مجلد /cpp في مجموعة المصادر الرئيسية لتطبيقك، فقم بإنشاء واحد على النحو التالي:
    1. افتح لوحة Project من الجانب الأيسر لـ IDE ثم حدد المعاينة Project من القائمة المنسدلة.
    2. انتقل إلى your-module>src، وانقر بزر الماوس الأيمن على المجلد الرئيسي main، ثم حدد New > Directory.
    3. أدخل cpp كاسم للمجلد ثم انقر فوق OK.

2. انقر بزر الماوس الأيمن على مجلد /cpp ثم اختر New > C/C++ Source File.

3. أدخل اسم لملفك المصدر، مثل native-lib.

4. من القائمة المنسدلة Type، اختر إمتداد الملف الخاص بملف مصدرك، مثل cpp.  .

    • يمكنك إضافة أنواع ملفات أخرى إلى القائمة المنسدلة، مثل cxx. أو hxx. ، بالنقر فوق  Edit File Types.

في مربع الحوار ++C/C المنبثق، حدد امتداد ملف آخر من القوائم المنسدلة Source Extension و Header Extension ثم انقر فوق OK.

5. إذا أردت أيضاً إنشاء ملف هيدر، فحدد مربع الإختيار Create an associated header.

6. انقر فوق OK.

حتى بعد إضافتك لملفات ++C / C جديدة إلى مشروعك، ما زلت بحاجة إلى تكوين CMake لتضمينها في مكتبتك الأصلية.

 

مصادر إضافية


لمعرفة المزيد حول دعم اكواد ++C / C في تطبيقك، جرب المصدر التالي.

Codelabs

 


للإطلاع على المقال باللغة الإنجليزية أضغط هنا.

الإعلانات

اترك رد