public static bool CheckKeyStore(BuildConfig config) { //string keyStorePath = Path.Combine(projectFoler, PlayerSettings.bundleIdentifier + ".keystore"); string keyStorePath = GetKeyStorePath(); // Check tồn tại file keytore var isExistsKeyStore = true; if (!File.Exists(keyStorePath)) { // Tao new keystore var agrument = string.Format( " -genkey -v -keystore \"{0}\" -alias {1} -keyalg RSA -keysize 2048 -validity 10000 -dname \"CN =, OU =, O =, L =, S =, C = \" -storepass {2} -keypass {3}" , keyStorePath, PlayerSettings.applicationIdentifier, config.KeyStorePass, config.KeyStorePass ); #if UNITY_EDITOR_OSX RunMacosCmd(agrument); #elif UNITY_EDITOR_WIN var cmdString = string.Format("keytool {0}", agrument); RunCmd(cmdString); #endif Debug.Log("Đã tạo keystore mới: " + keyStorePath); isExistsKeyStore = false; } PlayerSettings.Android.keystoreName = keyStorePath; PlayerSettings.keystorePass = config.KeyStorePass; if (string.IsNullOrEmpty(config.keyAliasName)) { PlayerSettings.Android.keyaliasName = PlayerSettings.applicationIdentifier; } else { PlayerSettings.Android.keyaliasName = config.keyAliasName; } if (string.IsNullOrEmpty(config.keyAliasPass)) { PlayerSettings.keyaliasPass = config.KeyStorePass; } else { PlayerSettings.keyaliasPass = config.keyAliasPass; } return(isExistsKeyStore); }
private void OnEnable() { buildConfig = BuildTool.LoadOrCreateBuildConfig(); serializedObject = new SerializedObject(buildConfig); currentTab = EditorPrefs.GetInt(keyGemmobBuildToolTab, currentTab); reorderableList = new ReorderableList(serializedObject, serializedObject.FindProperty("scriptingDefines"), true, true, true, true) { drawHeaderCallback = (Rect rect) => { EditorGUI.LabelField(rect, "Scripting Define Environment"); } }; reorderableList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { var element = reorderableList.serializedProperty.GetArrayElementAtIndex(index); rect.y += 2; var labelWidth = 50; var checkboxWidth = 18; var targetWidth = 70; var oldWidth = rect.x; EditorGUI.PropertyField(new Rect(oldWidth, rect.y, checkboxWidth + labelWidth, EditorGUIUtility.singleLineHeight), element.FindPropertyRelative("develop"), GUIContent.none); oldWidth += checkboxWidth; EditorGUI.LabelField( new Rect(oldWidth, rect.y, labelWidth, EditorGUIUtility.singleLineHeight) , "develop"); oldWidth += labelWidth; EditorGUI.PropertyField(new Rect(oldWidth, rect.y, checkboxWidth + labelWidth, EditorGUIUtility.singleLineHeight), element.FindPropertyRelative("release"), GUIContent.none); oldWidth += checkboxWidth; EditorGUI.LabelField(new Rect(oldWidth, rect.y, labelWidth, EditorGUIUtility.singleLineHeight), "release"); oldWidth += labelWidth; var targetProperty = element.FindPropertyRelative("target"); targetProperty.intValue = (int)(BuildConfig.CustomBuildTarget)EditorGUI.EnumFlagsField( new Rect(oldWidth, rect.y, targetWidth, EditorGUIUtility.singleLineHeight), (BuildConfig.CustomBuildTarget)targetProperty.intValue); oldWidth += 80; EditorGUI.PropertyField(new Rect(oldWidth + 10, rect.y, rect.width - oldWidth - 10, EditorGUIUtility.singleLineHeight), element.FindPropertyRelative("key"), GUIContent.none); oldWidth += checkboxWidth; }; }
public static void SetupAchitecture(BuildConfig buildConfig) { AndroidArchitecture aa = AndroidArchitecture.ARMv7 | AndroidArchitecture.ARM64; if (buildConfig.achitecture == BuildConfig.BuildAchietecture.ARMv7) { aa = AndroidArchitecture.ARMv7; } else if (buildConfig.achitecture == BuildConfig.BuildAchietecture.ARM64) { aa = AndroidArchitecture.ARM64; } else if (buildConfig.achitecture == BuildConfig.BuildAchietecture.X86) { aa = AndroidArchitecture.X86; } else if (buildConfig.achitecture == BuildConfig.BuildAchietecture.All) { aa = AndroidArchitecture.All; } PlayerSettings.Android.targetArchitectures = aa; }
public static List <string> GetBuildDefines(bool isDevelop, BuildConfig.CustomBuildTarget buildTarget, BuildConfig buildConfig, BuildTargetGroup buildTargetGroup) { string defineBuild = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup); var defines = ExtractDefineNames(defineBuild); #if ADS_ENABLE var adsConfig = AdsEditor.LoadAdsConfigResouce(); if (adsConfig == null) { throw new BuildException("Please Set up ads api before build production version"); } else { AdsEditor.ValidUnityAdsScriptingDefine(adsConfig, buildTargetGroup); } #endif ScriptingDefine.EnableScriptingDefineFlag(isDevelop, Logs.EnableLogsString, defines); ScriptingDefine.EnableScriptingDefineFlag(!isDevelop, ProductionBuildString, defines); ScriptingDefine.EnableScriptingDefineFlag(buildConfig.enableAds, AdsEnableString, defines); ScriptingDefine.EnableScriptingDefineFlag(buildConfig.enableFirebase, FirebaseEnableString, defines); ScriptingDefine.EnableScriptingDefineFlag(buildConfig.enableIap, IapEnableString, defines); if (buildConfig.scriptingDefines != null) { foreach (var variable in buildConfig.scriptingDefines) { var enableTargetBuild = (variable.target & buildTarget) == buildTarget; if (isDevelop) { ScriptingDefine.EnableScriptingDefineFlag(enableTargetBuild && variable.develop, variable.key, defines); } else { ScriptingDefine.EnableScriptingDefineFlag(enableTargetBuild && variable.release, variable.key, defines); } } } return(defines); }
public static void ValidModuleScriptingDefine(bool isDevelop, BuildConfig.CustomBuildTarget buildTarget, BuildConfig buildConfig, BuildTargetGroup buildTargetGroup) { if (buildConfig != null) { var defines = GetBuildDefines(isDevelop, buildTarget, buildConfig, buildTargetGroup); ScriptingDefine.SaveScriptingDefineSymbolsForGroup(buildTargetGroup, defines.ToArray()); } else { Logs.LogError("buildConfig is null please check"); } }
public static string BuildIos(BuildConfig buildConfig, BuildConfig.Options options) { SwitchToiOS(); var buildTargetGroup = BuildTargetGroup.iOS; #if ADS_ENABLE AdsConfig.ApiInfo adsConfig = AdsSetting.LoadIosConfigFromResouceFolder(); if (!options.isDevelop && adsConfig == null && buildConfig.enableAds) { throw new BuildException("Please set up ads api before build production version"); } if (adsConfig != null) { AdsEditor.SetPlayerSetingBuilTargetGroup(adsConfig, buildTargetGroup); } #endif ValidModuleScriptingDefine(options.isDevelop, BuildConfig.CustomBuildTarget.iOS, buildConfig, buildTargetGroup); var defineBuild = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup); var productName = PlayerSettings.productName; PlayerSettings.bundleVersion = buildConfig.BuildVersion; PlayerSettings.iOS.targetDevice = buildConfig.iOSTargetDevice; PlayerSettings.iOS.targetOSVersionString = buildConfig.iOSTargetOSVersion; PlayerSettings.iOS.sdkVersion = buildConfig.iOSSdkVersion; var splashBackground = buildConfig.iOsSplashBackground; var splashLogo = buildConfig.iOsSplashLogo; var icon = buildConfig.iOSIcon; SetUpSplashAndIcon(splashBackground, splashLogo, icon, buildTargetGroup); var isDevelop = options.isDevelop; var buildOptions = isDevelop ? buildConfig.developOptions : buildConfig.productionOptions; if (options.autorun) { buildOptions |= BuildOptions.AutoRunPlayer; } var locationPathName = Path.Combine(GetBuildFolder(), isDevelop ? "DevIos" : "ReleaseIos"); var scriptingImplementation = PlayerSettings.GetScriptingBackend(buildTargetGroup); if (options.isDevelop) { PlayerSettings.productName = "Dev " + productName; } else if (buildConfig.iOsIl2CppForRelease) { PlayerSettings.SetScriptingBackend(buildTargetGroup, ScriptingImplementation.IL2CPP); } EditorUserBuildSettings.development = options.isDevelop; try { BuildPipeline.BuildPlayer(GetScenePaths(), locationPathName, BuildTarget.iOS, buildOptions); if (options.autoOpen) { EditorUtility.RevealInFinder(locationPathName); } return(locationPathName); } catch (Exception e) { throw e; } finally { ScriptingDefine.SaveScriptingDefineSymbolsForGroup(buildTargetGroup, defineBuild); PlayerSettings.SetScriptingBackend(buildTargetGroup, scriptingImplementation); PlayerSettings.productName = productName; } }
private static string BuildAndroid(BuildConfig buildConfig, string suffix, BuildConfig.Options options, OsBuild osBuild) { CheckKeyStore(buildConfig); var buildTargetGroup = BuildTargetGroup.Android; #if ADS_ENABLE AdsConfig.ApiInfo config = AdsSetting.LoadAndroidConfigFromResouceFolder(); if (config != null) { AdsEditor.SetPlayerSetingBuilTargetGroup(config, buildTargetGroup); } if (!options.isDevelop && config == null && buildConfig.enableAds) { throw new BuildException("Please Set up ads api before build production version"); } #endif ValidModuleScriptingDefine(options.isDevelop, BuildConfig.CustomBuildTarget.Android, buildConfig, buildTargetGroup); var defineBuild = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup); var productName = PlayerSettings.productName; PlayerSettings.bundleVersion = buildConfig.BuildVersion; PlayerSettings.Android.bundleVersionCode = buildConfig.BuildVerCode; PlayerSettings.Android.preferredInstallLocation = AndroidPreferredInstallLocation.Auto; PlayerSettings.Android.forceSDCardPermission = false; var splashBackground = buildConfig.androidSplashBackground; var splashLogo = buildConfig.androidSplashLogo; var icon = buildConfig.androidIcon; SetUpSplashAndIcon(splashBackground, splashLogo, icon, buildTargetGroup); var buildOptions = options.isDevelop ? buildConfig.developOptions : buildConfig.productionOptions; if (options.autorun) { buildOptions |= BuildOptions.AutoRunPlayer; } var filename = GetFileName(suffix); filename = (options.isDevelop ? "dev_" : "release_") + filename; Debug.LogFormat("Prepare for build {0}", filename); var scriptingImplementation = PlayerSettings.GetScriptingBackend(buildTargetGroup); if (options.isDevelop && options.isBuildAPK) { PlayerSettings.Android.targetArchitectures = AndroidArchitecture.ARMv7; } else { if (buildConfig.AndroidIl2CppForRelease) { PlayerSettings.SetScriptingBackend(buildTargetGroup, ScriptingImplementation.IL2CPP); } SetupAchitecture(buildConfig); } EditorUserBuildSettings.development = options.isDevelop; EditorUserBuildSettings.buildAppBundle = !options.isBuildAPK; var locationPathName = Path.Combine(GetBuildFolder(), filename); try { BuildPipeline.BuildPlayer(GetScenePaths(), locationPathName, BuildTarget.Android, buildOptions); if (options.autoOpen) { EditorUtility.RevealInFinder(locationPathName); } return(locationPathName); } catch (Exception e) { throw e; } finally { PlayerSettings.productName = productName; PlayerSettings.SetScriptingBackend(buildTargetGroup, scriptingImplementation); ScriptingDefine.SaveScriptingDefineSymbolsForGroup(buildTargetGroup, defineBuild); } }
/**<summary> Build AAB with ARMv7 + ARMv64. No x86</summary>*/ public static string BuildAndroidWithConfig(BuildConfig buildConfig, BuildConfig.Options options, OsBuild osBuild = null) { SwitchToAndroid(); return(BuildAndroid(buildConfig, options.isBuildAPK ? ".apk" : ".aab", options, osBuild)); }