הדוגמאות לתוסף לפיתוח המשחקים ל-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
כדי להגדיר ולהריץ את הדוגמה:
- ב-Visual Studio, פותחים ובונים את הדוגמה של HelloJNI.
- צריך להוסיף פלטפורמה Android Arm64-v8a. לקבלת מידע נוסף מידע נוסף, ראה הוספת פלטפורמת Android.
- הוספת פריט APK ל-Android לפלטפורמה החדשה.
- עורכים את הפרויקט.
- צריך להוסיף את פלטפורמות Android הבאות ואז להוסיף פריט APK של Android בכל אחד מהיעדים: Android-armeabi-v7a, Android-x86 ו-Android-x86_64.
- יצירה והרצה של הדוגמה.
מנהרה אינסופית
דוגמה ל-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:
- מתקינים את GLEW:
- מורידים את הקובץ GLEW ומחלצים אותו.
- מעתיקים את הקבצים הבינאריים מ:
$your-glew-directory\bin\Release\x64
עד%SystemRoot%\system32
.
- התקנת Freeglut:
- מורידים ומחלצים את קובץ ה-freeglut.
- העתקת
$your-freeglut-directory\bin\x86\freeglut.dll
אל%SystemRoot%\system32
.
- מוסיפים את יחסי התלות של פרויקט חינמיים:
- פותחים את
Teapot.sln
ב-Visual Studio. - בתפריט, לוחצים על ניפוי באגים > x64 > כלי לניפוי באגים מקומי ב-Windows.
- ב-Solution Explorer, לוחצים לחיצה ימנית GameApplication ובוחרים נכסים > C/C++ > כללי > ספריות נוספות להכללה.
- מוסיפים את
$your-freeglut-dir\include
לנתיב.
- לוחצים על אישור.
- בוחרים באפשרות Linker > (מקשר >) כללי > ספריות נוספות של ספריות.
- מוסיפים את
$your-freeglut-dir\lib\x64
לנתיב. - לוחצים על אישור.
- בוחרים באפשרות Linker > (מקשר >) כללי > ספריות נוספות של ספריות.
- מוסיפים את
freeglut.lib
לנתיב. - לוחצים על אישור.
- פותחים את
- מוסיפים את יחסי התלות של פרויקט GLEW:
- לוחצים לחיצה ימנית בחלונית Solution Explorer. GameApplication ובוחרים נכסים > C/C++ > כללי > ספריות נוספות להכללה.
- מוסיפים את
$your-glew-dir\include
לנתיב. - לוחצים על אישור.
- בוחרים באפשרות Linker > (מקשר >) כללי > ספריות נוספות של ספריות.
- מוסיפים את
$your-glew-dir\lib\Release\x86
לנתיב. - לוחצים על אישור.
- בוחרים באפשרות Linker > (מקשר >) כללי > ספריות נוספות של ספריות.
- מוסיפים את
glew32.lib
לנתיב. - לוחצים על אישור.
- מריצים את הדוגמה ב-Windows:
- בסרגל הכלים של Visual Studio, לוחצים על לחצן ההפעלה של Local Windows Debugger.
- הדוגמה צריכה להיראות כך:
אובייקטים מסוג AssemblyCode-Link
זהו פרויקט תבנית שמדגים איך יוצרים מודעה מותאמת ל-Android מקוד מקור של assembly ו-C/C++. אלה הם הרכיבים העיקריים:
AssemblyCode-Link-Objects
: ספריית הנייטיב הראשית של Android שפותחה מ-C++ וקוד המקור של ההרכבה.StaticLib
: ספרייה סטטית מסייעת שמייצאת אתfrom_static_lib_assembly_code_as
.
הפרויקט תומך בכמה ארכיטקטורות. לכל ארכיטקטורה נתמכת יש
קובצי מקור משלכם שמטמיעים פונקציות שמיוצאות מ-StaticLib
.
יש לכלול את קובצי המקור של ההרכבה רק בפלטפורמות שבהן משתמשים
בנייה. הפרויקט הזה כולל קובצי הרכבה של קובצי build באמצעות
כלי פיתוח בהתאמה אישית.
כדי להגדיר וליצור את הדוגמה:
- ב-Visual Studio, מוודאים שכלי build בהתאמה אישית מוגדרים
קובצי ההרכבה:
- ב-Solution Explorer, לוחצים לחיצה ימנית על assembly ולוחצים על Properties (מאפיינים). פעולה זו פותחת את תיבת הדו-שיח Properties Pages (דפי מאפיינים) של הקובץ.
- בוחרים את ההגדרות האישיות והפלטפורמה, למשל כל ההגדרות עבור Android-arm64-v8a.
- מוודאים שהסמל כללי > הוגדרה החרגה מ-Build ללא.
- מוודאים שהסמל כללי > סוג הפריט הוגדר אל Custom Build Tool.
- לוחצים על אישור אם יש שינויים שרוצים להחיל.
- צריך לוודא
מאפייני הגדרה > כלים לבנייה בהתאמה אישית > שורת הפקודה:
מוגדר ל-
$(AsToolExe) -o "$(IntDir)%(FileName).o" %(FullPath)
. ה-NDK כולל מערך נפרד לכל ארכיטקטורה של מעבד (CPU)$(AsToolExe)
ממופה למרכיב הנכון. הדוגמה הזו משתמש בצרור הכלים של NDK כדי ליצור גם את Android x86 וגם x86_64 פרויקטים. אם ברצונך להשתמש ב-yasm לפלטפורמת Android x86_64, במקומה צריך להשתמש במדיניות$(YasmToolExe)
. - צריך לוודא
מאפייני הגדרה > כלים לבנייה בהתאמה אישית > פלט:
מוגדר ל-
$(IntDir)%(FileName).o
. צריך לכלול את המחרוזת הזו בהגדרה שורת הפקודה. - צריך לוודא
מאפייני הגדרה > כלים לבנייה בהתאמה אישית > אובייקטים של קישור:
מוגדר ל-
Yes
.
לדוגמה, ההגדרות של Android-arm64-v8a צריכות נראים כמו צילום המסך הבא:
- יוצרים את הפרויקט. הפעולה הזו בונה את
קובץ
libAssmeblyCodeLinkObjects.so
:- פותחים את הקובץ
AssemblyCode-Link-Objects.sln
. - בתפריט, לוחצים על Build > (פיתוח >) בניית הפתרון.
- פותחים את הקובץ
- לוודא שהפונקציות מיוצאות בצורה תקינה אל Android
אפשר להשתמש בכלי nm.exe NDK:
- בשורת הפקודה, נכנסים לספרייה לדוגמה.
- עוברים אל המיקום של ספריית Android שנוצר על ידי
build. מיקום ברירת המחדל דומה למיקום
$sample_dir\$solution_configuration\$solution_platform\$platform
ו-$sample_dir\Debug\Android-arm64-v8a\arm64-v8a
עבור הפלטפורמה arm64-v8a. - צריך לוודא שקטע הסמלים המיוצאים מכיל את הפונקציות לפי
הרצת הפקודה הבאה:
…\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