1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
//-----------------------------------------------------------------------
// <copyright file="AssemblyImportSettingsAutomation.cs" company="Sirenix IVS">
// Copyright (c) Sirenix IVS. All rights reserved.
// </copyright>
//-----------------------------------------------------------------------
#if UNITY_EDITOR && UNITY_5_6_OR_NEWER
namespace Sirenix.OdinInspector.Editor
{
using System.IO;
using System.Collections.Generic;
using Sirenix.Serialization.Utilities.Editor;
using Sirenix.Utilities;
using UnityEditor;
using UnityEditor.Build;
#if UNITY_2018_1_OR_NEWER
using UnityEditor.Build.Reporting;
#endif
public class AssemblyImportSettingsAutomation :
#if UNITY_2018_1_OR_NEWER
IPreprocessBuildWithReport
#else
IPreprocessBuild
#endif
{
public int callbackOrder { get { return -1500; } }
private static void ConfigureImportSettings()
{
if (EditorOnlyModeConfig.Instance.IsEditorOnlyModeEnabled() || ImportSettingsConfig.Instance.AutomateBeforeBuild == false)
{
return;
}
var assemblyDir = new DirectoryInfo(SirenixAssetPaths.SirenixAssembliesPath).FullName;
var projectAssetsPath = Directory.GetCurrentDirectory().TrimEnd('\\', '/');
var isPackage = PathUtilities.HasSubDirectory(new DirectoryInfo(projectAssetsPath), new DirectoryInfo(assemblyDir)) == false;
var aotDirPath = assemblyDir + "NoEmitAndNoEditor/";
var jitDirPath = assemblyDir + "NoEditor/";
var aotDir = new DirectoryInfo(aotDirPath);
var jitDir = new DirectoryInfo(jitDirPath);
var aotAssemblies = new List<string>();
var jitAssemblies = new List<string>();
foreach (var file in aotDir.GetFiles("*.dll"))
{
string path = file.FullName;
if (isPackage)
{
path = SirenixAssetPaths.SirenixAssembliesPath.TrimEnd('\\', '/') + "/" + path.Substring(assemblyDir.Length);
}
else
{
path = path.Substring(projectAssetsPath.Length + 1);
}
aotAssemblies.Add(path);
}
foreach (var file in jitDir.GetFiles("*.dll"))
{
string path = file.FullName;
if (isPackage)
{
path = SirenixAssetPaths.SirenixAssembliesPath.TrimEnd('\\', '/') + "/" + path.Substring(assemblyDir.Length);
}
else
{
path = path.Substring(projectAssetsPath.Length + 1);
}
jitAssemblies.Add(path);
}
AssetDatabase.StartAssetEditing();
try
{
var platform = EditorUserBuildSettings.activeBuildTarget;
if (AssemblyImportSettingsUtilities.IsJITSupported(
platform,
AssemblyImportSettingsUtilities.GetCurrentScriptingBackend(),
AssemblyImportSettingsUtilities.GetCurrentApiCompatibilityLevel()))
{
ApplyImportSettings(platform, aotAssemblies.ToArray(), OdinAssemblyImportSettings.ExcludeFromAll);
ApplyImportSettings(platform, jitAssemblies.ToArray(), OdinAssemblyImportSettings.IncludeInBuildOnly);
}
else
{
ApplyImportSettings(platform, aotAssemblies.ToArray(), OdinAssemblyImportSettings.IncludeInBuildOnly);
ApplyImportSettings(platform, jitAssemblies.ToArray(), OdinAssemblyImportSettings.ExcludeFromAll);
}
}
finally
{
AssetDatabase.StopAssetEditing();
}
}
private static void ApplyImportSettings(BuildTarget platform, string[] assemblyPaths, OdinAssemblyImportSettings importSettings)
{
for (int i = 0; i < assemblyPaths.Length; i++)
{
AssemblyImportSettingsUtilities.SetAssemblyImportSettings(platform, assemblyPaths[i], importSettings);
}
}
#if UNITY_2018_1_OR_NEWER
void IPreprocessBuildWithReport.OnPreprocessBuild(BuildReport report)
{
ConfigureImportSettings();
}
#else
void IPreprocessBuild.OnPreprocessBuild(BuildTarget target, string path)
{
ConfigureImportSettings();
}
#endif
}
}
#endif // UNITY_EDITOR && UNITY_5_6_OR_NEWER
|