PermissionsDemoBuildProcessor.cs
6.6 KB
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
//-----------------------------------------------------------------------
// <copyright file="PermissionsDemoBuildProcessor.cs" company="Google Inc.">
// Copyright 2017 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>
//-----------------------------------------------------------------------
// Only invoke custom build processor when building for Android.
#if UNITY_ANDROID
namespace GoogleVR.Demos
{
using System;
using UnityEditor;
using UnityEditor.Build;
#if UNITY_2018_1_OR_NEWER
using UnityEditor.Build.Reporting;
#endif
using UnityEditorInternal.VR;
#if UNITY_2018_1_OR_NEWER
internal class PermissionsDemoBuildProcessor
: IPreprocessBuildWithReport, IPostprocessBuildWithReport
#else
internal class PermissionsDemoBuildProcessor : IPreprocessBuild, IPostprocessBuild
#endif
{
private const string SCENE_NAME_PERMISSIONS_DEMO = "PermissionsDemo";
private bool cardboardAddedFromCode = false;
public int callbackOrder
{
get { return 0; }
}
#if UNITY_2018_1_OR_NEWER
public void OnPreprocessBuild(BuildReport report)
{
OnPreprocessBuild(report.summary.platform, report.summary.outputPath);
}
#endif
/// <summary>A build preprocess operation for this module.</summary>
/// <remarks><para>
/// OnPreprocessBuild() is called right before the build process begins. If it detects that
/// the first enabled scene in the build arrays is the PermissionsDemo, and Daydream is in
/// the VR SDKs, it will add Cardboard to the VR SDKs. This is done because the
/// PermissionsDemo needs a perm statement in the Manifest. Other demos do not need this.
/// </para><para>
/// Adding Cardboard to VR SDKs will merge in the Manifest-Cardboard which has perm
/// statement in it.
/// </para></remarks>
/// <param name="target">The BuildTarget to build.</param>
/// <param name="path">The path to the BuildTarget.</param>
public void OnPreprocessBuild(BuildTarget target, string path)
{
cardboardAddedFromCode = false;
string[] androidVrSDKs =
VREditor.GetVREnabledDevicesOnTargetGroup(BuildTargetGroup.Android);
EditorBuildSettingsScene[] scenes = EditorBuildSettings.scenes;
// See if PermissionsDemo is the first enabled scene in the array of scenes to build.
for (int i = 0; i < scenes.Length; i++)
{
if (scenes[i].path.Contains(SCENE_NAME_PERMISSIONS_DEMO))
{
if (!scenes[i].enabled)
{
return;
}
else
{
break;
}
}
else
{
if (scenes[i].enabled)
{
return;
}
}
}
bool hasCardboard = Array.Exists<string>(androidVrSDKs,
element => element.Equals(GvrSettings.VR_SDK_CARDBOARD));
if (hasCardboard)
{
return;
}
bool hasDaydream = Array.Exists<string>(androidVrSDKs,
element => element.Equals(GvrSettings.VR_SDK_DAYDREAM));
if (!hasDaydream)
{
return;
}
string[] androidVrSDKsAppended = new string[androidVrSDKs.Length + 1];
for (int i = 0; i < androidVrSDKs.Length; i++)
{
androidVrSDKsAppended[i] = androidVrSDKs[i];
}
androidVrSDKsAppended[androidVrSDKsAppended.Length - 1] = GvrSettings.VR_SDK_CARDBOARD;
VREditor.SetVREnabledOnTargetGroup(
BuildTargetGroup.Android, true);
VREditor.SetVREnabledDevicesOnTargetGroup(
BuildTargetGroup.Android,
androidVrSDKsAppended);
cardboardAddedFromCode = true;
}
#if UNITY_2018_1_OR_NEWER
/// @cond
/// <summary>A build postprocess operation for this module.</summary>
/// <param name="report">A report of the completed build.</param>
public void OnPostprocessBuild(BuildReport report)
{
OnPostprocessBuild(report.summary.platform, report.summary.outputPath);
}
/// @endcond
#endif
/// @cond
/// <summary>A build postprocess operation for this module.</summary>
/// <remarks>
/// OnPostprocessBuild() is called after the build process. It does appropriate cleanup
/// so that this script only affects build process for PermissionsDemo, not others.
/// </remarks>
/// <param name="target">The BuildTarget to run postprocess operations on.</param>
/// <param name="path">The path to the BuildTarget.</param>
public void OnPostprocessBuild(BuildTarget target, string path)
{
if (!cardboardAddedFromCode)
{
return;
}
string[] androidVrSDKs =
VREditor.GetVREnabledDevicesOnTargetGroup(BuildTargetGroup.Android);
// The enabled devices are modified somehow, which shouldn't happen. Abort the
// post-build process.
if (androidVrSDKs.Length == 0 ||
androidVrSDKs[androidVrSDKs.Length - 1] != GvrSettings.VR_SDK_CARDBOARD)
{
return;
}
string[] androidVrSDKsShortened = new string[androidVrSDKs.Length - 1];
for (int i = 0; i < androidVrSDKsShortened.Length; i++)
{
androidVrSDKsShortened[i] = androidVrSDKs[i];
}
VREditor.SetVREnabledOnTargetGroup(
BuildTargetGroup.Android, true);
VREditor.SetVREnabledDevicesOnTargetGroup(
BuildTargetGroup.Android,
androidVrSDKsShortened);
cardboardAddedFromCode = false;
}
/// @endcond
}
}
#endif // UNITY_ANDROID