ตัวอย่าง

ตัวอย่างส่วนขยายการพัฒนาเกม 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

วิธีตั้งค่าและเรียกใช้ตัวอย่าง

  1. ใน Visual Studio ให้เปิดและสร้างตัวอย่าง HelloJNI
  2. เพิ่มแพลตฟอร์ม Android arm64-v8a สำหรับข้อมูลเพิ่มเติม ดูข้อมูลได้ที่ การเพิ่มแพลตฟอร์ม Android
  3. เพิ่มรายการ Android APK สำหรับแพลตฟอร์มใหม่
  4. คอมไพล์โปรเจ็กต์
  5. เพิ่มแพลตฟอร์ม Android ต่อไปนี้ จากนั้นเพิ่มรายการ Android APK สำหรับอุปกรณ์แต่ละรุ่น ได้แก่ Android-armeabi-v7a, Android-x86 และ Android-x86_64
  6. สร้างและเรียกใช้ตัวอย่าง

อุโมงค์ข้อมูลไม่รู้จบ

Endless-Tunnel ตัวอย่างเกม Android ที่ผู้เล่นสะสมสีขาว ลูกบาศก์ขณะพยายามมุ่งไปให้ถึงปลายอุโมงค์ โอนมาจาก OpenGL ใน ที่เก็บ Android NDK ใน GitHub ตัวอย่างนี้ไม่มีเกมเวอร์ชัน Windows

ตัวอย่างมีการตั้งค่าอยู่แล้วและมีการกำหนดค่าแพลตฟอร์ม Android ไว้เพื่อให้คุณสามารถ สร้างและเรียกใช้โปรเจ็กต์ใน Visual Studio โดยไม่ต้องแก้ไขอะไรเลย เมื่อคุณ เปิดโซลูชัน เครื่องมือสำรวจโซลูชันจะแสดงโมดูลต่อไปนี้

กาน้ำชา

ตัวอย่างกาน้ำชาแสดงกาน้ำชาแบบคลาสสิกที่แสดงผลด้วย OpenGL ES และ ไปยังส่วนขยายการพัฒนาเกม Android เพื่อแสดงคุณลักษณะดังต่อไปนี้:

  • การพัฒนาโครงการข้ามแพลตฟอร์ม: คุณสามารถสร้างตัวอย่างกาน้ำชาสำหรับ Windows และ Android
  • การใช้งานแพ็กเกจ Android ที่กำหนดเอง: มีการย้ายสคริปต์บิลด์ Gradle ไปยัง ไดเรกทอรีรากของตัวอย่าง ซึ่งมีไฟล์ Teapot.sln อยู่
  • การผสานรวมบิลด์ของ Ninja แบบทดลองที่เปิดใช้ กำลังเปิดโปรเจ็กต์ใน Android Studio
  • การกำหนดค่า Android ที่กำหนดเองซึ่งสาธิตวิธีใช้ เครื่องมือล้างที่อยู่ (ASan) และ ตัวล้างที่อยู่ฮาร์ดแวร์ (HWAsan)

การนำตัวอย่าง Teepot ไปใช้งานจะแบ่งออกเป็นหลายส่วน ซึ่งได้แก่ สำหรับแอปพลิเคชันและเกมข้ามแพลตฟอร์มขนาดใหญ่:

  • โมดูล 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. เพิ่มทรัพยากร Dependency ของโปรเจ็กต์ Freeglut ดังนี้
    1. เปิด Teapot.sln ใน Visual Studio
    2. ในเมนู ให้คลิกแก้ไขข้อบกพร่อง > x64 > โปรแกรมแก้ไขข้อบกพร่องของ Windows ในเครื่อง
    3. ในเครื่องมือสำรวจโซลูชัน ให้คลิกขวา 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. เพิ่มทรัพยากร Dependency ของโปรเจ็กต์ GLEW ดังนี้
    1. ในแผงสำรวจโซลูชัน ให้คลิกขวา 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 ให้คลิกปุ่มเรียกใช้โปรแกรมแก้ไขข้อบกพร่อง Windows ในเครื่อง
    2. ตัวอย่างควรมีลักษณะดังนี้
      วันที่ ภาพหน้าจอของตัวอย่าง Tepot ที่กำลังทำงานใน Windows

นี่คือโปรเจ็กต์เทมเพลตที่สาธิตวิธีสร้างโฆษณาเนทีฟสำหรับ Android ไลบรารีจาก Assembly และซอร์สโค้ด 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) จะแมปกับตัวประกอบที่ถูกต้อง ตัวอย่างนี้ ใช้ Toolchain ของ 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. ในเมนู ให้คลิกสร้าง > สร้างโซลูชัน
  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