דוגמיות

הדוגמאות לתוסף לפיתוח המשחקים ל-Android מדגימות איך להשתמש בתכונות מרכזיות של התוסף. בקטע הזה מתוארים הדוגמאות שנדרשות כדי להפעיל אותן.

הדוגמאות הבאות זמינות דף ההורדות:

  • HelloJNI: פרויקט היכרות.
  • Endless-Tunnel: פרויקט ל-Android בלבד.
  • Teabot: פרויקט בפלטפורמות שונות ל-Windows ול-Android.
  • AssemblyCode-Link-Objects: פרויקט תבנית שכולל קוד מקור של הרכבה.

לפני שמתחילים

  • מתקינים את תוסף פיתוח המשחקים ל-Android ואת הדוגמאות. לצפייה למידע נוסף, ניתן לעיין במדריך למתחילים. הנושא גם מתאר איך ליצור ומריצים דוגמה, ומשתמשים בגרסת Android של Teabot כדוגמה.

  • במדריך בנושא הגדרת הפרויקט מוסבר איך לקבוע הגדרות לפרויקט שמשתמש בתוסף, כמו הוספה של פלטפורמת Android ו-APK.

שלוםJNI

הדוגמה של HelloJNI היא פרויקט פשוט שמוצגת בו ההודעה "Hello From JNI" בחלון של האפליקציה. הפרויקט משתמש בקבוצה שונה של קוד מקור ל-Windows ול-Windows Android.

  • קוד המקור של Android וספריית הסקריפטים של גרסת gradle: HelloJNI\AndroidPackaging
  • קוד המקור של Windows וספריית הפרויקט של Visual Studio: HelloJNI

כשיוצרים את הפרויקט, מערכת Visual Studio מעבירה את הדברים הבאים להגדרות לקובץ build.gradle ברמת האפליקציה. אפשר לשנות את ההגדרות האלה לשנות את הסקריפטים ל-build של 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. הוספת פריט APK ל-Android לפלטפורמה החדשה.
  4. עורכים את הפרויקט.
  5. צריך להוסיף את פלטפורמות Android הבאות ואז להוסיף פריט APK של Android בכל אחד מהיעדים: Android-armeabi-v7a, Android-x86 ו-Android-x86_64.
  6. יצירה והרצה של הדוגמה.

מנהרה אינסופית

דוגמה ל-Endless-Tunnel היא משחק ל-Android שבו השחקן אוסף אפור לבן של קוביות ומנסים להגיע לסוף המנהרה. הוא נויד מ-OpenGL לדוגמה מאגר NDK של Android ב-GitHub. בדוגמה הזו לא מוצגת גרסת Windows של המשחק.

ההגדרות והפלטפורמות של Android לדוגמה כבר מוגדרות, כך שאפשר לפתח ולהריץ את הפרויקט ב-Visual Studio ללא שינויים. אחרי ש פותחים את הפתרון, ב-Solution Explorer מוצגים המודולים הבאים:

  • אינסוף-מנהרה: המודול של האפליקציה שמציג את לוגיקת המשחק.
  • glm: תמונת מצב של מאגר המתמטיקה של OpenGL שמיועדת לשימוש כספרייה סטטית.
  • Native_app_glue: wrapper של NDK שמתקשר עם פעילות מותאמת לאובייקט.

Teapot

בדוגמה של קנקן תה מוצג קנקן תה קלאסי שמעובד באמצעות OpenGL ES וגם הועבר לתוסף לפיתוח המשחקים של Android כדי להדגים את התכונות הבאות:

  • פיתוח פרויקטים בפלטפורמות שונות: תוכלו ליצור את דוגמת Teather עבור Windows ו-Android.
  • שימוש באריזות מותאמות אישית של Android: הסקריפטים של Gradle לפיתוח גרסת ה-build הועברו תיקיית השורש של הדוגמה, שבה נמצא הקובץ Teapot.sln.
  • שילוב ניסיוני של גרסאות build של Ninja המאפשר ופותחים את הפרויקט ב-Android Studio.
  • הגדרות בהתאמה אישית ב-Android שמדגימות איך להשתמש ניקוי כתובות (ASan) וגם Hardware Address Sanitizer (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. בוחרים באפשרות Linker > (מקשר >) כללי > ספריות נוספות של ספריות.
    7. מוסיפים את $your-freeglut-dir\lib\x64 לנתיב. צילום מסך של תיבת הדו-שיח של ספריות נוספות לספריות.
    8. לוחצים על אישור.
    9. בוחרים באפשרות Linker > (מקשר >) כללי > ספריות נוספות של ספריות.
    10. מוסיפים את freeglut.lib לנתיב.
    11. לוחצים על אישור.
  4. מוסיפים את יחסי התלות של פרויקט GLEW:
    1. לוחצים לחיצה ימנית בחלונית Solution Explorer. GameApplication ובוחרים נכסים > C/C++ > כללי > ספריות נוספות להכללה.
    2. מוסיפים את $your-glew-dir\include לנתיב.
    3. לוחצים על אישור.
    4. בוחרים באפשרות Linker > (מקשר >) כללי > ספריות נוספות של ספריות.
    5. מוסיפים את $your-glew-dir\lib\Release\x86 לנתיב.
    6. לוחצים על אישור.
    7. בוחרים באפשרות Linker > (מקשר >) כללי > ספריות נוספות של ספריות.
    8. מוסיפים את glew32.lib לנתיב.
    9. לוחצים על אישור.
  5. מריצים את הדוגמה ב-Windows:
    1. בסרגל הכלים של Visual Studio, לוחצים על לחצן ההפעלה של Local Windows Debugger.
    2. הדוגמה צריכה להיראות כך:
      צילום מסך של דוגמת תה וקפה שפועלת ב-Windows.

זהו פרויקט תבנית שמדגים איך יוצרים מודעה מותאמת ל-Android מקוד מקור של assembly ו-C/C++. אלה הם הרכיבים העיקריים:

  • AssemblyCode-Link-Objects: ספריית הנייטיב הראשית של Android שפותחה מ-C++ וקוד המקור של ההרכבה.
  • StaticLib: ספרייה סטטית מסייעת שמייצאת את from_static_lib_assembly_code_as.

הפרויקט תומך בכמה ארכיטקטורות. לכל ארכיטקטורה נתמכת יש קובצי מקור משלכם שמטמיעים פונקציות שמיוצאות מ-StaticLib. יש לכלול את קובצי המקור של ההרכבה רק בפלטפורמות שבהן משתמשים בנייה. הפרויקט הזה כולל קובצי הרכבה של קובצי build באמצעות כלי פיתוח בהתאמה אישית.

כדי להגדיר וליצור את הדוגמה:

  1. ב-Visual Studio, מוודאים שכלי build בהתאמה אישית מוגדרים קובצי ההרכבה:
    1. ב-Solution Explorer, לוחצים לחיצה ימנית על assembly ולוחצים על Properties (מאפיינים). פעולה זו פותחת את תיבת הדו-שיח Properties Pages (דפי מאפיינים) של הקובץ.
    2. בוחרים את ההגדרות האישיות והפלטפורמה, למשל כל ההגדרות עבור Android-arm64-v8a.
    3. מוודאים שהסמל כללי > הוגדרה החרגה מ-Build ללא.
    4. מוודאים שהסמל כללי > סוג הפריט הוגדר אל Custom Build Tool.
    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 צריכות נראים כמו צילום המסך הבא:

    צילום מסך של דף הנכס לכלי בנייה מותאמים אישית.
  2. יוצרים את הפרויקט. הפעולה הזו בונה את קובץ libAssmeblyCodeLinkObjects.so:
    1. פותחים את הקובץ AssemblyCode-Link-Objects.sln.
    2. בתפריט, לוחצים על Build > (פיתוח >) בניית הפתרון.
  3. לוודא שהפונקציות מיוצאות בצורה תקינה אל Android אפשר להשתמש בכלי nm.exe NDK:
    1. בשורת הפקודה, נכנסים לספרייה לדוגמה.
    2. עוברים אל המיקום של ספריית Android שנוצר על ידי build. מיקום ברירת המחדל דומה למיקום $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