Melakukan inisialisasi library dan memverifikasi operasi

Halaman ini menjelaskan cara menginisialisasi library dalam kode game Anda dan memverifikasi bahwa library ini mengupload data ke Google Play. Untuk mengetahui informasi selengkapnya tentang fungsi library tertentu, lihat dokumentasi referensi.

Melakukan inisialisasi library

Dalam metode inisialisasi di awal game, lakukan inisialisasi library dengan membuat instance AndroidPerformanceTuner dan memanggil metode 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);
        };
    }
}

Kode ini sudah cukup untuk memulai Android Performance Tuner dan menjalankan game Anda. Laporan log menunjukkan kapan Android Performance Tuner dimulai dan saat telemetri telah diupload ke API Konsol Google Play. Kemudian, Anda akan menemukan laporan ini di log untuk memverifikasi bahwa plugin beroperasi dengan benar.

Inisialisasi terlambat (khusus Vulkan)

Jika game Anda menargetkan Vulkan dan menggunakan Android Frame Pacing, Android Performance Tuner akan mengalami inisialisasi terlambat:

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);
    };
}

Memverifikasi interval di antara upload telemetri

Interval default di antara upload telemetri dalam setelan plugin adalah 30 detik. Waktu ini disetel ke interval pendek untuk mempermudah verifikasi upload telemetri yang tepat. Saat merilis game ke produksi, setel ini ke interval yang besar (misalnya, setiap 10 menit) sehingga game tidak membuat terlalu banyak permintaan ke API, yang sangat penting bagi pengguna yang tidak memiliki paket data seluler yang mencakup data tak terbatas. Interval yang besar juga menghindari penggunaan baterai perangkat secara berlebihan.

Untuk memverifikasi bahwa interval disetel ke 30 detik, lakukan langkah berikut:

  1. Pilih Google > Android Performance Tuner untuk mengakses setelan.
  2. Pilih tab Setelan Instrumentasi dan klik Gunakan setelan lanjutan.
  3. Verifikasi kolom Interval (menit) berisi 0,5.

Tab Setelan instrumentasi di plugin

Memverifikasi operasi yang tepat

Jika Anda menggunakan IL2PP atau penghapusan kode, lihat Mengelola penghapusan kode.

Buat game untuk Android. Saat game Anda diluncurkan di perangkat, buka terminal di komputer dan luncurkan adb logcat:

adb logcat

Pada output adb logcat, telusuri "TuningFork" (karena Tuning Fork adalah nama internal library):

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

Jika membuat kesalahan saat menyiapkan plugin, seperti lupa menyetel kunci API, Anda akan melihat error dalam log inisialisasi:

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

Periksa apakah Android Performance Tuner mengupload telemetri. Jika melihat TuningFork initialized di log, tunggu sesaat dan cari log yang menunjukkan bahwa telemetri sedang diupload.

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 {}

Anda juga dapat menelusuri "Connecting to:" di log. Pesan ini diikuti dengan kode respons beberapa baris setelahnya.

Jika Anda tidak melihat log upload telemetri, pastikan Anda telah menyetel interval antara upload dalam setelan Android Performance Tuner ke nilai kecil, seperti 30 detik.

Mengelola penghapusan kode

Google.Protobuf.dll menggunakan refleksi. Selama penghapusan kode, beberapa kode yang diperlukan dapat dihapus. Untuk menghindari penghapusan ini, plugin berisi file link.xml dengan informasi simbol mana yang harus dipertahankan. Jika memerlukan beberapa fungsi protobuf yang menggunakan refleksi dan penghapusan kode dalam posisi aktif, tambahkan informasi ini ke dalam file link.xml untuk mempertahankan simbol.

Anda dapat membaca lebih lanjut tentang penghapusan kode terkelola di dokumentasi Unity.

Jika perlu mempertahankan semua simbol di protobuf, tambahkan file link.xml ke project Anda yang berisi hal berikut:

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

Kompilasi ahead-of-time (AOT)

Kompilasi ahead-of-time diperlukan untuk backend IL2CPP dan Unity versi 2017 dan 2018 (tetapi bukan untuk Unity versi terbaru).

Compiler AOT mungkin tidak menghasilkan kode untuk metode generik. Anda harus memaksa compiler untuk membuat kode tepat yang diperlukan untuk protobuf dengan menambahkan metode berikut:

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.
}

Anda dapat membaca lebih lanjut tentang pembatasan pembuatan skrip di dokumentasi Unity.