Golf2D/Assets/Appodeal/Editor/Utils/AppodealUnityUtils.cs
2023-12-06 14:51:43 +05:30

278 lines
11 KiB
C#

using UnityEditor;
using UnityEngine;
using System.Reflection;
using System;
using System.Collections.Generic;
using System.Xml;
using System.Text.RegularExpressions;
using System.IO;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
namespace AppodealAds.Unity.Editor.Utils
{
[SuppressMessage("ReSharper", "InconsistentNaming")]
[SuppressMessage("ReSharper", "ShiftExpressionRealShiftCountIsZero")]
[SuppressMessage("ReSharper", "ConditionIsAlwaysTrueOrFalse")]
public static class AppodealUnityUtils
{
private const string UNITY_ANDROID_VERSION_ENUM_PREFIX = "AndroidApiLevel";
private const BindingFlags PublicStaticFlags = BindingFlags.Public | BindingFlags.Static;
public const string KeySkAdNetworkItems = "SKAdNetworkItems";
public const string KeySkAdNetworkID = "SKAdNetworkIdentifier";
public const string GADApplicationIdentifier = "GADApplicationIdentifier";
public const string NSUserTrackingUsageDescriptionKey = "NSUserTrackingUsageDescription";
public const string NSUserTrackingUsageDescription = "This identifier will be used to deliver personalized ads to you";
public const string GADApplicationIdentifierDefaultKey = "ca-app-pub-3940256099942544~1458002511";
#region Optional Android Permissions
public const string CoarseLocation = "android.permission.ACCESS_COARSE_LOCATION";
public const string FineLocation = "android.permission.ACCESS_FINE_LOCATION";
public const string ExternalStorageWrite = "android.permission.WRITE_EXTERNAL_STORAGE";
public const string AccessWifiState = "android.permission.ACCESS_WIFI_STATE";
public const string Vibrate = "android.permission.VIBRATE";
#endregion
[Flags]
public enum AndroidArchitecture
{
invalid = 0,
armv7 = 1 << 0,
arm64 = 1 << 1,
x86 = 1 << 2,
}
public static string getApplicationId()
{
var appId = typeof(PlayerSettings).GetProperty("applicationIdentifier", PublicStaticFlags);
if (appId == null) appId = typeof(PlayerSettings).GetProperty("bundleIdentifier", PublicStaticFlags);
var bundleId = (string) appId?.GetValue(null, null);
return bundleId;
}
public static bool isGradleEnabled()
{
var isGradleEnabledVal = false;
var androidBuildSystem =
typeof(EditorUserBuildSettings).GetProperty("androidBuildSystem", PublicStaticFlags);
if (androidBuildSystem == null) return isGradleEnabledVal;
var gradle = Enum.Parse(androidBuildSystem.PropertyType, "Gradle");
isGradleEnabledVal = androidBuildSystem.GetValue(null, null).Equals(gradle);
return isGradleEnabledVal;
}
public static bool isGradleAvailable()
{
var androidBuildSystem =
typeof(EditorUserBuildSettings).GetProperty("androidBuildSystem", PublicStaticFlags);
return androidBuildSystem != null;
}
public static void enableGradleBuildSystem()
{
var androidBuildSystem =
typeof(EditorUserBuildSettings).GetProperty("androidBuildSystem", PublicStaticFlags);
if (androidBuildSystem == null) return;
var gradle = Enum.Parse(androidBuildSystem.PropertyType, "Gradle");
androidBuildSystem.SetValue(null, gradle, null);
}
public static string absolute2Relative(string absolutepath)
{
var relativepath = absolutepath;
if (absolutepath.StartsWith(Application.dataPath, StringComparison.Ordinal))
{
relativepath = "Assets" + absolutepath.Substring(Application.dataPath.Length);
}
return relativepath;
}
public static string relative2Absolute(string relativepath)
{
var absolutepath = relativepath;
if (!relativepath.StartsWith(Application.dataPath, StringComparison.Ordinal))
{
absolutepath = Application.dataPath + absolutepath.Substring("Assets".Length);
}
return absolutepath;
}
public static int getAndroidMinSDK()
{
var minSdkVersion = VersionFromAndroidSDKVersionsEnum(
PlayerSettings.Android.minSdkVersion.ToString());
return minSdkVersion;
}
public static int getAndroidTargetSDK()
{
var property = typeof(PlayerSettings.Android).GetProperty("targetSdkVersion");
var target = -1;
if (property != null)
target = VersionFromAndroidSDKVersionsEnum(Enum.GetName(property.PropertyType,
property.GetValue(null, null)));
if (target == -1)
target = GetLatestInstalledAndroidPlatformVersion();
return target;
}
private static int VersionFromAndroidSDKVersionsEnum(string enumName)
{
if (enumName.StartsWith(UNITY_ANDROID_VERSION_ENUM_PREFIX))
{
enumName = enumName.Substring(UNITY_ANDROID_VERSION_ENUM_PREFIX.Length);
}
if (enumName == "Auto")
{
return -1;
}
int versionVal;
int.TryParse(enumName, out versionVal);
return versionVal;
}
private static int GetLatestInstalledAndroidPlatformVersion()
{
var androidSDKPath = EditorPrefs.GetString("AndroidSdkRoot");
if (string.IsNullOrEmpty(androidSDKPath)) return -1;
var platforms = Directory.GetDirectories(Path.Combine(androidSDKPath, "platforms"), "*",
SearchOption.TopDirectoryOnly);
var buildToolsRegex = new Regex(@"android-(\d+)$", RegexOptions.Compiled);
return platforms
.Select(platform => buildToolsRegex.Match(platform))
.Select(match => int.Parse(match.Groups[1].Value))
.Concat(new[] {0}).Max();
}
public static AndroidArchitecture getAndroidArchitecture()
{
var targetArchitectures =
typeof(PlayerSettings.Android).GetProperty("targetArchitectures");
var arch = AndroidArchitecture.invalid;
if (targetArchitectures != null)
{
var armv7 = Enum.Parse(targetArchitectures.PropertyType, "ARMv7");
var armv7_int = (int) Convert.ChangeType(armv7, typeof(int));
var arm64 = Enum.Parse(targetArchitectures.PropertyType, "ARM64");
var arm64_int = (int) Convert.ChangeType(arm64, typeof(int));
var x64 = Enum.Parse(targetArchitectures.PropertyType, "X86");
var x64_int = (int) Convert.ChangeType(x64, typeof(int));
var currentArch = targetArchitectures.GetValue(null, null);
var currentArch_int = (int) Convert.ChangeType(currentArch, typeof(int));
if ((currentArch_int & armv7_int) == armv7_int) arch |= AndroidArchitecture.armv7;
if ((currentArch_int & arm64_int) == arm64_int) arch |= AndroidArchitecture.arm64;
if ((currentArch_int & x64_int) == x64_int) arch |= AndroidArchitecture.x86;
}
else
{
targetArchitectures = typeof(PlayerSettings.Android).GetProperty("targetDevice");
if (targetArchitectures == null) return arch;
var currentDevice = targetArchitectures.GetValue(null, null);
var armv7 = Enum.Parse(targetArchitectures.PropertyType, "ARMv7");
var x64 = Enum.Parse(targetArchitectures.PropertyType, "x86");
var fat = Enum.Parse(targetArchitectures.PropertyType, "FAT");
if (currentDevice.Equals(armv7)) arch = AndroidArchitecture.armv7;
else if (currentDevice.Equals(x64)) arch = AndroidArchitecture.x86;
else if (currentDevice.Equals(fat)) arch = AndroidArchitecture.armv7 | AndroidArchitecture.x86;
}
return arch;
}
public static string combinePaths(params string[] paths)
{
var result = paths[0];
for (var i = 1; i < paths.Length; i++)
{
result = Path.Combine(result, paths[i]);
}
return result;
}
public static int compareVersions(string v1, string v2)
{
var re = new Regex(@"\d+(\.\d+)+");
var match1 = re.Match(v1);
var match2 = re.Match(v2);
return new Version(match1.ToString()).CompareTo(new Version(match2.ToString()));
}
public static Texture2D makeColorTexture(int width, int height, Color color)
{
var colors = new Color [width * height];
for (var i = 0; i < colors.Length; ++i)
colors[i] = color;
var retval = new Texture2D(width, height);
retval.SetPixels(colors);
retval.Apply();
return retval;
}
public static XmlNode XmlFindChildNode(XmlNode parent, string name)
{
var curr = parent.FirstChild;
while (curr != null)
{
if (curr.Name.Equals(name))
{
return curr;
}
curr = curr.NextSibling;
}
return null;
}
public static XmlElement XmlCreateTag(XmlDocument doc, string tag)
{
var permissionElement = doc.CreateElement(tag);
return permissionElement;
}
public static string FixSlashesInPath(string path)
{
return path?.Replace('\\', '/');
}
public static string getXcodeVersion()
{
string profilerOutput = null;
try
{
var p = new Process
{
StartInfo = new ProcessStartInfo("system_profiler", "SPDeveloperToolsDataType | grep \"Xcode:\"")
{
CreateNoWindow = false, RedirectStandardOutput = true, UseShellExecute = false
}
};
p.Start();
p.WaitForExit();
profilerOutput = p.StandardOutput.ReadToEnd();
var re = new Regex(@"Xcode: (?<version>\d+(\.\d+)+)");
var m = re.Match(profilerOutput);
if (m.Success) profilerOutput = m.Groups["version"].Value;
}
catch (Exception e)
{
UnityEngine.Debug.LogError(e.Message);
}
return profilerOutput;
}
}
}