Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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;
            };
        }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
 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");
     }
 }
Exemplo n.º 6
0
        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;
            }
        }
Exemplo n.º 7
0
        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);
            }
        }
Exemplo n.º 8
0
 /**<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));
 }