การแก้ปัญหา & คำถามที่พบบ่อยเกี่ยวกับ Unity และ Firebase

หน้านี้มีเคล็ดลับและการแก้ปัญหาสำหรับปัญหาที่เฉพาะเจาะจงกับ Unity ซึ่งคุณอาจพบเมื่อใช้ Firebase

หากพบปัญหาอื่นๆ หรือไม่เห็นปัญหาของคุณระบุไว้ด้านล่าง โปรดดู ที่ คำถามที่พบบ่อยหลักของ Firebase สำหรับคำถามที่พบบ่อยเกี่ยวกับ Firebase โดยรวมหรือ คำถามที่พบบ่อยเกี่ยวกับผลิตภัณฑ์

ปัญหาเกี่ยวกับ dex เดียวขณะสร้างแอป Android

ขณะสร้างแอป Android คุณอาจพบข้อผิดพลาดในการสร้างที่เกี่ยวข้องกับการมีไฟล์ dex ไฟล์เดียว ข้อความแสดงข้อผิดพลาดจะมีลักษณะคล้ายกับข้อความต่อไปนี้ หากโปรเจ็กต์ได้รับการกำหนดค่าให้ใช้ระบบบิลด์ Gradle

Cannot fit requested classes in a single dex file.

ไฟล์ Dalvik Executable (.dex) ใช้เพื่อเก็บชุดคำจำกัดความของคลาสและข้อมูลเสริมที่เกี่ยวข้องสำหรับแอปพลิเคชัน Android (.apk) ไฟล์ dex ไฟล์เดียวจำกัดการอ้างอิงถึงเมธอด 65,536 รายการ การสร้างจะล้มเหลวหากจำนวนเมธอดทั้งหมดจากไลบรารี Android ทั้งหมดในโปรเจ็กต์เกินขีดจำกัดนี้

Unity เปิดตัว การลดขนาด ในปี 2017.2 ซึ่งใช้ Proguard (หรือเครื่องมืออื่นๆ ใน Unity บางเวอร์ชัน) เพื่อนำโค้ดที่ไม่ได้ใช้ออก ซึ่งจะช่วยลดจำนวน เมธอดทั้งหมดที่อ้างอิงในไฟล์ dex ไฟล์เดียว คุณสามารถดูตัวเลือกนี้ได้ในการตั้งค่าเพลเยอร์ > Android > การตั้งค่าการเผยแพร่ > ลดขนาด ตัวเลือกอาจแตกต่างกันไปใน Unity เวอร์ชันต่างๆ ดังนั้นโปรดดูเอกสารประกอบอย่างเป็นทางการของ Unity

หากจำนวนเมธอดที่อ้างอิงยังคงเกินขีดจำกัด อีกตัวเลือกหนึ่งคือการเปิดใช้ multidex คุณสามารถทำได้หลายวิธีใน Unity ดังนี้

  • หากเปิดใช้ Custom Gradle Template ในส่วน Player Settings ให้แก้ไข mainTemplate.gradle
  • หากใช้ Android Studio เพื่อสร้างโปรเจ็กต์ที่ส่งออก ให้แก้ไขไฟล์ build.gradle ระดับโมดูล

ดูรายละเอียดเพิ่มเติมได้ใน คู่มือผู้ใช้ multidex

ปัญหาเมื่อสร้างสำหรับ Android ด้วย minSdkVersion 23

เมื่อสร้างสำหรับ Android หากกำหนดเป้าหมายเป็น minSdkVersion 23 การสร้างอาจล้มเหลวในขั้นตอนการสร้าง dex ซึ่งมักจะอยู่ในงาน Gradle ':launcher:mergeExtDexDebug' โดยระบบจะแจ้งว่า "Failed to transform" ไลบรารี Android รายการใดรายการหนึ่ง ปัญหานี้เกิดจากข้อบกพร่องในเครื่องมือ dex เริ่มต้นใน Android SDK ที่เอดิเตอร์ Unity ส่วนใหญ่ใช้ และสามารถแก้ไขได้หลายวิธี ดังนี้

  • ตั้งค่า minSdkVersion เป็น 24
  • เปิดการลดขนาด Android ในการตั้งค่าเพลเยอร์ > Android > การตั้งค่าการเผยแพร่ > ลดขนาด
  • ระบุเครื่องมือ dex เวอร์ชันอื่นโดยเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ settingsTemplate.gradle
buildscript {
  repositories {
    mavenLocal()
    maven { url 'https://maven.google.com'  }
    mavenCentral()
  }
  dependencies {
    classpath 'com.android.tools:r8:8.3.37'
  }
}

ปัญหาเมื่อสร้างสำหรับ iOS ด้วย Cocoapods

เมื่อสร้างสำหรับ iOS การติดตั้ง Cocoapod อาจล้มเหลวโดยมีข้อผิดพลาดเกี่ยวกับภาษาหรือการเข้ารหัส UTF-8 ปัจจุบันมีวิธีแก้ปัญหาหลายวิธี

  • เรียกใช้ pod install จากเทอร์มินัลโดยตรง แล้วเปิดไฟล์ xcworkspace ที่ได้

  • ดาวน์เกรด Cocoapods เป็นเวอร์ชัน 1.10.2 ปัญหานี้เกิดขึ้นในเวอร์ชัน 1.11 ขึ้นไปเท่านั้น

  • เพิ่ม export LANG=en_US.UTF-8 ใน ~/.bash_profile หรือไฟล์ที่เทียบเท่า

วิธีอัปเดตเวอร์ชันของ Firebase Unity SDK

กระบวนการอัปเดตเวอร์ชันของ Firebase Unity SDK จะขึ้นอยู่กับวิธีนำเข้า SDK ในตอนแรก โดยมีวิธีการนำเข้า 2 วิธีดังนี้

  • การนำเข้าไฟล์ .unitypackage ในไดเรกทอรี Assets/ ของโปรเจ็กต์
  • การนำเข้าโดยใช้ Unity Package Manager (UPM)
    • นี่เป็นวิธีที่แนะนำในการจัดการแพ็กเกจใน Unity 2018.4 ขึ้นไป
    • ใช้วิธีนี้เพื่อให้การอัปเดตเวอร์ชันในอนาคตง่ายขึ้นและไดเรกทอรี Assets/ เป็นระเบียบมากขึ้น

ในโปรเจ็กต์ Unity คุณควรใช้วิธีนำเข้าเพียงวิธีเดียวเพื่อจัดการแพ็กเกจ Firebase ทั้งหมด วิธีการด้านล่างนี้ใช้ได้ไม่เพียงแต่ในการอัปเดตเวอร์ชันของแพ็กเกจแต่ละรายการเท่านั้น แต่ยังใช้ในการย้ายการจัดการแพ็กเกจไปยัง UPM (วิธีการนำเข้าที่แนะนำ) หากจำเป็น