191 lines
7.1 KiB
C#
191 lines
7.1 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT license.
|
|
|
|
using Microsoft.AppCenter.Unity;
|
|
using System;
|
|
using System.IO;
|
|
using UnityEditor;
|
|
using UnityEditor.Build;
|
|
using UnityEditor.Build.Reporting;
|
|
using UnityEngine;
|
|
|
|
public class AppCenterPreBuild : IPreprocessBuildWithReport
|
|
{
|
|
private const string AarFilePattern = "appcenter-{0}-release";
|
|
public int callbackOrder { get { return 0; } }
|
|
#if UNITY_WSA
|
|
private readonly Version RequiredMinimalUWPVersion = new Version("10.0.16299.0");
|
|
#endif
|
|
|
|
public void OnPreprocessBuild(BuildReport report)
|
|
{
|
|
OnPreprocessBuild(report.summary.platform, report.summary.outputPath);
|
|
}
|
|
|
|
public void OnPreprocessBuild(BuildTarget target, string path)
|
|
{
|
|
if (target == BuildTarget.Android)
|
|
{
|
|
#if !APPCENTER_DONT_USE_NATIVE_STARTER
|
|
var settingsMaker = new AppCenterSettingsMakerAndroid();
|
|
AddStartupCode(settingsMaker);
|
|
#if UNITY_ANDROID
|
|
AddSettingsFileToLoader(settingsMaker);
|
|
#endif
|
|
#endif
|
|
}
|
|
else if (target == BuildTarget.iOS)
|
|
{
|
|
#if !APPCENTER_DONT_USE_NATIVE_STARTER
|
|
AddStartupCode(new AppCenterSettingsMakerIos());
|
|
#endif
|
|
}
|
|
else if (target == BuildTarget.WSAPlayer)
|
|
{
|
|
#if UNITY_WSA
|
|
var currentMinimalPlatformVersion = new Version(EditorUserBuildSettings.wsaMinUWPSDK);
|
|
if (currentMinimalPlatformVersion < RequiredMinimalUWPVersion)
|
|
{
|
|
Debug.LogWarning($"Minimum platform version should be set to {RequiredMinimalUWPVersion} or higher. App Center does not support lower versions but it is set to {currentMinimalPlatformVersion}");
|
|
}
|
|
#endif
|
|
}
|
|
if (target == BuildTarget.Android)
|
|
{
|
|
// No linking/unlinking in case module isn't added.
|
|
if (AppCenter.Distribute != null)
|
|
{
|
|
LinkModule(AppCenterSettingsContext.SettingsInstance.UseDistribute, "distribute");
|
|
}
|
|
if (AppCenter.Analytics != null)
|
|
{
|
|
LinkModule(AppCenterSettingsContext.SettingsInstance.UseAnalytics, "analytics");
|
|
}
|
|
if (AppCenter.Crashes != null)
|
|
{
|
|
LinkModule(AppCenterSettingsContext.SettingsInstance.UseCrashes, "crashes");
|
|
}
|
|
}
|
|
}
|
|
|
|
#if UNITY_ANDROID
|
|
public static void AddSettingsFileToLoader(AppCenterSettingsMakerAndroid settingsMaker)
|
|
{
|
|
var loaderZipFile = AppCenterSettingsContext.AppCenterPath + "/Plugins/Android/appcenter-loader-release.aar";
|
|
const string loaderFolder = "appcenter-loader-release";
|
|
const string settingsFilePath = loaderFolder + "/res/values/appcenter-settings.xml";
|
|
const string settingsMetaFilePath = loaderFolder + "/res/values/appcenter-settings.xml.meta";
|
|
|
|
if (!File.Exists(loaderZipFile))
|
|
{
|
|
throw new IOException("Failed to load dependency file appcenter-loader-release.aar");
|
|
}
|
|
|
|
// Delete unzipped directory if it already exists.
|
|
if (Directory.Exists(loaderFolder))
|
|
{
|
|
Directory.Delete(loaderFolder, true);
|
|
}
|
|
|
|
AndroidLibraryHelper.UnzipFile(loaderZipFile, loaderFolder);
|
|
if (!Directory.Exists(loaderFolder))
|
|
{
|
|
throw new IOException("Unzipping loader folder failed.");
|
|
}
|
|
|
|
settingsMaker.CommitSettings(settingsFilePath);
|
|
|
|
// Delete the appcenter-settings.xml.meta file if generated.
|
|
if (File.Exists(settingsMetaFilePath))
|
|
{
|
|
File.Delete(settingsMetaFilePath);
|
|
}
|
|
|
|
// Delete the original aar file and zipped the extracted folder to generate a new one.
|
|
File.Delete(loaderZipFile);
|
|
AndroidLibraryHelper.ZipFile(loaderFolder, loaderZipFile);
|
|
Directory.Delete(loaderFolder, true);
|
|
}
|
|
#endif
|
|
|
|
private void AddStartupCode(IAppCenterSettingsMaker settingsMaker)
|
|
{
|
|
var settings = AppCenterSettingsContext.SettingsInstance;
|
|
var advancedSettings = AppCenterSettingsContext.SettingsInstanceAdvanced;
|
|
settingsMaker.SetAppSecret(settings);
|
|
settingsMaker.SetLogLevel((int)settings.InitialLogLevel);
|
|
settingsMaker.IsAllowNetworkRequests((bool)settings.AllowNetworkRequests);
|
|
if (settings.CustomLogUrl.UseCustomUrl)
|
|
{
|
|
settingsMaker.SetLogUrl(settings.CustomLogUrl.Url);
|
|
}
|
|
if (settings.MaxStorageSize.UseCustomMaxStorageSize && settings.MaxStorageSize.Size > 0)
|
|
{
|
|
settingsMaker.SetMaxStorageSize(settings.MaxStorageSize.Size);
|
|
}
|
|
if (settings.UseAnalytics && settingsMaker.IsAnalyticsAvailable())
|
|
{
|
|
settingsMaker.StartAnalyticsClass();
|
|
}
|
|
if (settings.UseCrashes && settingsMaker.IsCrashesAvailable())
|
|
{
|
|
settingsMaker.StartCrashesClass();
|
|
}
|
|
if (settings.UseDistribute && settingsMaker.IsDistributeAvailable())
|
|
{
|
|
if (settings.CustomApiUrl.UseCustomUrl)
|
|
{
|
|
settingsMaker.SetApiUrl(settings.CustomApiUrl.Url);
|
|
}
|
|
if (settings.CustomInstallUrl.UseCustomUrl)
|
|
{
|
|
settingsMaker.SetInstallUrl(settings.CustomInstallUrl.Url);
|
|
}
|
|
if (settings.EnableDistributeForDebuggableBuild)
|
|
{
|
|
settingsMaker.SetShouldEnableDistributeForDebuggableBuild();
|
|
}
|
|
if (!settings.AutomaticCheckForUpdate)
|
|
{
|
|
settingsMaker.SetDistributeDisableAutomaticCheckForUpdate();
|
|
}
|
|
settingsMaker.SetUpdateTrack(settings.UpdateTrack);
|
|
settingsMaker.StartDistributeClass();
|
|
}
|
|
if (advancedSettings != null)
|
|
{
|
|
var startupType = settingsMaker.IsStartFromAppCenterBehavior(advancedSettings) ? StartupType.Skip : advancedSettings.GetStartupType();
|
|
settingsMaker.SetStartupType((int)startupType);
|
|
settingsMaker.SetTransmissionTargetToken(advancedSettings.TransmissionTargetToken);
|
|
}
|
|
else
|
|
{
|
|
settingsMaker.SetStartupType((int)StartupType.AppCenter);
|
|
}
|
|
settingsMaker.CommitSettings();
|
|
}
|
|
|
|
#region Android Methods
|
|
|
|
private static void LinkModule(bool isEnabled, string moduleName)
|
|
{
|
|
var aarName = string.Format(AarFilePattern, moduleName);
|
|
var aarFileAsset = AssetDatabase.FindAssets(aarName, new[] { AppCenterSettingsContext.AppCenterPath + "/Plugins/Android" });
|
|
if (aarFileAsset.Length == 0)
|
|
{
|
|
Debug.LogWarning("Failed to link " + moduleName + ", file `" + aarName + "` is not found");
|
|
return;
|
|
}
|
|
var assetPath = AssetDatabase.GUIDToAssetPath(aarFileAsset[0]);
|
|
var importer = AssetImporter.GetAtPath(assetPath) as PluginImporter;
|
|
if (importer != null)
|
|
{
|
|
Debug.Log (moduleName + " is " + (isEnabled ? "" : "not ") + "enabled. " +
|
|
(isEnabled ? "Linking " : "Unlinking ") + aarName);
|
|
importer.SetCompatibleWithPlatform(BuildTarget.Android, isEnabled);
|
|
importer.SaveAndReimport();
|
|
}
|
|
}
|
|
#endregion
|
|
}
|