#region copyright // ------------------------------------------------------- // Copyright (C) Dmitriy Yukhanov [https://codestage.net] // ------------------------------------------------------- #endregion #if UNITY_ANDROID using System; using CodeStage.AntiCheat.Common; using UnityEngine; namespace CodeStage.AntiCheat.Utils { internal static class AndroidRoutines { private const string RoutinesClassPath = "net.codestage.actk.androidnative.ACTkAndroidRoutines"; private static readonly Lazy RoutinesClass = new Lazy(InitJavaClass); public static long GetSystemNanoTime() { return RoutinesClass.Value?.CallStatic("GetSystemNanoTime") ?? DateTime.UtcNow.Ticks; } public static string GetPackageInstallerName() { return RoutinesClass.Value?.CallStatic("GetPackageInstallerName"); } private static AndroidJavaClass InitJavaClass() { try { return new AndroidJavaClass(RoutinesClassPath); } catch (Exception e) { ACTk.PrintExceptionForSupport($"Couldn't create instance of the {nameof(AndroidJavaClass)}: {RoutinesClassPath}!\n" + "Please make sure you are not obfuscating public ACTk's Java Plugin classes.", e); } return null; } } } #endif