العيّنات

توضّح نماذج "إضافة تطوير ألعاب Android" كيفية استخدام الميزات الرئيسية للإضافة. يصف هذا الموضوع العينات والإعدادات اللازمة لتشغيلها.

تتوفّر النماذج التالية في صفحة عمليات التنزيل:

  • HelloJNI: مشروع تمهيدي.
  • Endless-Tunnel: مشروع Android فقط.
  • Teabot: مشروع عبر الأنظمة الأساسية لنظامي التشغيل Windows وAndroid.
  • AssemblyCode-Link-Objects: مشروع نموذج يحتوي على رمز مصدر التجميع.

قبل البدء

  • ثبِّت إضافة تطوير ألعاب Android والنماذج. راجِع البدء السريع لمعرفة التفاصيل. يتناول الموضوع أيضًا كيفية إنشاء عيّنة وتشغيلها واستخدام إصدار Android من عيّنة Teabot كمثال.

  • يصف دليل ضبط المشروع كيفية ضبط الإعدادات لمشروع يستخدم الإضافة، مثل إضافة نظام Android الأساسي وحزمة APK.

مرحبًاJNI

عينة HelloJNI هي مشروع بسيط يعرض رسالة "Hello From JNI" في نافذة تطبيق. يستخدم المشروع مجموعة مختلفة من رموز المصدر لنظامَي التشغيل Windows وAndroid.

  • رمز مصدر Android ودليل النصوص البرمجية لإنشاء Gradle: HelloJNI\AndroidPackaging
  • رمز مصدر نظام التشغيل Windows ودليل مشروع Visual Studio: HelloJNI

عند إنشاء المشروع، تضبط Visual Studio الإعدادات التالية إلى ملف build.gradle على مستوى التطبيق. يمكنك تغيير هذه الإعدادات من خلال تعديل النصوص البرمجية لإنشاء Gradle.

  • MSBUILD_NDK_VERSION
  • MSBUILD_MIN_SDK_VERSION
  • MSBUILD_JNI_LIBS_SRC_DIR
  • MSBUILD_ANDROID_OUTPUT_APK_NAME
  • MSBUILD_ANDROID_GRADLE_BUILD_OUTPUT_DIR

لإعداد العيّنة وتشغيلها:

  1. في Visual Studio، افتح نموذج HelloJNI وأنشئه.
  2. أضِف نظام Android Arm64-v8a الأساسي. لمزيد من المعلومات، راجِع إضافة نظام Android الأساسي.
  3. إضافة عنصر Android APK إلى النظام الأساسي الجديد.
  4. قم بتجميع المشروع.
  5. أضِف أنظمة Android الأساسية التالية ثم أضِف ملف APK لنظام التشغيل Android إلى كل منها: Android-armeabi-v7a وAndroid-x86 وAndroid-x86_64.
  6. إنشاء وتشغيل النموذج

نفق لا نهاية له

عينة Endless-Tunnel هي إحدى ألعاب Android التي يجمع فيها اللاعب مكعبات بيضاء أثناء محاولة الوصول إلى نهاية نفق. حيث تم نقله من نموذج OpenGL في مستودع NDK على Android على جيت هب. لا يوفر النموذج إصدار Windows من اللعبة.

سبق أن تم ضبط إعدادات النموذج ونماذج Android كي تتمكّن من إنشاء المشروع وتشغيله في Visual Studio بدون أي تعديلات. عند فتح الحل، يعرض مستكشف الحلول الوحدات التالية:

  • نفق لانهائي: وحدة التطبيق التي تعرض منطق اللعبة
  • glm: لقطة من مستودع OpenGL Math الذي تم إنشاؤه كمكتبة ثابتة
  • origin_app_glue: برنامج تضمين NDK يتواصل مع كائن NativeActivity.

إبريق شاي

تعرض عينة إبريق الشاي إبريق شاي كلاسيكي يتم عرضه باستخدام OpenGL ES ويتم نقله إلى إضافة Android Game Development Extension لتوضيح الميزات التالية:

  • تطوير مشروع متعدد الأنظمة الأساسية: يمكنك إنشاء نموذج Teaput لنظامي Windows وAndroid.
  • استخدام حزمة Android المخصّصة: تم نقل النصوص البرمجية لإصدار Gradle إلى الدليل الجذري للعيّنة، حيث يوجد ملف Teapot.sln.
  • دمج إصدار Ninja التجريبي الذي يتيح فتح المشروع في "استوديو Android".
  • إعدادات Android المخصّصة التي توضّح كيفية استخدام مطهّر العناوين (ASan) ومطهِّر عناوين الأجهزة (HWAsan)

يتم تقسيم تنفيذ عينة الشاي إلى أجزاء متعددة، وهو أمر نموذجي للتطبيقات والألعاب الكبيرة عبر الأنظمة الأساسية:

  • وحدة GameApplication: تحدد إجراءات المستخدم وحالات التطبيق، مثل تدوير إبريق الشاي أو تعديل إحصاءات التطبيق.
  • وحدة GameEngine: تنفِّذ وحدة العرض الأساسية.

لإعداد العيّنة وتشغيله على Android، يمكنك الاطّلاع على البدء السريع. لإعداد العيّنة وتشغيله على نظام التشغيل Windows:

  1. تثبيت GLEW:
    1. نزِّل GLEW وألغِ ضغطه.
    2. انسخ الملفات الثنائية من $your-glew-directory\bin\Release\x64 إلى %SystemRoot%\system32.
  2. ثبِّت Freeglut:
    1. نزِّل freeglut وألغِ ضغطها.
    2. نسخ $your-freeglut-directory\bin\x86\freeglut.dll إلى %SystemRoot%\system32
  3. أضِف تبعيات المشروع المستقل:
    1. فتح "Teapot.sln" في Visual Studio.
    2. في القائمة، انقر على تصحيح الأخطاء > x64 > برنامج تصحيح الأخطاء المحلي في Windows.
    3. في Solution Explorer، انقر بزر الماوس الأيمن على GameApplication واختر الخصائص > C/C++ > عام > تضمين دلائل إضافية.
    4. أضِف $your-freeglut-dir\include إلى المسار.
      لقطة شاشة لمربّع حوار "دلائل التضمين الإضافية"
    5. انقر على حسنًا.
    6. اختر الرابط > عام > دلائل المكتبة الإضافية.
    7. أضِف $your-freeglut-dir\lib\x64 إلى المسار. لقطة شاشة لمربع حوار "أدلة المكتبة الإضافية".
    8. انقر على حسنًا.
    9. اختر الرابط > عام > دلائل المكتبة الإضافية.
    10. أضِف freeglut.lib إلى المسار.
    11. انقر على حسنًا.
  4. أضِف تبعيات مشروع GLEW:
    1. في لوحة مستكشف الحلول، انقر بزر الماوس الأيمن على GameApplication واختر الخصائص > C/C++ > عام > تضمين الدلائل الإضافية.
    2. أضِف $your-glew-dir\include إلى المسار.
    3. انقر على حسنًا.
    4. اختر الرابط > عام > دلائل المكتبة الإضافية.
    5. أضِف $your-glew-dir\lib\Release\x86 إلى المسار.
    6. انقر على حسنًا.
    7. اختر الرابط > عام > دلائل المكتبة الإضافية.
    8. أضِف glew32.lib إلى المسار.
    9. انقر على حسنًا.
  5. شغِّل النموذج على نظام التشغيل Windows:
    1. في شريط أدوات Visual Studio، انقر على زر تشغيل برنامج تصحيح الأخطاء المحلي في Windows.
    2. يجب أن يظهر العيّنة على النحو التالي:
      لقطة شاشة لعينة الشاي الذي يتم تشغيله على نظام التشغيل Windows.

هذا نموذج مشروع يوضّح كيفية إنشاء مكتبة Android الأصلية من التجميع ورمز المصدر C/C++. هذه هي المكونات الرئيسية:

  • AssemblyCode-Link-Objects: مكتبة Android الأصلية الرئيسية التي تم إنشاؤها باستخدام لغة C++ ورمز مصدر التجميع.
  • StaticLib: مكتبة ثابتة مساعِدة تصدّر الدالة from_static_lib_assembly_code_as.

يدعم المشروع بنيات متعددة. لكل بنية متوافقة ملفات مصدر خاصة بها تنفّذ وظائف يتم تصديرها من "StaticLib". يجب عليك فقط تضمين ملفات مصدر التجميع للأنظمة الأساسية التي تقوم بإنشائها. يتضمّن هذا المشروع ملفات تجميع في الإصدارات باستخدام أدوات إنشاء مخصّصة.

لإعداد العيّنة وإنشائها:

  1. في Visual Studio، تأكَّد من ضبط أدوات التصميم المخصّصة لملفات التجميع:
    1. في مستكشف الحلول، انقر بزر الماوس الأيمن على ملف التجميع وانقر على الخصائص. يؤدي هذا إلى فتح مربّع الحوار صفحات الخصائص للملف.
    2. اختَر الإعدادات والنظام الأساسي، مثل جميع الإعدادات لنظام التشغيل Android-arm64-v8a.
    3. تأكَّد من ضبط عام > الاستثناء من الإصدار على لا.
    4. تأكَّد من ضبط عام > نوع العنصر على أداة التصميم المخصّصة.
    5. انقر على تطبيق في حال كانت هناك تغييرات يجب تطبيقها.
    6. تأكَّد من ضبط خصائص الإعدادات > أدوات التصميم المخصّصة > سطر الأوامر على $(AsToolExe) -o "$(IntDir)%(FileName).o" %(FullPath). تشتمل اتفاقية NDK على مجمّع منفصل لكل بنية وحدة معالجة مركزية (CPU) ويربط $(AsToolExe) بالمجمِّع الصحيح. يستخدم هذا النموذج سلسلة أدوات NDK لإنشاء مشاريع بنظامي التشغيل Android x86 وx86_64. إذا أردت استخدام yasm لنظام Android x86_64، استخدِم $(YasmToolExe) بدلاً من ذلك.
    7. تأكَّد من ضبط خصائص الإعدادات > أدوات التصميم المخصّصة > النتائج على $(IntDir)%(FileName).o. ويجب تضمين هذه السلسلة في إعداد سطر الأوامر.
    8. تأكَّد من ضبط خصائص الإعدادات > أدوات التصميم المخصّصة > كائنات الروابط على Yes.

    على سبيل المثال، يجب أن تبدو إعدادات Android-arm64-v8a مشابهة للقطة الشاشة التالية:

    لقطة شاشة لصفحة الموقع الخاصة بـ Custom Build Tools
  2. بناء المشروع. يؤدي ذلك إلى إنشاء ملف libAssmeblyCodeLinkObjects.so:
    1. افتح ملف AssemblyCode-Link-Objects.sln.
    2. في القائمة، انقر على إنشاء > حل الإنشاء.
  3. للتأكّد من تصدير الدوال بشكل صحيح إلى مكتبة Android، استخدِم أداة nm.exe NDK:
    1. في سطر الأوامر، انتقِل إلى نموذج الدليل.
    2. انتقِل إلى الموقع الجغرافي لمكتبة Android الذي تم إنشاؤه من خلال إصدارك. الموقع التلقائي يشبه $sample_dir\$solution_configuration\$solution_platform\$platform و$sample_dir\Debug\Android-arm64-v8a\arm64-v8a للنظام الأساسي arm64-v8a.
    3. تأكَّد من أنّ قسم الرموز التي تم تصديرها يحتوي على الدوالّ من خلال تنفيذ الأمر التالي:
        …\ndk\toolschains\llvm\prebuilt\windows-x86_64\aarch64-linux-android\bin\nm.exe --defined-only …\Debug\Android-arm64-v8a\arm64-v8a\libAssmeblyCodeLinkObjects.so
      

      في النتيجة، من المفترض أن تظهر لك قائمة رموز تتضمّن ما يلي:

         T from_shared_object_assembly_code_as
         T from_static_lib_assembly_code_as