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à cách khắc phục sự cố cụ thể cho 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ớ tham khảo Câu hỏi thường gặp chính về Firebase để biết thêm câu hỏi thường gặp về Firebase hoặc câu hỏi thường gặp dành riêng cho sản phẩm.

Vấn đề về một tệp dex khi tạo ứng dụng Android

Khi tạo ứng dụng Android, bạn có thể gặp phải lỗi tạo liên quan đến việc có một tệp dex. 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.

Tệp Dalvik có thể thực thi (.dex) được dùng để lưu giữ 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 chúng cho các ứng dụng Android (.apk). Một tệp dex chỉ được 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 Rút gọn 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 của Unity) để loại bỏ mã không dùng đến, giúp 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 tuỳ 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 > Rút gọn). Các tuỳ 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ố 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 (Mẫu Gradle tuỳ chỉnh) trong phần Player Settings (Cài đặt trình phát) được bật, hãy sửa đổi mainTemplate.gradle.
  • Nếu bạn sử 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.

Vấn đề khi tạo cho Android bằng 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 dexing, 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 lỗi trong công cụ dex mặc định trong SDK Android mà hầu hết các trình chỉnh sửa Unity sử dụng. Bạn có thể khắc phục lỗi này theo một số cách:

  • Đặt minSdkVersion thành 24.
  • Bật tính năng rút gọn Android trong phần Player Settings > Android > Publishing Settings > Minify (Cài đặt trình phát > Android > Cài đặt xuất bản > Rút gọn)
  • 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ữ, khu vực hoặ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 rồi 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ỉ tồn tại trong 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 SDK Firebase cho Unity

Quy trình cập nhật phiên bản SDK Firebase cho Unity phụ thuộc vào cách nhập 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 Trình quản lý gói Unity (UPM)
    • Đây là cách được đề xuất để quản lý 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à thư mục Assets/ của bạn gọn gàng hơ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ể sử 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 việc quản lý gói sang UPM (phương thức nhập được đề xuất) nếu cần.