VR4Medical/ICI/Library/PackageCache/com.unity.xr.management@20be87dea580/Editor/AndroidManifest/AndroidManifestBuildEventReceiver.cs
2025-07-29 13:45:50 +03:00

72 lines
2.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEditor.Android;
using UnityEditor.XR.Management;
using UnityEngine.XR.Management;
namespace Unity.XR.Management.AndroidManifest.Editor
{
/// <summary>
/// Class that receives the build event when building an Android Gradle project,
/// so the manifest element processing can be executed.
/// </summary>
internal class AndroidManifestBuildEventReceiver : IPostGenerateGradleAndroidProject
{
public int callbackOrder => 1;
public void OnPostGenerateGradleAndroidProject(string gradleProjectPath)
{
var processor = CreateManifestProcessor(gradleProjectPath);
var manifestProviders = GetManifestProviders();
processor.ProcessManifestRequirements(manifestProviders);
}
private AndroidManifestProcessor CreateManifestProcessor(string gradleProjectPath)
{
#if UNITY_2021_1_OR_NEWER
var xrManagementPackagePath = EditorUtilities.GetPackagePath("com.unity.xr.management");
var processor = new AndroidManifestProcessor(gradleProjectPath, xrManagementPackagePath, GetXRManagerSettings());
#if UNITY_2023_1_OR_NEWER
processor.UseActivityAppEntry = PlayerSettings.Android.applicationEntry.HasFlag(AndroidApplicationEntry.Activity);
processor.UseGameActivityAppEntry = PlayerSettings.Android.applicationEntry.HasFlag(AndroidApplicationEntry.GameActivity);
#endif
return processor;
#else
return new AndroidManifestProcessor(gradleProjectPath, GetXRManagerSettings());
#endif
}
/// <summary>
/// Finds all implementation of <see cref="IAndroidManifestRequirementProvider"/> in the assemblies,
/// and creates instances for each type into a single collection.
/// </summary>
/// <returns><see cref="System.Collections.Generic.List{T}"/> collection of <see cref="IAndroidManifestRequirementProvider"/> instances. All contained objects are unique.</returns>
private List<IAndroidManifestRequirementProvider> GetManifestProviders()
{
return TypeCache
.GetTypesDerivedFrom<IAndroidManifestRequirementProvider>()
.Where(type => !type.IsInterface && !type.IsAbstract && !type.IsNestedPrivate)
.Select(providerType => Activator.CreateInstance(providerType)) // Instantiate providers
.OfType<IAndroidManifestRequirementProvider>()
.Distinct()
.ToList();
}
private XRManagerSettings GetXRManagerSettings()
{
if (XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildTargetGroup.Android))
{
return XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildTargetGroup.Android).AssignedSettings;
}
return null;
}
}
}