3
3
using System . Linq ;
4
4
using System . Text . RegularExpressions ;
5
5
using UnityEditor ;
6
+ using UnityEditor . Build ;
6
7
using UnityEngine ;
7
8
using Application = UnityEngine . Application ;
8
9
using BuildResult = UnityEditor . Build . Reporting . BuildResult ;
@@ -32,27 +33,18 @@ public class Build : EditorWindow
32
33
public static void DoBuildAndroidLibraryDebug ( )
33
34
{
34
35
DoBuildAndroid ( Path . Combine ( APKPath , "unityLibrary" ) , false , false ) ;
35
-
36
- // Copy over resources from the launcher module that are used by the library
37
- Copy ( Path . Combine ( APKPath + "/launcher/src/main/res" ) , Path . Combine ( AndroidExportPath , "src/main/res" ) ) ;
38
36
}
39
37
40
38
[ MenuItem ( "Flutter/Export Android (Release) %&m" , false , 102 ) ]
41
39
public static void DoBuildAndroidLibraryRelease ( )
42
40
{
43
41
DoBuildAndroid ( Path . Combine ( APKPath , "unityLibrary" ) , false , true ) ;
44
-
45
- // Copy over resources from the launcher module that are used by the library
46
- Copy ( Path . Combine ( APKPath + "/launcher/src/main/res" ) , Path . Combine ( AndroidExportPath , "src/main/res" ) ) ;
47
42
}
48
43
49
44
[ MenuItem ( "Flutter/Export Android Plugin %&p" , false , 103 ) ]
50
45
public static void DoBuildAndroidPlugin ( )
51
46
{
52
47
DoBuildAndroid ( Path . Combine ( APKPath , "unityLibrary" ) , true , true ) ;
53
-
54
- // Copy over resources from the launcher module that are used by the library
55
- Copy ( Path . Combine ( APKPath + "/launcher/src/main/res" ) , Path . Combine ( AndroidExportPath , "src/main/res" ) ) ;
56
48
}
57
49
58
50
[ MenuItem ( "Flutter/Export IOS (Debug) %&i" , false , 201 ) ]
@@ -154,6 +146,11 @@ private static void BuildWindowsOS(String path)
154
146
155
147
private static void BuildWebGL ( String path )
156
148
{
149
+ // Check if the Unity project is in the expected location
150
+ if ( ! IsProjectLocationValid ( path , "web" ) ) {
151
+ return ;
152
+ }
153
+
157
154
// Switch to Android standalone build.
158
155
EditorUserBuildSettings . SwitchActiveBuildTarget ( BuildTargetGroup . Android , BuildTarget . Android ) ;
159
156
@@ -187,6 +184,11 @@ private static void BuildWebGL(String path)
187
184
188
185
private static void DoBuildAndroid ( String buildPath , bool isPlugin , bool isReleaseBuild )
189
186
{
187
+ // Check if the Unity project is in the expected location
188
+ if ( ! IsProjectLocationValid ( AndroidExportPath , "android" ) ) {
189
+ return ;
190
+ }
191
+
190
192
// Switch to Android standalone build.
191
193
EditorUserBuildSettings . SwitchActiveBuildTarget ( BuildTargetGroup . Android , BuildTarget . Android ) ;
192
194
@@ -213,10 +215,10 @@ private static void DoBuildAndroid(String buildPath, bool isPlugin, bool isRelea
213
215
PlayerSettings . SetIl2CppCodeGeneration ( UnityEditor . Build . NamedBuildTarget . Android , UnityEditor . Build . Il2CppCodeGeneration . OptimizeSize ) ;
214
216
#elif UNITY_2022_1_OR_NEWER
215
217
PlayerSettings . SetIl2CppCompilerConfiguration ( BuildTargetGroup . Android , isReleaseBuild ? Il2CppCompilerConfiguration . Release : Il2CppCompilerConfiguration . Debug ) ;
216
- PlayerSettings . SetIl2CppCodeGeneration ( UnityEditor . Build . NamedBuildTarget . Android , UnityEditor . Build . Il2CppCodeGeneration . OptimizeSize ) ;
218
+ PlayerSettings . SetIl2CppCodeGeneration ( NamedBuildTarget . Android , isReleaseBuild ? Il2CppCodeGeneration . OptimizeSpeed : Il2CppCodeGeneration . OptimizeSize ) ;
217
219
#elif UNITY_2021_2_OR_NEWER
218
220
PlayerSettings . SetIl2CppCompilerConfiguration ( BuildTargetGroup . Android , isReleaseBuild ? Il2CppCompilerConfiguration . Release : Il2CppCompilerConfiguration . Debug ) ;
219
- EditorUserBuildSettings . il2CppCodeGeneration = UnityEditor . Build . Il2CppCodeGeneration . OptimizeSize ;
221
+ EditorUserBuildSettings . il2CppCodeGeneration = isReleaseBuild ? Il2CppCodeGeneration . OptimizeSpeed : Il2CppCodeGeneration . OptimizeSize ;
220
222
#endif
221
223
222
224
@@ -256,6 +258,9 @@ private static void DoBuildAndroid(String buildPath, bool isPlugin, bool isRelea
256
258
SetupAndroidProject ( ) ;
257
259
}
258
260
261
+ // Copy over resources from the launcher module that are used by the library, Avoid deleting the existing src/main/res contents.
262
+ Copy ( Path . Combine ( APKPath + "/launcher/src/main/res" ) , Path . Combine ( AndroidExportPath , "src/main/res" ) , false ) ;
263
+
259
264
if ( isReleaseBuild ) {
260
265
Debug . Log ( $ "-- Android Release Build: SUCCESSFUL --") ;
261
266
} else
@@ -299,7 +304,7 @@ private static void ModifyWebGLExport()
299
304
});
300
305
301
306
window.parent.addEventListener('unityFlutterBidingFnCal', function (args) {
302
- mainUnityInstance.SendMessage('GameManager', 'HandleWebFnCall', args);
307
+ mainUnityInstance.SendMessage('GameManager', 'HandleWebFnCall', args.data );
303
308
});
304
309
" ) ;
305
310
@@ -348,7 +353,8 @@ private static void ModifyAndroidGradle(bool isPlugin)
348
353
buildText = buildText . Replace ( "enableSplit = true" , "enable true" ) ;
349
354
buildText = buildText . Replace ( "implementation fileTree(dir: 'libs', include: ['*.jar'])" , "implementation(name: 'unity-classes', ext:'jar')" ) ;
350
355
buildText = buildText . Replace ( " + unityStreamingAssets.tokenize(', ')" , "" ) ;
351
- buildText = Regex . Replace ( buildText , "ndkPath \" .*\" " , "" ) ;
356
+ // disable the Unity ndk path as it will conflict with Flutter.
357
+ buildText = buildText . Replace ( "ndkPath \" " , "// ndkPath \" " ) ;
352
358
353
359
// Untiy 6000, handle ../shared/
354
360
buildText = Regex . Replace ( buildText , @"\.\./shared/" , "./shared/" ) ;
@@ -387,6 +393,11 @@ private static void ModifyAndroidGradle(bool isPlugin)
387
393
388
394
private static void BuildIOS ( String path , bool isReleaseBuild )
389
395
{
396
+ // Check if the Unity project is in the expected location
397
+ if ( ! IsProjectLocationValid ( path , "ios" ) ) {
398
+ return ;
399
+ }
400
+
390
401
bool abortBuild = false ;
391
402
392
403
// abort iOS export if #UNITY_IOS is false.
@@ -431,10 +442,10 @@ private static void BuildIOS(String path, bool isReleaseBuild)
431
442
PlayerSettings . SetIl2CppCodeGeneration ( UnityEditor . Build . NamedBuildTarget . Android , UnityEditor . Build . Il2CppCodeGeneration . OptimizeSize ) ;
432
443
#elif UNITY_2022_1_OR_NEWER
433
444
PlayerSettings . SetIl2CppCompilerConfiguration ( BuildTargetGroup . iOS , isReleaseBuild ? Il2CppCompilerConfiguration . Release : Il2CppCompilerConfiguration . Debug ) ;
434
- PlayerSettings . SetIl2CppCodeGeneration ( UnityEditor . Build . NamedBuildTarget . iOS , UnityEditor . Build . Il2CppCodeGeneration . OptimizeSize ) ;
445
+ PlayerSettings . SetIl2CppCodeGeneration ( NamedBuildTarget . iOS , isReleaseBuild ? Il2CppCodeGeneration . OptimizeSpeed : Il2CppCodeGeneration . OptimizeSize ) ;
435
446
#elif UNITY_2021_2_OR_NEWER
436
447
PlayerSettings . SetIl2CppCompilerConfiguration ( BuildTargetGroup . iOS , isReleaseBuild ? Il2CppCompilerConfiguration . Release : Il2CppCompilerConfiguration . Debug ) ;
437
- EditorUserBuildSettings . il2CppCodeGeneration = UnityEditor . Build . Il2CppCodeGeneration . OptimizeSize ;
448
+ EditorUserBuildSettings . il2CppCodeGeneration = isReleaseBuild ? Il2CppCodeGeneration . OptimizeSpeed : Il2CppCodeGeneration . OptimizeSize ;
438
449
#endif
439
450
440
451
var playerOptions = new BuildPlayerOptions
@@ -483,9 +494,9 @@ private static void BuildIOS(String path, bool isReleaseBuild)
483
494
484
495
485
496
//#region Other Member Methods
486
- private static void Copy ( string source , string destinationPath )
497
+ private static void Copy ( string source , string destinationPath , bool clearDestination = true )
487
498
{
488
- if ( Directory . Exists ( destinationPath ) )
499
+ if ( clearDestination && Directory . Exists ( destinationPath ) )
489
500
Directory . Delete ( destinationPath , true ) ;
490
501
491
502
Directory . CreateDirectory ( destinationPath ) ;
@@ -804,6 +815,21 @@ private static async void BuildUnityFrameworkArchive()
804
815
805
816
}
806
817
818
+
819
+ // check if the Unity project is in the expected location
820
+ private static bool IsProjectLocationValid ( string unityLibraryPath , string platform )
821
+ {
822
+ // android, ios and web use platform/unityLibrary, move up one step.
823
+ string platformPath = Path . Combine ( unityLibraryPath , "../" ) ;
824
+ if ( ! Directory . Exists ( platformPath ) )
825
+ {
826
+ Debug . LogError ( $ "Could not find the Flutter project { platform } folder. Make sure the Unity project folder is located in '<flutter-project>/unity/<unity-project-folder>' .") ;
827
+ Debug . Log ( $ "-- Build: Failed --") ;
828
+ return false ;
829
+ }
830
+ return true ;
831
+ }
832
+
807
833
//#endregion
808
834
}
809
835
}
0 commit comments