Gỡ lỗi quy trình tạo, cài đặt và chạy trò chơi

Giới thiệu

Sau đây là hướng dẫn gỡ lỗi quy trình biên dịch và xây dựng cho các trò chơi Unity bằng Firebase SDK cho Unity. Hướng dẫn này mô tả cách điều tra và giải quyết nhiều vấn đề thường gặp hơn mà bạn có thể gặp phải khi định cấu hình và tạo bản dựng trò chơi cho một nền tảng mới hoặc sau khi cập nhật. Hướng dẫn này được sắp xếp theo thứ tự thời điểm các lỗi này có thể xảy ra trong quá trình này. Hãy tham khảo theo thứ tự và tiếp tục khi mỗi lỗi được giải quyết.

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 đề về biên dịch Chế độ chơi

Lớp vấn đề đầu tiên về bản dựng có thể xảy ra khi bạn kiểm thử trong trình chỉnh sửa trước khi cố gắng bắt đầu tạo bản dựng cho thiết bị di động. Phần này liên quan đến tất cả các lỗi Firebase xảy ra trước và trong Chế độ chơi.

Khi Unity bắt đầu 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 vào thời điểm đó, trình chỉnh sửa sẽ ghi lại các lỗi biên dịch vào bảng điều khiển. Nếu bạn cố gắng chuyển sang Chế độ chơi, bạn sẽ nhận được một cửa sổ bật lên thông báo lỗi trong thẻ Scene (Cảnh) của Unity có nội dung All compiler errors have to be fixed before you can enter playmode! (Bạn phải khắc phục tất cả các lỗi trình biên dịch trước khi có thể chuyển sang chế độ chơi!).

Thiếu các kiểu, 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 kiểu, 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 vấn đề 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 khắc phục:
  1. Khi bạn sử dụng các lớp hoặc phương thức Firebase trong mã, hãy đảm bảo rằng bạn đang cung cấp các lớp hoặc phương thức đó bằng cách có các chỉ thị using chính xác cho các sản phẩm Firebase cụ thể cần thiết.

    1. Ví dụ từ MechaHamster: Level Up With Firebase Edition:
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. Xác minh rằng bạn đã nhập các gói Firebase thích hợp:

    1. Để nhập các gói thích hợp, hãy:
      1. Thêm SDK của Firebase cho Unity dưới dạng .unitypackages hoặc
      2. Xem xét và thực hiện một trong các giải pháp thay thế trong Các lựa chọn cài đặt Unity bổ sung.
    2. Đảm bảo rằng mọi sản phẩm Firebase trong dự án và EDM4U:
      • Đều ở cùng một phiên bản
      • Được cài đặt dưới dạng .unitypackage HOẶC chỉ thông qua Trình quản lý gói Unity.
  3. Nếu bạn đã nhập SDK của Firebase cho Unity trước phiên bản "10.0.0" dưới dạng .unitypackage, thì tệp lưu trữ ZIP SDK của Firebase cho Unity sẽ chứa các gói hỗ trợ cả .NET 3.x và .NET 4.x. Hãy đảm bảo rằng bạn chỉ đưa cấp độ .NET Framework tương thích vào dự án của mình:

    1. 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 độ .NET Framework được thảo luận trong phần Thêm Firebase vào dự án Unity.
    2. Nếu bạn vô tình nhập các gói Firebase ở Cấp độ .NET Framework không chính xác hoặc cần chuyển từ việc sử dụng .unitypackage sang một trong các lựa chọn cài đặt Unity bổ sung, thì cách đơn giản 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ả các gói Firebase.
  4. Kiểm tra để đảm bảo rằng trình chỉnh sửa đang tạo lại dự án của bạn và các lần thử phát của bạn phản ánh trạng thái mới nhất của dự án:

    1. 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 các thay đổi về thành phần hoặc cấu hình.
    2. Có thể chức năng này đã bị tắt và Trình chỉnh sửa Unity được đặt để 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 đây là trường hợp đó.

Lỗi thời gian chạy Chế độ chơi

Nếu trò chơi của bạn bắt đầu nhưng gặp phải vấn đề với Firebase khi đang chạy, hãy thử làm như sau:

Đảm bảo rằng 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 một hộp thoại có nội dung "FirebaseCppApp-<version>.bundle Cannot be opened because the developer cannot be verified." (Không thể mở FirebaseCppApp-<version>.bundle vì không thể xác minh 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 Apple Icon (Biểu tượng Apple) > System Preferences (Lựa chọn ưu tiên về 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 phần có nội dung ""FirebaseCppApp-<version>.bundle" was blocked from use because it is not from an identified developer." ("FirebaseCppApp-<version>.bundle" đã bị chặn sử dụng vì không phải do một nhà phát triển được xác định tạo ra).

Nhấp vào nút có nhãn Allow Anyway (Dù sao cũng cho phép).

c35166e224cce720.png

Quay lại Unity và 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:

5ad9ddb0d3a52892.png

Nhấn vào Open (Mở) và chương trình của bạn sẽ 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ệ

  1. Đảm bảo rằng 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 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ề cài đặt bản dựng Unity.
  2. Tải tệp cấu hình xuống cho ứng dụng của bạn (google-services.json cho Android hoặc GoogleService-Info.plist cho iOS) và tạo mục tiêu từ bảng điều khiển của Firebase trong Project Settings > Your Apps (Cài đặt dự án > Ứng dụng của bạn): Nếu bạn đã có các tệp này, hãy xoá chúng trong dự án của bạn và thay thế bằng phiên bản mới nhất, đảm bảo rằng chúng đượ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 được đính kèm vào tên tệp.
  3. Nếu bảng điều khiển chứa một thông báo liên quan đến các tệp trong Assets/StreamingAssets/, hãy đảm bảo rằng 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 ở đó
  4. Đảm bảo rằng 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 tệp 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ục Assets.
    • Kiểm tra xem Unity đã tạo google-services-desktop.json hay chưa.

Đả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

  1. Kiểm tra cả thư mục Assets/ và Trình quản lý gói Unity để đảm bảo rằng Firebase SDK và EDM4U được cài đặt riêng thông qua một trong hai phương thức.
  2. Một số trình bổ trợ do Google phát triển, chẳng hạn như Google Play và các 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 các gói Trình quản lý gói Unity (UPM). Đảm bảo chỉ có một bản sao của EDM4U trong dự án của bạn. Nếu bất kỳ gói UPM nào phụ thuộc vào EDM4U, thì tốt nhất là chỉ 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 Kho lưu trữ API 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.

  1. Nếu Firebase SDK được cài đặt thông qua .unitypackage, hãy kiểm tra xem tất cả các thư viện FirebaseCppApp trong Assets/Firebase/Plugins/x86_64/ đều ở cùng một phiên bản hay không.
  2. Nếu Firebase SDK được cài đặt thông qua Trình quản lý gói Unity (UPM), hãy mở Windows > Package Manager, tìm kiếm "Firebase" và đảm bảo rằng tất cả các gói Firebase đều ở cùng một phiên bản.
  3. Nếu dự án của bạn chứa nhiều phiên bản Firebase SDK, bạn nên xoá hoàn toàn tất cả các Firebase SDK trước khi cài đặt lại tất cả các Firebase SDK, lần này là với cùng một phiên bản. Cách đơn giản 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 bản dựng trình phân giải và 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 thích hợp mà bạn chọn), thì 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 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.

Vấn đề về "Single Dex" (Tệp DEX đơn) và thu nhỏ (Bắt buộc nếu sử dụng Cloud Firestore)

Trong khi tạo bản dựng ứ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 đơn. 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 .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. Một tệp DEX đơn bị giới hạn 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ả cá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ự 2 bước sau; chỉ bật multidex nếu tính năng thu nhỏ không giải quyết được vấn đề.

Bật tính năng thu nhỏ

Unity đã giới thiệu tính năng Thu nhỏ trong phiên bản 2017.2 để loại bỏ mã không dùng đến, có thể giảm tổng số phương thức được tham chiếu trong một tệp DEX đơn. * 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 > Thu nhỏ). * 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.

Bật multidex

Nếu sau khi bật tính năng thu nhỏ, số phương thức được tham chiếu vẫn vượt quá giới hạn, 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 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 bản dựng 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.

Tìm hiểu và khắc phục lỗi thời gian chạy 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 bản dựng và cài đặt trên thiết bị mục tiêu, nhưng bạn gặp phải lỗi thời gian chạy, hãy kiểm tra và điều tra 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 các 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 adbadb logcat cũng như cách sử dụng chúng.

  • 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 bạn cũng có thể xem xét các lựa chọn của logcat.
  • Một cách đơn giản để bắt đầu phiên ADB với một bảng ghi sạch là:

    adb logcat -c && adb logcat <OPTIONS>

    trong đó OPTIONS là bất kỳ cờ nào bạn truyền 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 thêm các công cụ tìm kiếm giúp đơn giản hoá việc tạo các tìm kiếm hiệu quả.

iOS

Kiểm tra nhật ký

Nếu đang chạy một 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 phải 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 liên quan đến các nhật ký đó.

Các bước tiếp theo

Nếu trò chơi của bạn vẫn gặp phải vấn đề về biên dịch, tạo bản dựng hoặc chạy liên quan đến Firebase, hãy điều tra trang vấn đề về Firebase SDK cho Unity và cân nhắc báo cáo một vấn đề mới. Ngoài ra, hãy tham khảo trang hỗ trợ Firebase để tìm hiểu về các lựa chọn bổ sung.