Khởi chạy thư viện và xác minh hoạt động

Trang này mô tả cách khởi chạy thư viện trong mã trò chơi và xác minh rằng thư viện đang tải dữ liệu lên Google Play. Để tìm thêm thông tin về các hàm thư viện cụ thể, hãy xem tài liệu tham khảo.

Khởi chạy thư viện

Trong phương thức khởi tạo ở đầu trò chơi, hãy khởi chạy thư viện bằng cách tạo bản sao cho AndroidPerformanceTuner và gọi phương thức Start():

using Google.Android.PerformanceTuner;
using UnityEngine;

public class SomeBehaviour : MonoBehaviour
{
    AndroidPerformanceTuner<FidelityParams, Annotation> tuner =
            new AndroidPerformanceTuner<FidelityParams, Annotation>();

    void Start()
    {
        ErrorCode startErrorCode = tuner.Start();
        Debug.Log("Android Performance Tuner started with code: " + startErrorCode);

        tuner.onReceiveUploadLog += request =>
        {
            Debug.Log("Telemetry uploaded with request name: " + request.name);
        };
    }
}

Mã này là đủ để bắt đầu Android Performance Tuner và đo lường trò chơi. Các câu lệnh nhật ký cho biết thời điểm Android Performance Tuner đã bắt đầu và khi dữ liệu đo từ xa được tải lên các API Google Play Console. Sau đó, bạn sẽ tìm thấy các câu lệnh này trong nhật ký để xác minh rằng trình bổ trợ đang hoạt động chính xác.

Khởi chạy trễ (chỉ Vulkan)

Nếu trò chơi của bạn hướng đến Vulkan và sử dụng Android Frame Pacing, thì Android Performance Tuner sẽ khởi chạy trễ:

IEnumerator Start()
{
    yield return new WaitForEndOfFrame();
    ErrorCode startErrorCode = tuner.Start();
    Debug.Log("Android Performance Tuner started with code: " + startErrorCode);

    tuner.onReceiveUploadLog += request =>
    {
        Debug.Log("Telemetry uploaded with request name: " + request.name);
    };
}

Xác minh khoảng thời gian giữa các lần tải dữ liệu đo từ xa lên

Khoảng thời gian mặc định giữa các lần tải dữ liệu đo từ xa lên trong chế độ cài đặt trình bổ trợ là 30 giây. Khoảng thời gian này được đặt thành khoảng ngắn để dễ dàng xác minh quá trình tải dữ liệu đo từ xa lên đúng cách. Khi bạn phát hành phiên bản chính thức của trò chơi, hãy đặt giá trị lớn cho khoảng thời gian này (ví dụ: sau mỗi 10 phút) để trò chơi không đưa ra quá nhiều yêu cầu cho các API. Điều này đặc biệt quan trọng đối với người dùng không có gói dữ liệu di động không giới hạn. Khoảng thời gian lớn cũng giúp tránh lạm dụng pin của thiết bị.

Để xác minh rằng khoảng thời gian được đặt thành 30 giây, hãy làm như sau:

  1. Chọn Google > Android Performance Tuner để truy cập chế độ cài đặt.
  2. Chọn thẻ Instrumentation Settings (Chế độ cài đặt khả năng đo lường) rồi nhấp vào Use advanced settings (Sử dụng chế độ cài đặt nâng cao).
  3. Xác minh rằng trường Intervals (minutes) (Khoảng thời gian (phút)) chứa giá trị 0.5.

Thẻ Instrumentation settings (Chế độ cài đặt khả năng đo lường) trong trình bổ trợ

Xác minh thao tác thích hợp

Nếu bạn đang sử dụng IL2CPP hoặc tính năng loại bỏ mã, hãy xem phần Quản lý tính năng loại bỏ mã.

Xây dựng trò chơi cho Android. Khi trò chơi đang khởi chạy trên một thiết bị, hãy mở một cửa sổ dòng lệnh trên máy tính và chạy adb logcat:

adb logcat

Ở đầu ra của adb logcat, hãy tìm "TuningFork" (vì Tuning Fork là tên nội bộ của thư viện):

02-03 16:55:45.103 10511 10536 I TuningFork: Got settings from tuningfork/tuningfork_settings.bin
02-03 16:55:45.103 10511 10536 I TuningFork: Using local file cache at /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:55:45.105 10511 10536 I TuningFork: OpenGL version 3.2
02-03 16:55:45.105 10511 10536 I TuningFork: TuningFork.GoogleEndpoint: OK
02-03 16:55:45.106 10511 10611 I TuningFork: Creating directory /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:55:45.106 10511 10536 I TuningFork: TuningFork Settings:

[...]

02-03 16:55:45.116 10511 10536 I Unity   : Tuningfork started with code: Ok
02-03 16:55:45.107 10511 10536 I TuningFork: TuningFork initialized
02-03 16:55:45.107 10511 10536 I UnityTuningfork: Swappy backend: 1
02-03 16:55:45.107 10511 10536 I TuningFork: Creating directory /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork/V1
02-03 16:55:45.110 10511 10613 I TuningFork: OpenGL version 3.2
02-03 16:55:45.110 10511 10613 I TuningFork:Web: Connecting to: https://performanceparameters.googleapis.com/v1/applications/com.Unity3d.BoatAttackDay/apks/1:generateTuningParameters

Nếu mắc lỗi khi thiết lập trình bổ trợ, chẳng hạn như quên đặt khoá API, bạn sẽ thấy lỗi trong nhật ký khởi chạy:

02-03 16:49:44.970  8815  8831 I TuningFork: Got settings from tuningfork/tuningfork_settings.bin
02-03 16:49:44.971  8815  8831 I TuningFork: Using local file cache at /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:49:44.972  8815  8831 I TuningFork: OpenGL version 3.2
02-03 16:49:44.972  8815  8831 W TuningFork.GE: The API key in Tuning Fork TFSettings is invalid
02-03 16:49:44.972  8815  8831 E TuningFork: TuningFork.GoogleEndpoint: FAILED
02-03 16:49:44.973  8815  8831 I Unity   : Tuningfork started with code: BadParameter

Kiểm tra để đảm bảo rằng Android Performance Tuner đang tải dữ liệu từ xa lên. Nếu bạn thấy TuningFork initialized trong nhật ký, hãy đợi thêm một chút và tìm nhật ký cho biết rằng dữ liệu đo từ xa đang được tải lên.

02-03 16:58:00.552 10511 10611 I TuningFork:Web: Connecting to: https://performanceparameters.googleapis.com/v1/applications/com.Unity3d.BoatAttackDay/apks/1:uploadTelemetry
02-03 16:58:00.898 10511 10611 I TuningFork:Web: Response code: 200
02-03 16:58:00.898 10511 10611 I TuningFork:Web: Response message: OK
02-03 16:58:00.899 10511 10611 I TuningFork.GE: UPLOAD request returned 200 {}

Bạn cũng có thể tìm kiếm "Connecting to:" (Kết nối với:) trong nhật ký. Mã phản hồi sẽ nằm sau thông báo này một vài dòng.

Nếu bạn không thấy nhật ký tải dữ liệu đo từ xa lên, hãy xác minh rằng bạn đặt một giá trị nhỏ, chẳng hạn như 30 giây, cho khoảng thời gian giữa mỗi lần tải lên trong chế độ cài đặt Android Performance Tuner.

Quản lý tính năng loại bỏ mã

Google.Protobuf.dll sử dụng sự phản chiếu. Trong quá trình loại bỏ mã, một số mã cần thiết có thể bị loại bỏ. Để tránh việc loại bỏ này, trình bổ trợ cũng bao gồm một tệp link.xml chứa thông tin về những ký hiệu nên được giữ lại. Nếu bạn cần một số chức năng của protobuf sử dụng sự phản chiếu và đã bật tính năng loại bỏ mã, hãy thêm thông tin này vào tệp link.xml để giữ nguyên các biểu tượng.

Bạn có thể đọc thêm về tính năng loại bỏ mã được quản lý trong tài liệu Unity.

Nếu bạn cần lưu giữ tất cả ký hiệu trong protobuf, hãy thêm tệp link.xml vào dự án chứa các nội dung sau:

<linker>
  <assembly fullname="Google.Protobuf" preserve="all"/>
</linker>

Biên dịch trước khi thực thi (AOT)

Phần phụ trợ IL2CPP và phiên bản Unity 2017 cũng như năm 2018 cần có tính năng biên dịch trước khi thực thi (nhưng các phiên bản Unity sau này thì không cần).

Trình biên dịch AOT không tạo được mã cho các phương thức chung. Bạn cần buộc trình biên dịch tạo mã thích hợp cần thiết cho protobuf bằng cách thêm phương thức sau:

using Google.Protobuf.Reflection;
using UnityEngine.Scripting;

...

// Don't call this method.
[Preserve]
void ExampleOfForceReflectionInitializationForProtobuf()
{
    FileDescriptor.ForceReflectionInitialization<Scene>();
    FileDescriptor.ForceReflectionInitialization<ShadowType>();
    FileDescriptor.ForceReflectionInitialization<LevelType>();
    ...
    // Add FileDescriptor.ForceReflectionInitialization<T> for each generated enum.
    // You can find the list of enums in DevTuningfork.cs -> enum section
    // or in the list of enums in Google -> Android Performance Tuner.
}

Bạn có thể đọc thêm về các hạn chế đối với tập lệnh trong tài liệu Unity.