ตัวอย่างส่วนขยายการพัฒนาเกม Android สาธิตวิธีใช้ฟีเจอร์สำคัญ ของส่วนขยาย หัวข้อนี้จะอธิบายกลุ่มตัวอย่างและ การตั้งค่าที่จำเป็นเพื่อเรียกใช้
ตัวอย่างต่อไปนี้มีให้บริการใน หน้าดาวน์โหลด:
- HelloJNI: โปรเจ็กต์เบื้องต้น
- Endless-Tunnel: โปรเจ็กต์สำหรับ Android เท่านั้น
- Teepot: โครงการข้ามแพลตฟอร์มสำหรับ Windows และ Android
- AssemblyCode-Link-Objects: โปรเจ็กต์เทมเพลตที่มีซอร์สโค้ดการประกอบ
ก่อนจะเริ่มต้น
ติดตั้งส่วนขยายการพัฒนาเกม Android และตัวอย่าง โปรดดู Quickstart เพื่อดูรายละเอียด หัวข้อนี้ยังอธิบายวิธีสร้าง และเรียกใช้ตัวอย่าง และใช้ตัวอย่าง Teapot เวอร์ชัน Android
คู่มือการกำหนดค่าโปรเจ็กต์จะอธิบายวิธี กำหนดการตั้งค่าสำหรับโปรเจ็กต์ที่ใช้ส่วนขยาย เช่น การเพิ่มแพลตฟอร์ม Android และ APK
สวัสดี JNI
ตัวอย่าง HelloJNI เป็นโปรเจ็กต์พื้นฐานที่แสดงข้อความ "สวัสดีจาก JNI" ในหน้าต่างแอป โครงการใช้ซอร์สโค้ดชุดอื่นสำหรับ Windows และ Android
- ซอร์สโค้ด Android และไดเรกทอรีสคริปต์บิลด์ของ Gradle สวัสดีJNI\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
วิธีตั้งค่าและเรียกใช้ตัวอย่าง
- ใน Visual Studio ให้เปิดและสร้างตัวอย่าง HelloJNI
- เพิ่มแพลตฟอร์ม Android arm64-v8a สำหรับข้อมูลเพิ่มเติม ดูข้อมูลได้ที่ การเพิ่มแพลตฟอร์ม Android
- เพิ่มรายการ Android APK สำหรับแพลตฟอร์มใหม่
- คอมไพล์โปรเจ็กต์
- เพิ่มแพลตฟอร์ม Android ต่อไปนี้ จากนั้นเพิ่มรายการ Android APK สำหรับอุปกรณ์แต่ละรุ่น ได้แก่ Android-armeabi-v7a, Android-x86 และ Android-x86_64
- สร้างและเรียกใช้ตัวอย่าง
อุโมงค์ข้อมูลไม่รู้จบ
Endless-Tunnel ตัวอย่างเกม Android ที่ผู้เล่นสะสมสีขาว ลูกบาศก์ขณะพยายามมุ่งไปให้ถึงปลายอุโมงค์ โอนมาจาก OpenGL ใน ที่เก็บ Android NDK ใน GitHub ตัวอย่างนี้ไม่มีเกมเวอร์ชัน Windows
ตัวอย่างมีการตั้งค่าอยู่แล้วและมีการกำหนดค่าแพลตฟอร์ม Android ไว้เพื่อให้คุณสามารถ สร้างและเรียกใช้โปรเจ็กต์ใน Visual Studio โดยไม่ต้องแก้ไขอะไรเลย เมื่อคุณ เปิดโซลูชัน เครื่องมือสำรวจโซลูชันจะแสดงโมดูลต่อไปนี้
- Endless-tunnel: โมดูลแอปพลิเคชันที่แสดงตรรกะของเกม
- glm: ภาพรวมของที่เก็บข้อมูลทางคณิตศาสตร์ OpenGL ซึ่งสร้างขึ้นเป็นไลบรารีแบบคงที่
- Native_app_glue: Wrapper ของ NDK ที่สื่อสารกับ กิจกรรมเนทีฟ ออบเจ็กต์
กาน้ำชา
ตัวอย่างกาน้ำชาแสดงกาน้ำชาแบบคลาสสิกที่แสดงผลด้วย OpenGL ES และ ไปยังส่วนขยายการพัฒนาเกม Android เพื่อแสดงคุณลักษณะดังต่อไปนี้:
- การพัฒนาโครงการข้ามแพลตฟอร์ม: คุณสามารถสร้างตัวอย่างกาน้ำชาสำหรับ Windows และ Android
- การใช้งานแพ็กเกจ Android ที่กำหนดเอง: มีการย้ายสคริปต์บิลด์ Gradle ไปยัง
ไดเรกทอรีรากของตัวอย่าง ซึ่งมีไฟล์
Teapot.sln
อยู่ - การผสานรวมบิลด์ของ Ninja แบบทดลองที่เปิดใช้ กำลังเปิดโปรเจ็กต์ใน Android Studio
- การกำหนดค่า Android ที่กำหนดเองซึ่งสาธิตวิธีใช้ เครื่องมือล้างที่อยู่ (ASan) และ ตัวล้างที่อยู่ฮาร์ดแวร์ (HWAsan)
การนำตัวอย่าง Teepot ไปใช้งานจะแบ่งออกเป็นหลายส่วน ซึ่งได้แก่ สำหรับแอปพลิเคชันและเกมข้ามแพลตฟอร์มขนาดใหญ่:
- โมดูล
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
- เพิ่มทรัพยากร Dependency ของโปรเจ็กต์ Freeglut ดังนี้
- เปิด
Teapot.sln
ใน Visual Studio - ในเมนู ให้คลิกแก้ไขข้อบกพร่อง > x64 > โปรแกรมแก้ไขข้อบกพร่องของ Windows ในเครื่อง
- ในเครื่องมือสำรวจโซลูชัน ให้คลิกขวา GameApplication แล้วเลือก พร็อพเพอร์ตี้ > C/C++ ทั่วไป > ไดเรกทอรีเพิ่มเติม ได้แก่
- เพิ่ม
$your-freeglut-dir\include
ลงในเส้นทาง
- คลิกตกลง
- เลือก Linker > ทั่วไป > ไดเรกทอรีคลังเพิ่มเติม
- เพิ่ม
$your-freeglut-dir\lib\x64
ลงในเส้นทาง - คลิกตกลง
- เลือก Linker > ทั่วไป > ไดเรกทอรีคลังเพิ่มเติม
- เพิ่ม
freeglut.lib
ลงในเส้นทาง - คลิกตกลง
- เปิด
- เพิ่มทรัพยากร Dependency ของโปรเจ็กต์ GLEW ดังนี้
- ในแผงสำรวจโซลูชัน ให้คลิกขวา GameApplication แล้วเลือก พร็อพเพอร์ตี้ > C/C++ ทั่วไป > ไดเรกทอรีเพิ่มเติม ได้แก่
- เพิ่ม
$your-glew-dir\include
ลงในเส้นทาง - คลิกตกลง
- เลือก Linker > ทั่วไป > ไดเรกทอรีคลังเพิ่มเติม
- เพิ่ม
$your-glew-dir\lib\Release\x86
ลงในเส้นทาง - คลิกตกลง
- เลือก Linker > ทั่วไป > ไดเรกทอรีคลังเพิ่มเติม
- เพิ่ม
glew32.lib
ลงในเส้นทาง - คลิกตกลง
- เรียกใช้ตัวอย่างใน Windows ด้วยคำสั่งต่อไปนี้
- ในแถบเครื่องมือ Visual Studio ให้คลิกปุ่มเรียกใช้โปรแกรมแก้ไขข้อบกพร่อง Windows ในเครื่อง
- ตัวอย่างควรมีลักษณะดังนี้
วันที่
AssemblyCode-Link-Objects
นี่คือโปรเจ็กต์เทมเพลตที่สาธิตวิธีสร้างโฆษณาเนทีฟสำหรับ Android ไลบรารีจาก Assembly และซอร์สโค้ด C/C++ องค์ประกอบหลักมีดังต่อไปนี้
AssemblyCode-Link-Objects
: ไลบรารีหลักของ Android ที่สร้างขึ้นจาก C++ และซอร์สโค้ดการประกอบStaticLib
: ไลบรารีแบบคงที่ของตัวช่วยที่ส่งออกfrom_static_lib_assembly_code_as
โปรเจ็กต์นี้รองรับสถาปัตยกรรมหลายอย่าง สถาปัตยกรรมที่รองรับแต่ละรายการมีพร็อพเพอร์ตี้
ไฟล์ต้นฉบับที่ใช้ฟังก์ชันที่ส่งออกจาก StaticLib
คุณควรรวมเฉพาะไฟล์แหล่งที่มาของการประกอบสำหรับแพลตฟอร์มที่ใช้อยู่เท่านั้น
อาคาร โปรเจ็กต์นี้รวมไฟล์การประกอบไว้ในบิลด์โดยใช้
เครื่องมือสร้างที่กำหนดเอง
วิธีตั้งค่าและสร้างตัวอย่าง
- ใน Visual Studio ให้ตรวจสอบว่ามีการกำหนดค่าเครื่องมือสร้างที่กำหนดเองสำหรับ
ไฟล์การประกอบ
- ในเครื่องมือสำรวจโซลูชัน ให้คลิกขวาที่ ไฟล์แอสเซมบลี แล้วคลิกคุณสมบัติ ซึ่งจะเป็นการเปิด กล่องโต้ตอบหน้าคุณสมบัติสำหรับไฟล์
- เลือกการกำหนดค่าและแพลตฟอร์ม เช่น การกำหนดค่าทั้งหมดสำหรับ Android-arm64-v8a
- ตรวจสอบว่า ทั่วไป > ตั้งค่าการยกเว้นจากบิลด์แล้ว เป็น ไม่
- ตรวจสอบว่า ทั่วไป > กำหนดประเภทรายการแล้ว ไปที่เครื่องมือสร้างที่กำหนดเอง
- คลิกใช้หากมีการเปลี่ยนแปลงที่จะมีผล
- ตรวจสอบว่า
พร็อพเพอร์ตี้การกำหนดค่า > เครื่องมือสร้างที่กำหนดเอง > บรรทัดคำสั่ง:
ถูกตั้งค่าเป็น
$(AsToolExe) -o "$(IntDir)%(FileName).o" %(FullPath)
NDK ประกอบด้วยตัวประกอบแยกต่างหากสำหรับสถาปัตยกรรม CPU แต่ละตัวและ$(AsToolExe)
จะแมปกับตัวประกอบที่ถูกต้อง ตัวอย่างนี้ ใช้ Toolchain ของ NDK เพื่อสร้างทั้ง Android x86 และ x86_64 โปรเจ็กต์ หากคุณต้องการใช้ yasm สำหรับแพลตฟอร์ม Android x86_64 ใช้$(YasmToolExe)
แทน - ตรวจสอบว่า
พร็อพเพอร์ตี้การกำหนดค่า > เครื่องมือสร้างที่กำหนดเอง > เอาต์พุต:
ถูกตั้งค่าเป็น
$(IntDir)%(FileName).o
ต้องระบุสตริงนี้ ในการตั้งค่าบรรทัดคำสั่ง - ตรวจสอบว่า
พร็อพเพอร์ตี้การกำหนดค่า > เครื่องมือสร้างที่กำหนดเอง > ออบเจ็กต์ลิงก์:
ถูกตั้งค่าเป็น
Yes
ตัวอย่างเช่น การตั้งค่า Android-arm64-v8a ควร ดูคล้ายกับภาพหน้าจอต่อไปนี้
- สร้างโปรเจ็กต์ สิ่งนี้จะสร้าง
libAssmeblyCodeLinkObjects.so
ไฟล์:- เปิดไฟล์
AssemblyCode-Link-Objects.sln
- ในเมนู ให้คลิกสร้าง > สร้างโซลูชัน
- เปิดไฟล์
- เพื่อยืนยันว่ามีการส่งออกฟังก์ชันไปยัง Android อย่างถูกต้อง
ให้ใช้เครื่องมือ nm.exe NDK ดังนี้
- ในบรรทัดคำสั่ง ให้ไปที่ไดเรกทอรีตัวอย่าง
- ไปที่ตําแหน่งไลบรารี Android ที่สร้างโดย
งานสร้าง ตำแหน่งเริ่มต้นคล้ายกับ
$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