Khắc phục sự cố & Câu hỏi thường gặp về Unity và Firebase

Trang này cung cấp các mẹo và thông tin khắc phục sự cố đối với những vấn đề cụ thể về Unity mà bạn có thể gặp phải khi sử dụng Firebase.

Bạn gặp phải những thách thức khác hoặc không thấy vấn đề của mình được nêu bên dưới? Hãy nhớ xem Câu hỏi thường gặp chính về Firebase để biết thêm câu hỏi thường gặp chung về Firebase hoặc câu hỏi thường gặp dành riêng cho sản phẩm.

Vấn đề với dex đơn khi tạo ứng dụng Android

Trong khi tạo ứng dụng Android, bạn có thể gặp phải lỗi bản dựng liên quan đến việc có một tệp dex duy nhất. Thông báo lỗi có dạng như sau, nếu dự án của bạn được định cấu hình để sử dụng hệ thống xây dựng Gradle.

Cannot fit requested classes in a single dex file.

Các tệp Dalvik Executable (.dex) được dùng để lưu trữ một tập hợp các định nghĩa lớp và dữ liệu bổ trợ liên kết của các định nghĩa đó cho các ứng dụng Android (.apk). Một tệp dex duy nhất bị giới hạn tham chiếu đến 65.536 phương thức. Quá trình tạo sẽ không thành công nếu tổng số phương thức từ tất cả các thư viện Android trong dự án của bạn vượt quá giới hạn này.

Unity đã giới thiệu tính năng Giảm thiểu trong phiên bản 2017.2. Tính năng này sử dụng Proguard (hoặc các công cụ khác trong một số phiên bản Unity) để loại bỏ mã không dùng đến, nhờ đó có thể giảm tổng số phương thức được tham chiếu trong một tệp dex. Bạn có thể tìm thấy lựa chọn này trong phần Player Settings > Android > Publishing Settings > Minify (Cài đặt trình phát > Android > Cài đặt xuất bản > Giảm thiểu). Các lựa chọn có thể khác nhau trong các phiên bản Unity, vì vậy, hãy tham khảo tài liệu chính thức của Unity.

Nếu số lượng phương thức được tham chiếu vẫn vượt quá giới hạn, bạn có thể bật multidex. Có nhiều cách để thực hiện việc này trong Unity:

  • Nếu Custom Gradle Template trong Player Settings được bật, hãy sửa đổi mainTemplate.gradle.
  • Nếu bạn dùng Android Studio để tạo dự án đã xuất, hãy sửa đổi tệp build.gradle ở cấp mô-đun.

Bạn có thể tìm thêm thông tin chi tiết trong hướng dẫn sử dụng multidex.

Các vấn đề khi tạo cho Android với minSdkVersion 23

Khi tạo cho Android, nếu bạn nhắm đến minSdkVersion 23, thì quá trình này có thể không thành công ở bước tạo tệp dex, thường là trong tác vụ Gradle ":launcher:mergeExtDexDebug", trong đó sẽ có thông báo "Failed to transform" (Không chuyển đổi được) một trong các thư viện Android. Nguyên nhân là do một lỗi trong công cụ dex mặc định trong Android SDK mà hầu hết các trình chỉnh sửa Unity đều sử dụng và có thể khắc phục theo một số cách:

  • Đặt minSdkVersion thành 24.
  • Bật tính năng giảm thiểu Android trong Player Settings > Android > Publishing Settings > Minify (Cài đặt trình phát > Android > Cài đặt xuất bản > Giảm thiểu)
  • Chỉ định một phiên bản khác của công cụ dex bằng cách thêm phiên bản này vào tệp settingsTemplate.gradle:
buildscript {
  repositories {
    mavenLocal()
    maven { url 'https://maven.google.com'  }
    mavenCentral()
  }
  dependencies {
    classpath 'com.android.tools:r8:8.3.37'
  }
}

Vấn đề khi tạo cho iOS bằng Cocoapods

Khi tạo cho iOS, quá trình cài đặt Cocoapod có thể không thành công do lỗi về ngôn ngữ hoặc phương thức mã hoá UTF-8. Hiện có một số cách để giải quyết vấn đề này.

  • Từ cửa sổ dòng lệnh, hãy chạy trực tiếp pod install và mở tệp xcworkspace kết quả.

  • Hạ cấp phiên bản Cocoapods xuống 1.10.2. Vấn đề này chỉ xảy ra ở phiên bản 1.11 trở lên.

  • Trong ~/.bash_profile hoặc tương đương, hãy thêm export LANG=en_US.UTF-8

Cách cập nhật phiên bản của Firebase Unity SDK

Quy trình cập nhật phiên bản của Firebase Unity SDK phụ thuộc vào cách bạn nhập các SDK này ban đầu. Sau đây là 2 phương thức nhập thay thế:

  • Nhập tệp .unitypackage trong thư mục Assets/ của dự án
  • Nhập bằng Unity Package Manager (UPM)
    • Đây là cách nên dùng để quản lý các gói trong Unity 2018.4 trở lên.
    • Sử dụng phương thức này để giúp việc cập nhật phiên bản trong tương lai trở nên dễ dàng hơn và trình dọn dẹp thư mục Assets/ của bạn.

Trong dự án Unity, bạn chỉ nên sử dụng một phương thức nhập để quản lý tất cả các gói Firebase. Bạn có thể dùng hướng dẫn bên dưới không chỉ để cập nhật phiên bản của từng gói mà còn để di chuyển hoạt động quản lý gói sang UPM (phương thức nhập được đề xuất) nếu cần.

Nếu các gói Firebase nằm trong thư mục Assets/, bạn có hai lựa chọn để cập nhật phiên bản SDK:

  • Lựa chọn 1 (nên dùng): Di chuyển để sử dụng UPM (có trong Unity 2018.4 trở lên)

  • Cách 2: Tiếp tục sử dụng các tệp .unitypackage để nhập các tệp đó vào thư mục Assets/

    1. Nhập từng gói cho phiên bản đã cập nhật.

      Nếu bạn tải firebase_unity_sdk.zip xuống từ trang web Firebase, hãy đảm bảo rằng bạn nhập tất cả .unitypackages từ thư mục dotnet chính xác.

      • Nếu bạn đang sử dụng Unity 2019 trở lên, hãy nhập từ thư mục dotnet4.
      • Nếu không, hãy chọn Scripting Runtime Version (Phiên bản thời gian chạy tập lệnh) trong Player Settings (Cài đặt trình phát) và nếu bạn đặt thành ".NET 3.x", hãy nhập từ thư mục dotnet3.
    2. Trình quản lý phần phụ thuộc bên ngoài sẽ tự động xử lý việc ghi đè các phiên bản gói đã nhập trước đó (Trình quản lý này sẽ tự động được đưa vào khi bạn nhập Firebase .unitypackages).

      Tuy nhiên, nếu và CHỈ khi quy trình tự động này không thành công, bạn sẽ cần xoá các thư mục sau theo cách thủ công rồi thử lại bước nhập ở trên.

      • Assets/Editor Default Resources/Firebase
      • Assets/ExternalDependencyManager
      • Assets/Firebase
      • Assets/Parse
      • Assets/Plugins/iOS/Firebase

Nếu các gói Firebase do UPM quản lý, hãy nhập phiên bản SDK mới hơn dưới dạng .tgz. Thao tác nhập này sẽ tự động ghi đè phiên bản trước.