Gỡ lỗi quá trình xây dựng, cài đặt và chạy trò chơi

Giới thiệu

Sau đây là hướng dẫn gỡ lỗi quá trình biên dịch và xây dựng cho trò chơi Unity bằng SDK Firebase cho Unity. Nó mô tả cách điều tra và giải quyết nhiều vấn đề phổ biến hơn mà bạn có thể gặp phải khi định cấu hình và xây dựng trò chơi của mình cho nền tảng mới hoặc sau khi cập nhật. Nó được sắp xếp theo thứ tự khi nào những lỗi này có thể xảy ra trong quá trình. Hãy tham khảo ý kiến ​​của họ theo thứ tự và tiến hành khi từng vấn đề đượ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.

Sự cố biên dịch Chế độ chơi

Loại sự cố xây dựng đầu tiên có thể xảy ra trong khi thử nghiệm trong trình chỉnh sửa trước khi bạn cố gắng bắt đầu xây dựng trên 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ế độ phát.

Khi Unity 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 nội dung khác, nó sẽ cố gắng xây dựng 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 các lỗi biên dịch vào bảng điều khiển và nếu bạn cố gắng vào Chế độ phát, bạn sẽ nhận được một cửa sổ bật lên lỗi trong tab Cảnh của Unity có nội dung All compiler errors have to be fixed before you can enter playmode! .

Thiếu loại, lớp, phương thức và thành viên

Nhiều sự cố Firebase xảy ra do trình soạn thảo và trình biên dịch không thể 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 phổ biến của điều này là các biến thể sau đây:

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:
  1. 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 rằng bạn cung cấp chúng 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.

    1. Ví dụ từ MechaHamster: Tăng cấp với phiên bản Firebase :
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. Xác minh rằng bạn đã nhập gói Firebase thích hợp:

    1. Để nhập các gói thích hợp:
      1. Thêm SDK Unity Firebase dưới dạng .unitypackage s hoặc
      2. Hãy xem xét và thực hiện một trong các lựa chọn thay thế trong các tùy chọn cài đặt Unity bổ sung .
    2. Đảm bảo rằng mọi sản phẩm Firebase trong dự án của bạn và EDM4U :
      • Có cùng phiên bản
      • Đã được cài đặt độc quyền dưới dạng .unitypackage HOẶC độc quyền thông qua Trình quản lý gói Unity.
  3. Nếu bạn đã nhập SDK Firebase Unity trước phiên bản "10.0.0" dưới dạng .unitypackage s thì kho lưu trữ zip Firebase Unity SDK 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 độ .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 Unity Editor và .NET Frameworks Levels được thảo luận trong phần Thêm Firebase vào dự án Unity của bạn .
    2. Nếu bạn vô tình nhập các gói Firebase của mình ở sai Cấp độ .NET Framework hoặc cần chuyển từ sử dụng .unitypackage sang một trong các tùy chọn cài đặt Unity bổ sung , cách rõ ràng nhất là xóa mọi gói Firebase thông qua các phương pháp được đề cập trong phần di chuyển này và sau đó nhập lại tất cả các gói Firebase.
  4. Kiểm tra xem trình soạn thảo của bạn có đang xây dựng lại dự án của bạn không và nỗ lực chơi của bạn có phản ánh trạng thái mới nhất của dự án hay không:

    1. Theo mặc định, trình chỉnh sửa Unity được đặt để xây dựng lại bất cứ khi nào phát hiện thấy thay đổi về nội dung hoặc cấu hình.
    2. Có thể chức năng này đã bị tắt và Unity Editor được đặt thành làm mới/biên dịch lại thủ công . Hãy điều tra vấn đề này và thử làm mới thủ công nếu đúng như vậy.

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

Nếu trò chơi của bạn bắt đầu nhưng gặp sự cố với Firebase khi đang chạy, hãy thử cách sau:

Đảm bảo rằng bạn phê duyệt các gói Firebase trong "Bảo mật và quyền riêng tư" trên Mac OS

Nếu khi khởi động trò chơi của bạn trong trình chỉnh sửa trên Mac OS, bạn thấy một đoạn hội thoại có nội dung "Không thể mở FirebaseCppApp-<version>.bundle vì không thể xác minh nhà phát triển.", bạn phải phê duyệt tệp gói cụ thể đó trong Menu Bảo mật & Quyền riêng tư của Mac.

Để làm như vậy, hãy nhấp vào Biểu tượng Apple > Tùy chọn hệ thống > Bảo mật & quyền riêng tư

Trong menu bảo mật, ở khoảng nửa trang, có một phần cho biết ""FirebaseCppApp-<version>.bundle" đã bị chặn sử dụng vì nó không phải của một nhà phát triển được xác định."

Nhấp vào nút có nhãn Cho phép Dù sao đi nữa .

c35166e224cce720.png

Quay lại Unity và nhấn Play lần nữa.

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 Open và chương trình của bạn sẽ có thể tiếp tục; bạn sẽ không được hỏi về tập tin cụ thể này nữa.

Đả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 cài đặt bản dựng của bạn được đặt cho mục tiêu bạn dự định (iOS hoặc Android) trong Tệp > Cài đặt bản dựng . Để có cuộc thảo luận đầy đủ hơn, hãy đọc Tài liệu cài đặt bản dựng Unity .
  2. Tải xuống tệp cấu hình cho ứng dụng của bạn ( google-services.json cho Android hoặc GoogleService-Info.plist cho iOS) và xây dựng mục tiêu từ bảng điều khiển Firebase trong 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 xóa chúng trong dự án của bạn và thay thế chúng bằng phiên bản mới nhất, đảm bảo rằng chúng được đánh vần chính xác như hiển thị ở trên mà không có "(1)" hoặc các số khác kèm theo tên tệp.
  3. 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 trên bảng điều khiển nào cho biết Unity không thể chỉnh sửa 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 nó không được tạo tự động và StreamingAssets/ không tồn tại, hãy tạo thư mục trong thư mục Assets theo cách thủ công.
    • Kiểm tra xem Unity hiện đã tạo google-services-desktop.json chưa.

Đảm bảo rằng mọi sản phẩm Firebase và EDM4U đều được cài đặt độc quyền 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 SDK Firebase và EDM4U đã được cài đặt riêng thông qua phương pháp này hoặc phương pháp kia.
  2. Một số plugin do Google phát triển , chẳng hạn như Google Play và plugin của bên thứ ba có thể phụ thuộc vào EDM4U. Các plugin đó có thể bao gồm EDM4U trong các gói .unitypackage hoặc Unity Package Manager (UPM) của chúng. Đảm bảo chỉ có một bản sao 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 chỉ giữ lại các phiên bản UPM của EDM4U, có thể tìm thấy trên trang Google APIs for Unity Archive .

Đảm bảo rằng mọi sản phẩm Firebase trong dự án của bạn đều có cùng một phiên bản.

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

Trình giải quyết và lỗi xây dựng thiết bị đích

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 xây 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ụ 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 lại và làm theo trước khi tiếp tục.

Các vấn đề về 'Single Dex' và thu nhỏ ( Bắt buộc nếu sử dụng Cloud Firestore)

Trong khi xây dựng ứng dụng Android, bạn có thể gặp phải lỗi xây dựng liên quan đến việc chỉ có một tệp dex. Thông báo lỗi trông tương tự 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 sử dụng để chứa một tập hợp các định nghĩa lớp và dữ liệu bổ trợ liên quan của chúng cho các ứng dụng Android. Một tệp dex duy nhất được giới hạn để tham chiếu đến 65.536 phương thức; cá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.

Hai bước sau đây có thể được áp dụng tuần tự; chỉ bật multidex nếu việc rút gọn không giải quyết được vấn đề.

Kích hoạt tính năng thu nhỏ

Unity đã giới thiệu Giảm thiểu vào năm 2017.2 để loại bỏ mã không sử dụng, điều 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 duy nhất. * Bạn có thể tìm thấy tùy chọn này trong Cài đặt trình phát > Android > Cài đặt xuất bản > Giảm thiểu . * Các tùy chọn có thể khác nhau ở các phiên bản Unity khác nhau, vì vậy hãy tham khảo tài liệu chính thức của Unity.

Kích hoạt Multidex

Nếu sau khi bật tính năng thu nhỏ, số lượng phương thức được tham chiếu vẫn vượt quá giới hạn, thì một tùy chọn khác là bật multidex . Có nhiều cách để đạt được điều này trong Unity:

  • Nếu Mẫu Gradle tùy chỉnh trong 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 để xây 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 chi tiết trong hướng dẫn sử dụng multidex .

Hiểu và sửa lỗi thời gian chạy của thiết bị đích

Nếu trò chơi của bạn hoạt động trong trình chỉnh sửa và có thể được xây dựng cũng như cài đặt vào thiết bị mục tiêu của bạn 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ý của bạn để tìm các lỗi có thể xảy ra và một lỗi như vậy chỉ xảy ra khi chạy trên thiết bị hoặc trình mô phỏng.

Android

Giả lập

  • Kiểm tra nhật ký được hiển thị trong bảng điều khiển Trình mô phỏng của bạn 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 các công cụ khác nhau trong môi trường dòng lệnh của mình để lọc đầu ra, nhưng hãy cân nhắc xem xét các tùy chọn của logcat theo cách khác.
  • Một cách đơn giản để bắt đầu một phiên họp của ADB một cách rõ ràng là:

    adb logcat -c && adb logcat <OPTIONS>
    

    trong đó OPTIONS là bất kỳ cờ nào bạn chuyể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 , các công cụ tìm kiếm bổ sung có sẵn giúp việc tạo tìm kiếm hiệu quả trở nên đơn giản hơn.

iOS

Kiểm tra nhật ký

Nếu chạy một thiết bị vật lý, hãy gắn nó vào máy tính của bạn. Kiểm tra lldb trong Xcode.

Sự cố 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ụ thuộc bên ngoài cho Unity về chúng.

Các bước tiếp theo

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