| | |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | using System; |
| | | using UnityEditor; |
| | | using System.IO; |
| | | using System.Text.RegularExpressions; |
| | | using System.Text; |
| | | using TableConfig; |
| | | |
| | | using System.Collections;
|
| | | using System.Collections.Generic;
|
| | | using UnityEngine;
|
| | | using System;
|
| | | using UnityEditor;
|
| | | using System.IO;
|
| | | using System.Text.RegularExpressions;
|
| | | using System.Text;
|
| | | using TableConfig;
|
| | |
|
| | | public class ClientPackage
|
| | | { |
| | | public static readonly string versionsFilePath = Application.dataPath + Path.DirectorySeparatorChar + "Editor/VersionConfigs/Versions.txt"; |
| | | {
|
| | | public static readonly string versionsFilePath = Application.dataPath + Path.DirectorySeparatorChar + "Editor/VersionConfigs/Versions.txt";
|
| | | public static readonly string[] baseLevels = new string[] { "Assets/Resources/Scenes/Launch.unity", "Assets/Resources/Scenes/Empty.unity" };
|
| | |
|
| | | public static string auditOutTime = string.Empty;
|
| | |
|
| | | public static string SDK_PLUGIN_PROJECT {
|
| | | get { return LocalSave.GetString("SDK_PROJECT_PATH"); }
|
| | | set { LocalSave.SetString("SDK_PROJECT_PATH", value); }
|
| | | } |
| | | |
| | | static string ANDROID_PLUGIN_PATH = Application.dataPath + "/Plugins/Android"; |
| | | |
| | | static int packageIndex {
|
| | | get { return LocalSave.GetInt("ClientPackageIndex", 1); }
|
| | | set { LocalSave.SetInt("ClientPackageIndex", value); }
|
| | | } |
| | | |
| | | public static void BuildPublishers(string _sdkPath, string _assetBundlePath, string _output, string _publisherString, bool _development, bool _replace)
|
| | | }
|
| | |
|
| | | static string ANDROID_PLUGIN_PATH = Application.dataPath + "/Plugins/Android";
|
| | | static string iOS_PLUGIN_PATH = Application.dataPath + "/Plugins/iOS";
|
| | |
|
| | | public static void BuildPublishers(string _sdkPath, string _assetBundlePath, string _output, string _publisherString, int _buildIndex, bool _development, bool _replace)
|
| | | {
|
| | | var publisherIds = new List<string>();
|
| | | var tempStrings = _publisherString.Split(StringUtility.splitSeparator, StringSplitOptions.RemoveEmptyEntries);
|
| | |
| | | }
|
| | | break;
|
| | | }
|
| | | } |
| | | }
|
| | |
|
| | | var smallPackages = new List<string>();
|
| | | var halfPackages = new List<string>();
|
| | |
| | | for (int i = 0; i < smallPackages.Count; i++)
|
| | | {
|
| | | #if UNITY_ANDROID
|
| | | BuildApk(_sdkPath, _output, smallPackages[i], _development);
|
| | | BuildApk(_sdkPath, _output, smallPackages[i], _buildIndex, _development);
|
| | | #elif UNITY_IOS
|
| | | BuildIpa(smallPackages[i], _replace);
|
| | | BuildIpa(_sdkPath, smallPackages[i], _buildIndex, _replace);
|
| | | #endif
|
| | | }
|
| | | }
|
| | |
|
| | | if (halfPackages.Count > 0)
|
| | | {
|
| | | ConfigManager.Instance.PreLoadConfigs();
|
| | | Config.Instance.LoadPriorBundleConfig();
|
| | | FileExtersion.DirectoryCopy(_assetBundlePath, ResourcesPath.Instance.StreamingAssetPath);
|
| | |
|
| | | var files = new List<FileInfo>();
|
| | |
| | | for (int i = 0; i < halfPackages.Count; i++)
|
| | | {
|
| | | #if UNITY_ANDROID
|
| | | BuildApk(_sdkPath, _output, halfPackages[i], _development);
|
| | | BuildApk(_sdkPath, _output, halfPackages[i], _buildIndex, _development);
|
| | | #elif UNITY_IOS
|
| | | BuildIpa(halfPackages[i], _replace);
|
| | | BuildIpa(_sdkPath, halfPackages[i], _buildIndex, _replace);
|
| | | #endif
|
| | | }
|
| | | }
|
| | |
| | | for (int i = 0; i < bigPackages.Count; i++)
|
| | | {
|
| | | #if UNITY_ANDROID
|
| | | BuildApk(_sdkPath, _output, bigPackages[i], _development);
|
| | | BuildApk(_sdkPath, _output, bigPackages[i], _buildIndex, _development);
|
| | | #elif UNITY_IOS
|
| | | BuildIpa(bigPackages[i], _replace);
|
| | | BuildIpa(_sdkPath, bigPackages[i], _buildIndex, _replace);
|
| | | #endif
|
| | | }
|
| | | }
|
| | |
|
| | | packageIndex++;
|
| | | }
|
| | | |
| | | public static void BuildApk(string _sdkPath, string _output, string _publisher, bool _development)
|
| | |
|
| | | public static void BuildApk(string _sdkPath, string _output, string _publisher, int _buildIndex, bool _development)
|
| | | {
|
| | | PreBuild(_publisher);
|
| | | PreBuild(_publisher, _buildIndex);
|
| | |
|
| | | var auditTimeFile = StringUtility.Contact(Application.dataPath, Path.DirectorySeparatorChar, "Resources/Config/AuditTime.txt");
|
| | | if (File.Exists(auditTimeFile))
|
| | | {
|
| | | File.Delete(auditTimeFile);
|
| | | }
|
| | |
|
| | | var versionName = string.Empty;
|
| | | var versionConfig = GetVersionConfig(_publisher, out versionName);
|
| | |
| | | AssetDatabase.ImportAsset(versionConfigCSpath);
|
| | | }
|
| | |
|
| | | // 针对某一些打包的特殊性, 这里特指依赖的第三方库含有资源的问题
|
| | | // 这里对有这种特型的渠道的sdk在打包的时候差异化gradle文件
|
| | | // 更名原有文件
|
| | | string _gradleTemplateUrl = EditorApplication.applicationContentsPath + "/PlaybackEngines/AndroidPlayer/Tools/GradleTemplates/";
|
| | | string _gradleFileUrl = _gradleTemplateUrl + "mainTemplate.gradle";
|
| | | string _diffGradleFileUrl = StringUtility.Contact(_sdkPath, "/GradleDiff/", versionConfig.appId, "/mainTemplate.gradle");
|
| | | FileInfo _fileInfo = new FileInfo(_diffGradleFileUrl);
|
| | |
|
| | | if (!_fileInfo.Exists)
|
| | | {
|
| | | EditorUtility.DisplayDialog("警告", "Gradle模式需要配置差异文件,但是没有找到该文件: " + _diffGradleFileUrl, "@Hale");
|
| | | return;
|
| | | }
|
| | |
|
| | | _fileInfo.CopyTo(_gradleFileUrl, true);
|
| | |
|
| | | // 移动配置文件至打包工作目录中
|
| | |
|
| | | PlayerSettings.Android.keystoreName = Application.dataPath + "/Editor/Keystore/" + versionConfig.keystoreFileName + ".keystore";
|
| | | PlayerSettings.Android.keystorePass = versionConfig.keystorePassword;
|
| | | PlayerSettings.Android.keyaliasName = versionConfig.keystoreAlias;
|
| | | PlayerSettings.Android.keyaliasPass = versionConfig.keystoreAliasPassword;
|
| | | PlayerSettings.Android.targetSdkVersion = AndroidSdkVersions.AndroidApiLevel22;
|
| | | PlayerSettings.Android.bundleVersionCode = VersionConfig.GetVersionNumber(versionConfig.version);
|
| | |
|
| | | PlayerSettings.enableInternalProfiler = _development;
|
| | |
|
| | |
| | | Directory.Delete(ANDROID_PLUGIN_PATH, true);
|
| | | }
|
| | |
|
| | | Debug.LogFormat("执行Android SDK 文件拷贝,from:{0};to:{1}", StringUtility.Contact(_sdkPath, "/Android/", versionConfig.appId), ANDROID_PLUGIN_PATH);
|
| | | FileExtersion.DirectoryCopy(StringUtility.Contact(_sdkPath, "/Android/", versionConfig.appId), ANDROID_PLUGIN_PATH); |
| | | if (!versionConfig.appId.Equals("test"))
|
| | | {
|
| | | FileExtersion.DirectoryCopy(StringUtility.Contact(_sdkPath, "/渠道差异/", versionConfig.productName), ANDROID_PLUGIN_PATH);
|
| | | } |
| | | Debug.LogFormat("执行Android SDK 文件拷贝,from:{0};to:{1}", StringUtility.Contact(_sdkPath, "/Android/release"), ANDROID_PLUGIN_PATH);
|
| | | FileExtersion.DirectoryCopy(StringUtility.Contact(_sdkPath, "/Android/release"), ANDROID_PLUGIN_PATH);
|
| | | FileExtersion.DirectoryCopy(StringUtility.Contact(_sdkPath, "/ChannelDiff/Android/", versionConfig.appId), ANDROID_PLUGIN_PATH);
|
| | | AssetDatabase.SaveAssets();
|
| | | AssetDatabase.Refresh();
|
| | |
|
| | | var index = packageIndex;
|
| | | if (_development)
|
| | | {
|
| | | var apkName = StringUtility.Contact(_output, "/", versionName, "_", versionConfig.clientPackageFlag, "_v", versionConfig.m_Version, "_", index, "_development.apk");
|
| | | var apkName = StringUtility.Contact(_output, "/", versionName, "_", versionConfig.clientPackageFlag, "_v", versionConfig.m_Version, "_", _buildIndex, "_development.apk");
|
| | | BuildPipeline.BuildPlayer(baseLevels, apkName, BuildTarget.Android, BuildOptions.Development | BuildOptions.ConnectWithProfiler | BuildOptions.AllowDebugging);
|
| | | }
|
| | | else
|
| | | {
|
| | | var apkName = StringUtility.Contact(_output, "/", versionName, "_", versionConfig.clientPackageFlag, "_v", versionConfig.m_Version, "_", index, ".apk");
|
| | | var apkName = StringUtility.Contact(_output, "/", versionName, "_", versionConfig.clientPackageFlag, "_v", versionConfig.m_Version, "_", _buildIndex, ".apk");
|
| | | BuildPipeline.BuildPlayer(baseLevels, apkName, BuildTarget.Android, BuildOptions.None);
|
| | | }
|
| | | } |
| | | |
| | | public static void BuildIpa(string _publisher, bool _replace)
|
| | | }
|
| | |
|
| | | public static void BuildIpa(string _sdkPath, string _publisher, int _buildIndex, bool _replace)
|
| | | {
|
| | | PreBuild(_publisher);
|
| | | #if UNITY_IOS
|
| | | PreBuild(_publisher, _buildIndex);
|
| | |
|
| | | var versionName = string.Empty;
|
| | | var versionConfig = GetVersionConfig(_publisher, out versionName);
|
| | |
|
| | | if (Directory.Exists(iOS_PLUGIN_PATH))
|
| | | {
|
| | | Directory.Delete(iOS_PLUGIN_PATH, true);
|
| | | }
|
| | |
|
| | | if (!versionConfig.appId.Equals("test"))
|
| | | {
|
| | | FileExtersion.DirectoryCopy(StringUtility.Contact(_sdkPath, "/ChannelDiff/iOS/", versionConfig.appId), iOS_PLUGIN_PATH);
|
| | | }
|
| | |
|
| | | DateTime outTime;
|
| | | var correct = DateTime.TryParse(auditOutTime, out outTime);
|
| | | File.WriteAllText(Application.dataPath + Path.DirectorySeparatorChar + "Resources/Config/AuditTime.txt", correct ? auditOutTime : "");
|
| | | AssetDatabase.SaveAssets();
|
| | | AssetDatabase.Refresh();
|
| | | PlayerSettings.iOS.buildNumber = VersionConfig.Get().buildIndex.ToString();
|
| | | PlayerSettings.iOS.appleDeveloperTeamID = VersionConfig.Get().appleDeveloperTeamID;
|
| | |
|
| | |
| | | {
|
| | | XCodeProjectMod.BuildIOSProject_Append();
|
| | | }
|
| | | } |
| | | |
| | | private static void PreBuild(string _publisher)
|
| | | #endif
|
| | | }
|
| | |
|
| | | private static void PreBuild(string _publisher, int _buildIndex)
|
| | | {
|
| | | try
|
| | | {
|
| | |
| | |
|
| | | VersionConfig.Copy(fromVersionConfig, newVersionConfig);
|
| | | newVersionConfig.buildTime = DateTime.Now.ToString("yy/MM/dd--HH:mm");
|
| | | newVersionConfig.buildIndex = packageIndex;
|
| | | newVersionConfig.buildIndex = _buildIndex;
|
| | |
|
| | | AssetDatabase.CreateAsset(newVersionConfig, newVersionConfigPath);
|
| | | EditorUtility.SetDirty(newVersionConfig);
|
| | |
| | | PlayerSettings.allowedAutorotateToLandscapeRight = true;
|
| | | PlayerSettings.allowedAutorotateToPortrait = false;
|
| | | PlayerSettings.allowedAutorotateToPortraitUpsideDown = false;
|
| | | PlayerSettings.bundleVersion = newVersionConfig.version;
|
| | | PlayerSettings.bundleVersion = VersionConfig.GetVersionNumber(newVersionConfig.version).ToString();
|
| | |
|
| | | var grachicSettings = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/GraphicsSettings.asset")[0]);
|
| | | var lightmapStripping = grachicSettings.FindProperty("m_LightmapStripping");
|
| | | lightmapStripping.intValue = 0;
|
| | | var fogStripping = grachicSettings.FindProperty("m_FogStripping");
|
| | | fogStripping.intValue = 0;
|
| | |
|
| | | grachicSettings.ApplyModifiedProperties();
|
| | | }
|
| | | catch (Exception ex)
|
| | | {
|
| | |
| | | AssetDatabase.Refresh();
|
| | | }
|
| | |
|
| | | } |
| | | |
| | | }
|
| | |
|
| | | static VersionConfig GetVersionConfig(string _publisher, out string _versionName)
|
| | | {
|
| | | var lines = File.ReadAllLines(versionsFilePath);
|
| | |
| | |
|
| | | _versionName = string.Empty;
|
| | | return null;
|
| | | } |
| | | |
| | | }
|
| | |
|
| | | static void SetIconAndSplashImage(string _versionName)
|
| | | {
|
| | | var buildTarget = GetBuildTarget();
|
| | |
| | |
|
| | | if (buildTarget == BuildTargetGroup.Android)
|
| | | {
|
| | | var projectSettings = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/ProjectSettings.asset")[0]);
|
| | | var splashImageSetting = projectSettings.FindProperty("androidSplashScreen");
|
| | | splashImageSetting.objectReferenceValue = splashImage.texture;
|
| | | projectSettings.ApplyModifiedProperties();
|
| | |
|
| | | PlayerSettings.Android.splashScreenScale = AndroidSplashScreenScale.ScaleToFill;
|
| | | }
|
| | |
|
| | | var logoFromPath = "Assets/Editor/Logo/" + _versionName + "/TB_DL_Logo.png";
|
| | | var logoToPath = "Assets/Resources/UI/Sprites/TB_DL_Logo.png";
|
| | |
|
| | | AssetDatabase.DeleteAsset(logoToPath);
|
| | | AssetDatabase.CopyAsset(logoFromPath, logoToPath);
|
| | |
|
| | | var importerPath = "Assets/Resources/UI/Sprites/TB_DL_Logo.png";
|
| | | var importer = AssetImporter.GetAtPath(importerPath);
|
| | | var textureImporter = importer as TextureImporter;
|
| | | if (textureImporter != null)
|
| | | var logoImporterPath = "Assets/Resources/UI/Sprites/TB_DL_Logo.png";
|
| | | var logoImporter = AssetImporter.GetAtPath(logoImporterPath);
|
| | | var logoTextureImporter = logoImporter as TextureImporter;
|
| | | if (logoTextureImporter != null)
|
| | | {
|
| | | textureImporter.textureType = TextureImporterType.Sprite;
|
| | | textureImporter.spritePackingTag = string.Empty;
|
| | | textureImporter.assetBundleName = string.Empty;
|
| | | logoTextureImporter.textureType = TextureImporterType.Sprite;
|
| | | logoTextureImporter.spritePackingTag = string.Empty;
|
| | | logoTextureImporter.assetBundleName = string.Empty;
|
| | |
|
| | | var platformSetting = new TextureImporterPlatformSettings();
|
| | |
|
| | | switch (buildTarget)
|
| | | {
|
| | | case BuildTargetGroup.Android:
|
| | |
| | | platformSetting.maxTextureSize = 512;
|
| | | platformSetting.format = TextureImporterFormat.ETC2_RGBA8;
|
| | | platformSetting.compressionQuality = 1;
|
| | | textureImporter.SetPlatformTextureSettings(platformSetting);
|
| | | break;
|
| | | case BuildTargetGroup.iOS:
|
| | | platformSetting.overridden = true;
|
| | |
| | | platformSetting.maxTextureSize = 512;
|
| | | platformSetting.format = TextureImporterFormat.PVRTC_RGBA4;
|
| | | platformSetting.compressionQuality = 1;
|
| | | textureImporter.SetPlatformTextureSettings(platformSetting);
|
| | | break;
|
| | | }
|
| | |
|
| | | AssetDatabase.ImportAsset(importerPath);
|
| | | EditorUtility.SetDirty(textureImporter);
|
| | | logoTextureImporter.SetPlatformTextureSettings(platformSetting);
|
| | | AssetDatabase.ImportAsset(logoImporterPath);
|
| | | EditorUtility.SetDirty(logoTextureImporter);
|
| | | }
|
| | |
|
| | | } |
| | | |
| | | var backGroundFromPath = "Assets/Editor/Logo/" + _versionName + "/Launch.png";
|
| | | var backGroundToPath = "Assets/Resources/UI/Sprites/Launch.png";
|
| | | AssetDatabase.DeleteAsset(backGroundToPath);
|
| | | AssetDatabase.CopyAsset(backGroundFromPath, backGroundToPath);
|
| | |
|
| | | var backGroundImporterPath = "Assets/Resources/UI/Sprites/Launch.png";
|
| | | var backGrouindImporter = AssetImporter.GetAtPath(backGroundImporterPath);
|
| | | var backGroundTextureImporter = backGrouindImporter as TextureImporter;
|
| | | if (backGroundTextureImporter != null)
|
| | | {
|
| | | backGroundTextureImporter.textureType = TextureImporterType.Sprite;
|
| | | backGroundTextureImporter.spritePackingTag = string.Empty;
|
| | | backGroundTextureImporter.assetBundleName = string.Empty;
|
| | |
|
| | | var platformSetting = new TextureImporterPlatformSettings();
|
| | | switch (buildTarget)
|
| | | {
|
| | | case BuildTargetGroup.Android:
|
| | | platformSetting.overridden = true;
|
| | | platformSetting.allowsAlphaSplitting = false;
|
| | | platformSetting.name = "Android";
|
| | | platformSetting.maxTextureSize = 1024;
|
| | | platformSetting.format = TextureImporterFormat.ETC2_RGB4;
|
| | | platformSetting.compressionQuality = 1;
|
| | | break;
|
| | | case BuildTargetGroup.iOS:
|
| | | platformSetting.overridden = true;
|
| | | platformSetting.allowsAlphaSplitting = false;
|
| | | platformSetting.name = "iOS";
|
| | | platformSetting.maxTextureSize = 1024;
|
| | | platformSetting.format = TextureImporterFormat.PVRTC_RGBA4;
|
| | | platformSetting.compressionQuality = 1;
|
| | | break;
|
| | | }
|
| | |
|
| | | backGroundTextureImporter.SetPlatformTextureSettings(platformSetting);
|
| | | AssetDatabase.ImportAsset(backGroundImporterPath);
|
| | | EditorUtility.SetDirty(backGroundTextureImporter);
|
| | | }
|
| | |
|
| | |
|
| | | }
|
| | |
|
| | | static BuildTargetGroup GetBuildTarget()
|
| | | {
|
| | | #if UNITY_ANDROID
|
| | |
| | | #else
|
| | | return BuildTargetGroup.Standalone;
|
| | | #endif
|
| | | } |
| | | |
| | | } |
| | | }
|
| | |
|
| | | }
|