กําหนดค่าโปรเจ็กต์

กำหนดค่าโปรเจ็กต์ให้ใช้ Android Game Development Extension

ส่วนขยายการพัฒนาเกม Android จะเรียกใช้ MSBuild เพื่อสร้างซอร์สโค้ด C/C++ เป็นไลบรารีที่ใช้ร่วมกัน (.so) และไลบรารีแบบคงที่ (.a) ในระหว่างกระบวนการสร้าง งาน MSBuild ที่กําหนดเองจะเรียกใช้ Gradle เพื่อคอมไพล์ซอร์สโค้ด Java และ Kotlin, แพ็กเกจชิ้นงาน และสร้างไฟล์ APK สําหรับการนําไปใช้งาน เมื่อกำหนดค่าโปรเจ็กต์ คุณต้องตรวจสอบว่า MSBuild มีข้อมูลที่จำเป็นในการสร้างสำหรับแพลตฟอร์ม Android

บิลด์ C/C++ ด้วย MSBuild

โปรเจ็กต์ Android ทั่วไปจะสร้างขึ้นด้วย Gradle ซึ่งโค้ดเนทีฟภายในโปรเจ็กต์จะสร้างขึ้นโดยพาส Gradle ที่เรียกใช้ CMake หรือ ndk-build เมื่อใช้ Android Game Development Extension สำหรับ Visual Studio กระบวนการสร้างจะกลับกัน ตอนนี้ MSBuild จึงเป็นจุดเริ่มต้นของกระบวนการสร้าง MSBuild จะสร้างซอร์สโค้ด C/C++ ทั้งหมดขึ้นก่อนสำหรับแพลตฟอร์ม Android ใหม่ซึ่งติดตั้งไว้ในระบบของคุณโดยเป็นส่วนหนึ่งของส่วนขยาย (เช่น "Android-x86_64") จากนั้น MSBuild จะเรียกใช้ Gradle เพื่อแพ็กเกจไฟล์ไลบรารีที่แชร์ซึ่งมีตรรกะ C/C++ ไว้ใน APK

ก่อนอื่น คุณควรทำซ้ำตรรกะการสร้างที่มีอยู่ของโปรเจ็กต์ใน CMake หรือ ndk-build ใน MSBuild ตั้งค่าแพลตฟอร์มเป้าหมายเป็นแพลตฟอร์มต่อไปนี้

  • Android-x86
  • Android-x86_64
  • Android-armeabi-v7a
  • Android-arm64-v8a

แพลตฟอร์มเหล่านี้ทั้งหมดมาจาก Android Game Development Extension

AGDE ใช้ NDK ที่คุณเลือกเพื่อกำหนดตัวเลือกการคอมไพล์และการลิงก์เริ่มต้นเมื่อสร้างส่วน C/C++ ของแอป

หากต้องการปรับแต่งตัวเลือกการคอมไพล์หรือลิงก์เหล่านี้ ให้ตั้งค่าโดยใช้ตัวเลือก "พร็อพเพอร์ตี้โปรเจ็กต์" คุณจะเห็นตัวเลือกที่พบบ่อยที่สุดในกลุ่ม C/C++ (สำหรับการคอมไพล์), Librarian (สำหรับการเก็บถาวรของไลบรารีแบบคงที่) และ Linker (สำหรับการลิงก์ไลบรารีแบบไดนามิก) หากต้องการส่งตัวเลือกที่กำหนดเองอื่นๆ ให้เพิ่มตัวเลือกเหล่านั้นลงในส่วนบรรทัดคำสั่ง ตัวอย่างเช่น หากใช้ NDK ที่เก่ากว่า r28 คุณอาจต้องตั้งค่า Flag ของ linker เพื่อให้แอปรองรับขนาดหน้า 16 KB

เพิ่มแพลตฟอร์ม Android

แม้ว่าโปรเจ็กต์ตัวอย่าง Teapot จะมีแพลตฟอร์ม Android อยู่ แต่คุณต้องเพิ่มแพลตฟอร์ม Android ลงในโปรเจ็กต์ที่มีอยู่ด้วยตนเอง หากต้องการเพิ่มแพลตฟอร์มใหม่ ให้ทําดังนี้ใน Visual Studio

  1. เลือก Build > Configuration Manager
  2. ในส่วนแพลตฟอร์มโซลูชันที่ใช้งานอยู่ ให้เลือก <ใหม่>
  3. พิมพ์รายการใดรายการหนึ่งต่อไปนี้สำหรับแพลตฟอร์มใหม่

    • Android-armeabi-v7a
    • Android-arm64-v8a
    • Android-x86
    • Android-x86_64
  4. ในช่องคัดลอกการตั้งค่าจาก ให้เลือกแพลตฟอร์ม Android ที่มีอยู่อีกแพลตฟอร์มหนึ่ง หรือ <Empty> หากยังไม่มีแพลตฟอร์ม Android ตรวจสอบว่าคุณได้เปิดใช้สร้างแพลตฟอร์มโปรเจ็กต์ใหม่

เพิ่มรายการ APK ของ Android

เลือกเพิ่ม > รายการใหม่ > Visual C++ > Android > Android APK แล้วคลิกเพิ่ม กำหนดค่าแอปพลิเคชัน Android ในกล่องโต้ตอบต่อไปนี้

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

ทําให้ MSBuild เรียกใช้ Gradle เพื่อสร้าง APK

MSBuild เรียกใช้ Gradle ไม่ได้ เว้นแต่ว่าจะทราบตำแหน่งของโปรเจ็กต์ Gradle ตั้งค่าตำแหน่งนี้โดยใช้พร็อพเพอร์ตี้ Gradle Build Directory ดังที่แสดงในรูปที่ 1


รูปที่ 1 พร็อพเพอร์ตี้ Gradle Build Directory

นอกจากนี้ ให้ตั้งค่าพร็อพเพอร์ตี้ Application Module, Application Variant และ APK Name (ดังที่แสดงในรูปภาพก่อนหน้า) เพื่อให้ MSBuild ทราบว่าต้องสร้างอะไร

  • โมดูลแอปพลิเคชัน: ชื่อโปรเจ็กต์ย่อย Gradle นี่คือโปรเจ็กต์หลักที่ตั้งค่าไว้ในไฟล์ settings.gradle โดยปกติแล้วไฟล์นี้เรียกว่า app สำหรับโปรเจ็กต์ที่สร้างโดยใช้ Android Studio โดยตรง
  • ตัวแปรแอปพลิเคชัน: ตัวแปร Android ที่จะสร้าง ค่านี้ควรกำหนดตามการกำหนดค่า MSBuild เช่น บิลด์แก้ไขข้อบกพร่องควรมีค่าที่กำหนดไว้เป็นตัวแปรแก้ไขข้อบกพร่อง หากชื่อการกําหนดค่า MSBuild ของโปรเจ็กต์ตรงกับชื่อตัวแปร Gradle ให้ใช้ค่าเริ่มต้นของ $(Configuration)
  • ชื่อ APK: ชื่อไฟล์ APK ที่สร้างขึ้นเพื่อใช้แก้ไขข้อบกพร่องและสร้างโปรไฟล์ในคอมพิวเตอร์ที่ใช้พัฒนาซอฟต์แวร์ ระบบจะส่งชื่อนี้ไปยัง Gradle และสคริปต์บิลด์ Gradle ควรใช้ชื่อนี้ (ดูพร็อพเพอร์ตี้ MSBUILD_ANDROID_OUTPUT_APK_NAME ในส่วนต่อไปนี้)

แก้ไขสคริปต์บิลด์ Gradle

ในระหว่างการสร้าง MSBuild จะส่งข้อมูลต่อไปนี้เป็นพร็อพเพอร์ตี้โปรเจ็กต์ให้กับสคริปต์ Gradle เปลี่ยนสคริปต์บิลด์ที่มีอยู่ของโปรเจ็กต์ (ปกติจะตั้งชื่อว่า build.gradle) ให้อ่านพร็อพเพอร์ตี้เหล่านี้

  • MSBUILD_MIN_SDK_VERSION: เวอร์ชัน SDK ขั้นต่ำสำหรับการสร้าง APK ตั้งค่าค่านี้ในช่องเวอร์ชัน Android SDK ขั้นต่ำในหน้าพร็อพเพอร์ตี้ของโปรเจ็กต์ที่แสดงในรูปที่ 2


    รูปที่ 2 พร็อพเพอร์ตี้ Minimum Android SDK Version

    สคริปต์การบิลด์ Gradle ควรตั้งค่า minSdkVersion เป็นค่านี้ตามที่แสดงด้านล่าง

    Groovy

    android {
      // ...
    
      defaultConfig {
          applicationId "com.yourcompany.yourapp"
          minSdkVersion MSBUILD_MIN_SDK_VERSION
          // ...
      }
    
      // ...
    }

    Kotlin

    android {
      // ...
    
      defaultConfig {
          applicationId = "com.yourcompany.yourapp"
          minSdkVersion(MSBUILD_MIN_SDK_VERSION)
          // ...
      }
    
      // ...
    }
  • MSBUILD_ANDROID_OUTPUT_APK_NAME: ชื่อที่คาดไว้ของ APK ที่ Gradle สร้างขึ้น Android Game Development Extension จะค้นหา APK ที่ตรงกับชื่อนี้ จากนั้นจึงนำไปติดตั้งในอุปกรณ์ที่เชื่อมต่อ (สำหรับการแก้ไขข้อบกพร่องและการสร้างโปรไฟล์) ตั้งค่านี้ในช่องชื่อ APK ในหน้าพร็อพเพอร์ตี้โปรเจ็กต์ที่แสดงในรูปที่ 3


    รูปที่ 3 พร็อพเพอร์ตี้ ชื่อ APK

    สคริปต์บิลด์ Gradle ต้องเป็นไปตามพร็อพเพอร์ตี้นี้ ตัวอย่างเช่น ตัวอย่างต่อไปนี้จะตั้งชื่อ APK เอาต์พุตสำหรับตัวแปรทั้งหมดเป็นชื่อที่ MSBuild เลือก

    Groovy

    android {
      // ...
    
      applicationVariants.all { variant ->
          variant.outputs.all {
              outputFileName = MSBUILD_ANDROID_OUTPUT_APK_NAME
          }
      }
    
      // ...
    }

    Kotlin

    android {
      // ...
    
      applicationVariants.all { variant ->
          variant.outputs.all {
              outputFileName = MSBUILD_ANDROID_OUTPUT_APK_NAME
          }
      }
    
      // ...
    }
  • MSBUILD_JNI_LIBS_SRC_DIR: ไดเรกทอรีที่มีไลบรารีที่ใช้ร่วมกัน (ไฟล์ .so) ที่ MSBuild สร้างขึ้น ตั้งค่านี้ในช่องไดเรกทอรีเอาต์พุตในหน้าพร็อพเพอร์ตี้โปรเจ็กต์ที่แสดงด้านล่าง โดยค่าเริ่มต้น ค่านี้คือพร็อพเพอร์ตี้ไดเรกทอรีเอาต์พุตสำหรับโปรเจ็กต์ Visual Studio ดังที่แสดงในรูปที่ 4


    รูปที่ 4 พร็อพเพอร์ตี้ไดเรกทอรีเอาต์พุต

    Gradle ควรจัดแพ็กเกจไฟล์ไลบรารีที่ใช้ร่วมกันในโฟลเดอร์นี้ภายใน APK เพื่อให้แอปพลิเคชัน Android โหลดไฟล์เหล่านั้นได้เมื่อรันไทม์

    Groovy

    android {
      // ...
    
      sourceSets {
          main {
              jniLibs.srcDirs += [MSBUILD_JNI_LIBS_SRC_DIR]
          }
      }
    
      // ...
    }

    Kotlin

    android {
      // ...
    
      sourceSets.getByName("main") {
          jniLibs.srcDir(MSBUILD_JNI_LIBS_SRC_DIR)
      }
    
      // ...
    }

    นอกจากนี้ เนื่องจากตอนนี้ MSBuild จะสร้างโค้ด C/C++ ทั้งหมด ให้นําส่วน externalNativeBuild ในสคริปต์การสร้าง Gradle ออก ส่วนเหล่านี้ใช้เรียกใช้ CMake หรือ ndk-build เพื่อคอมไพล์โค้ด C/C++ แต่ตอนนี้ไม่จำเป็นแล้ว

  • MSBUILD_NDK_VERSION: เวอร์ชันของ NDK ที่จะใช้ในการสร้างโปรเจ็กต์ ตั้งค่านี้ในช่องเวอร์ชัน Android NDK ในหน้าพร็อพเพอร์ตี้โปรเจ็กต์ที่แสดงในรูปที่ 5


    รูปที่ 5 พร็อพเพอร์ตี้ Android NDK Version

    สคริปต์การบิลด์ Gradle ควรตั้งค่า ndkVersion เป็นค่านี้ตามที่แสดง

    Groovy

    android {
      // ...
    
      ndkVersion MSBUILD_NDK_VERSION
    
      // ...
    }

    Kotlin

    android {
      // ...
    
      ndkVersion = MSBUILD_NDK_VERSION
    
      // ...
    }

    ดูข้อมูลเพิ่มเติมได้ที่หัวข้อ Android Studio เรื่องติดตั้งและกำหนดค่า NDK และ CMake