Giới thiệu
Sau đây là hướng dẫn gỡ lỗi quá trình biên dịch và tạo bản dựng cho trò chơi Unity bằng SDK Firebase cho Unity. Tài liệu này mô tả cách điều tra và giải quyết nhiều vấn đề phổ biến mà bạn có thể gặp phải trong khi định cấu hình và xây dựng trò chơi cho một nền tảng mới hoặc sau khi cập nhật. Các lỗi này được sắp xếp theo thứ tự thời điểm có thể xảy ra trong quá trình. Hãy tham khảo các vấn đề theo thứ tự và tiếp tục khi giải quyết xong từng vấn đề.
Ngoài tài liệu này, hãy tham khảo Câu hỏi thường gặp về Firebase cho Unity để biết thêm thông tin.
Vấn đề biên dịch Chế độ phát
Loại vấn đề đầu tiên về bản dựng có thể xảy ra trong khi kiểm thử trong trình chỉnh sửa trước khi bạn cố gắng bắt đầu một bản dựng dành cho thiết bị di động. Phần này đề cập đến tất cả lỗi Firebase xảy ra trước và trong Chế độ phát.
Khi khởi động hoặc phát hiện các thay đổi đối với phần phụ thuộc, mã hoặc các thành phần khác, Unity sẽ cố gắng tạo lại dự án. Nếu dự án không thể biên dịch tại thời điểm đó, trình chỉnh sửa sẽ ghi lại lỗi biên dịch vào bảng điều khiển và nếu bạn cố gắng chuyển sang Chế độ phát, bạn sẽ thấy một cửa sổ bật lên về lỗi có nội dung All compiler errors have to be fixed before you can enter playmode!
trong thẻ Scene (Cảnh) của Unity.
Gỡ lỗi các vấn đề biên dịch liên quan đến Firebase
Thiếu loại, lớp, phương thức và thành viên
Nhiều vấn đề về Firebase xảy ra do trình chỉnh sửa và trình biên dịch không tìm thấy các loại, lớp, phương thức và thành viên cần thiết. Các triệu chứng thường gặp của tình trạng này là các biến thể của những triệu chứng sau:
The type or namespace name ‘<CLASS OR NAMESPACE NAME>' could not be found. Are you missing a using directive or an assembly reference?
The type or namespace name <TYPE OR NAMESPACE NAME> does not exist in the namespace ‘Firebase<.OPTIONAL NESTED NAMESPACE NAME PATH>' (are you missing an assembly reference?)
‘<CLASS NAME>' does not contain a definition for ‘<MEMBER VARIABLE OR METHOD NAME>'
Các bước giải quyết:
Khi bạn đang sử dụng các lớp hoặc phương thức Firebase trong mã, hãy đảm bảo bạn cung cấp các lớp hoặc phương thức đó bằng cách có các lệnh
using
chính xác cho các sản phẩm Firebase cụ thể cần thiết.- Ví dụ trong MechaHamster: Level Up With Firebase Edition (MechaHamster: Nâng cấp bằng phiên bản Firebase):
Xác minh rằng bạn đã nhập các gói Firebase phù hợp:
- Để nhập các gói thích hợp, hãy làm như sau:
- Thêm SDK Firebase cho Unity dưới dạng
.unitypackage
hoặc - Hãy xem xét và thực hiện một trong các phương án thay thế trong phần Các tuỳ chọn cài đặt Unity khác.
- Thêm SDK Firebase cho Unity dưới dạng
- Đảm bảo rằng mọi sản phẩm Firebase trong dự án và EDM4U:
- Ở cùng một phiên bản
- Được cài đặt dưới dạng
.unitypackage
độc quyền HOẶC độc quyền thông qua Trình quản lý gói Unity.
- Để nhập các gói thích hợp, hãy làm như sau:
Nếu bạn đã nhập SDK Firebase Unity trước phiên bản "10.0.0" dưới dạng
.unitypackage
, thì tệp lưu trữ zip SDK Firebase Unity sẽ chứa các gói hỗ trợ cả .NET 3.x và .NET 4.x. Đảm bảo rằng bạn chỉ đưa cấp độ Khung .NET tương thích vào dự án:- Khả năng tương thích giữa các phiên bản của Trình chỉnh sửa Unity và Cấp khung .NET được thảo luận trong phần Thêm Firebase vào dự án Unity.
- Nếu bạn vô tình nhập gói Firebase ở cấp khung .NET không chính xác hoặc cần chuyển từ sử dụng
.unitypackage
sang một trong các Tuỳ chọn cài đặt Unity bổ sung, cách tốt nhất là xoá mọi gói Firebase thông qua các phương thức được đề cập trong phần di chuyển này, sau đó nhập lại tất cả gói Firebase.
Kiểm tra để đảm bảo trình chỉnh sửa đang tạo lại dự án và các lần phát của bạn phản ánh trạng thái mới nhất của dự án:
- Theo mặc định, trình chỉnh sửa Unity được đặt để tạo lại bất cứ khi nào phát hiện thấy thay đổi về tài sản hoặc cấu hình.
- Có thể chức năng này đã bị tắt và Trình chỉnh sửa Unity được đặt thành làm mới/biên dịch lại theo cách thủ công. Hãy điều tra vấn đề này và thử làm mới theo cách thủ công nếu đúng như vậy.
Lỗi thời gian chạy của Chế độ phát
Nếu trò chơi của bạn khởi động nhưng gặp sự cố với Firebase trong khi chạy, hãy thử những cách sau:
Đảm bảo bạn phê duyệt các gói Firebase trong phần "Bảo mật và quyền riêng tư" trên Mac OS
Nếu khi khởi động trò chơi trong trình chỉnh sửa trên Mac OS, bạn thấy hộp thoại "Không thể mở FirebaseCppApp-<version>.bundle vì không xác minh được nhà phát triển", thì bạn phải phê duyệt tệp gói cụ thể đó trong trình đơn Bảo mật và quyền riêng tư của Mac.
Để thực hiện việc này, hãy nhấp vào Biểu tượng Apple > System Preferences (Tuỳ chọn hệ thống) > Security & Privacy (Bảo mật và quyền riêng tư)
Trong trình đơn bảo mật, ở khoảng giữa trang, có một mục cho biết ""FirebaseCppApp-<version>.bundle" đã bị chặn sử dụng vì không phải của nhà phát triển đã xác định."
Nhấp vào nút có nhãn Cho phép mọi cách.
Quay lại Unity rồi nhấn lại Play (Phát).
Sau đó, bạn sẽ thấy một cảnh báo tương tự như cảnh báo đầu tiên:
Nhấn Open (Mở) để chương trình của bạn có thể tiếp tục; bạn sẽ không được hỏi lại về tệp cụ thể này.
Đảm bảo dự án của bạn chứa và đang sử dụng các tệp cấu hình hợp lệ
- Đảm bảo bạn đã đặt chế độ cài đặt bản dựng cho mục tiêu mà bạn dự định (iOS hoặc Android) trong phần File > Build Settings (Tệp > Cài đặt bản dựng). Để thảo luận đầy đủ hơn, hãy đọc Tài liệu về chế độ cài đặt bản dựng Unity.
- Tải tệp cấu hình cho ứng dụng (
google-services.json
cho Android hoặcGoogleService-Info.plist
cho iOS) và mục tiêu bản dựng xuống từ bảng điều khiển Firebase trong phần Project Settings (Cài đặt dự án) > Your Apps (Ứng dụng của bạn): Nếu bạn đã có các tệp này, hãy xoá các tệp đó trong dự án và thay thế bằng phiên bản mới nhất, đảm bảo rằng các tệp đó được viết chính xác như hiển thị ở trên mà không có "(1)" hoặc các số khác đính kèm vào tên tệp. - Nếu bảng điều khiển chứa thông báo liên quan đến các tệp trong
Assets/StreamingAssets/
, hãy đảm bảo không có thông báo nào trên bảng điều khiển cho biết Unity không thể chỉnh sửa các tệp đó - Đảm bảo
Assets/StreamingAssets/google-services-desktop.json
được tạo và khớp với tệp cấu hình đã tải xuống.- Nếu thư mục này không được tạo tự động và
StreamingAssets/
không tồn tại, hãy tạo thư mục theo cách thủ công trong thư mụcAssets
. - Kiểm tra xem Unity đã tạo
google-services-desktop.json
hay chưa.
- Nếu thư mục này không được tạo tự động và
Đảm bảo rằng mọi sản phẩm Firebase và EDM4U đều được cài đặt riêng thông qua .unitypackage
hoặc Trình quản lý gói Unity
- Kiểm tra cả thư mục
Assets/
và Trình quản lý gói Unity để đảm bảo rằng bạn đã cài đặt Firebase SDK và EDM4U thông qua một trong hai phương thức. - Một số trình bổ trợ do Google phát triển, chẳng hạn như Google Play và trình bổ trợ của bên thứ ba có thể phụ thuộc vào EDM4U. Các trình bổ trợ đó có thể bao gồm EDM4U trong
.unitypackage
hoặc gói Trình quản lý gói Unity (UPM). Đảm bảo chỉ có một bản sao EDM4U trong dự án của bạn. Nếu có gói UPM nào phụ thuộc vào EDM4U, tốt nhất bạn chỉ nên giữ lại các phiên bản UPM của EDM4U. Bạn có thể tìm thấy các phiên bản này trên trang Lưu trữ API của Google cho Unity.
Đảm bảo rằng mọi sản phẩm Firebase trong dự án của bạn đều ở cùng một phiên bản.
- Nếu bạn đã cài đặt SDK Firebase thông qua
.unitypackage
, hãy kiểm tra xem tất cả thư việnFirebaseCppApp
trongAssets/Firebase/Plugins/x86_64/
có cùng phiên bản hay không. - Nếu bạn đã cài đặt SDK Firebase thông qua Trình quản lý gói Unity (UPM), hãy mở Windows > Package Manager (Cửa sổ > Trình quản lý gói), tìm "Firebase" và đảm bảo tất cả các gói Firebase đều ở cùng một phiên bản.
- Nếu dự án của bạn chứa nhiều phiên bản SDK Firebase, bạn nên xoá hoàn toàn tất cả SDK Firebase trước khi cài đặt lại tất cả SDK Firebase, lần này là với cùng phiên bản. Cách tốt nhất là xoá mọi gói Firebase thông qua các phương thức được đề cập trong phần di chuyển này.
Lỗi trình phân giải và bản dựng thiết bị mục tiêu
Nếu trò chơi của bạn hoạt động trong trình chỉnh sửa (được định cấu hình cho mục tiêu bản dựng phù hợp mà bạn chọn), tiếp theo, hãy xác minh rằng Trình quản lý phần phụ thuộc bên ngoài cho Unity (EDM4U) được định cấu hình và hoạt động đúng cách.
Kho lưu trữ EDM4U trên GitHub chứa hướng dẫn từng bước cho phần này của quy trình mà bạn nên xem xét và làm theo trước khi tiếp tục.
Các vấn đề về "Single Dex" (Dex đơn) và việc rút gọn (Bắt buộc nếu sử dụng Cloud Firestore)
Trong khi tạo ứng dụng Android, bạn có thể gặp 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.
Tệp .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 quan của các lớp đó cho ứng dụng Android. Một tệp dex chỉ được phép tham chiếu đến 65.536 phương thức; bản dựng sẽ không thành công nếu tổng số phương thức từ tất cả thư viện Android trong dự án của bạn vượt quá giới hạn này.
Bạn có thể áp dụng tuần tự hai bước sau; chỉ bật multidex nếu việc rút gọn không giải quyết được vấn đề.
Bật tính năng Rút gọn
Unity đã ra mắt tính năng rút gọn trong phiên bản 2017.2 để loại bỏ mã không dùng đến. Tính năng này có thể làm 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 phát hành > Rút gọn). * Các tuỳ chọn có thể khác nhau tuỳ theo phiên bản Unity, vì vậy, hãy tham khảo tài liệu chính thức của Unity.
Bật Multidex
Nếu sau khi bật tính năng rút gọn, số lượng phương thức được tham chiếu vẫn vượt quá hạn mức, thì bạn có thể bật multidex
. Có nhiều cách để thực hiện việc này trong Unity:
- Nếu bạn bật Mẫu Gradle tuỳ chỉnh trong phần Cài đặt người chơi, 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ể xem thêm thông tin chi tiết trong hướng dẫn sử dụng multidex.
Tìm hiểu và khắc phục lỗi thời gian chạy trên thiết bị mục tiêu
Nếu trò chơi của bạn hoạt động trong trình chỉnh sửa và có thể được tạo cũng như cài đặt trên thiết bị mục tiêu, nhưng bạn gặp lỗi thời gian chạy, hãy kiểm tra và tìm hiểu nhật ký được tạo trên thiết bị.
Phần này trình bày chi tiết cách điều tra nhật ký để tìm lỗi có thể xảy ra và một lỗi như vậy chỉ xảy ra trong thời gian chạy trên thiết bị hoặc trình mô phỏng.
Android
Trình mô phỏng
- Kiểm tra nhật ký hiển thị trong bảng điều khiển của Trình mô phỏng hoặc xem cửa sổ Logcat.
Thiết bị
Làm quen với adb và adb logcat cũng như cách sử dụng các công cụ này.
- Mặc dù bạn có thể sử dụng nhiều công cụ của môi trường dòng lệnh để lọc đầu ra, nhưng hãy cân nhắc việc xem xét các tuỳ chọn của logcat.
Một cách đơn giản để bắt đầu một phiên ADB với một bảng trống là:
adb logcat -c && adb logcat <OPTIONS>
trong đó
OPTIONS
là bất kỳ cờ nào bạn truyền vào dòng lệnh để lọc đầu ra.
Sử dụng Logcat thông qua Android Studio
Khi sử dụng Logcat thông qua Android Studio, bạn có thể sử dụng các công cụ tìm kiếm bổ sung để tạo các lượt tìm kiếm hiệu quả một cách đơn giản hơn.
iOS
Kiểm tra nhật ký
Nếu đang chạy thiết bị thực, hãy đính kèm thiết bị đó vào máy tính. Kiểm tra lldb trong Xcode.
Vấn đề về Swift
Nếu bạn gặp nhật ký lỗi đề cập đến swift, hãy tham khảo phần Trình quản lý phần phụ thuộc bên ngoài cho Unity để biết thông tin về các lỗi đó.
Các bước tiếp theo
Nếu trò chơi của bạn vẫn gặp vấn đề về việc biên dịch, tạo bản dựng hoặc chạy liên quan đến Firebase, hãy kiểm tra trang về các vấn đề liên quan đến SDK Firebase cho Unity và cân nhắc việc gửi một vấn đề mới. Ngoài ra, hãy tham khảo trang hỗ trợ của Firebase để tìm hiểu thêm về các lựa chọn khác.