少年修仙传客户端基础资源
client_Wu Xijin
2019-02-13 ff7f4155ae99f589691b929f959caf5f284cfe12
Assets/Editor/Tool/ClientPackage.cs
@@ -1,33 +1,40 @@
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 Beebyte.Obfuscator;
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 SDK_PLUGIN_PROJECT
    {
    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 _assetBundlePath, string _output, string _publisherString, bool _development, bool _replace)
    }
    public static bool obfuscatorEnabled {
        get { return LocalSave.GetBool("obfuscatorEnabled", false); }
        set { LocalSave.SetBool("obfuscatorEnabled", value); }
    }
    public static int AssetPrior {
        get { return LocalSave.GetInt("HalfAssetPrior", 1); }
        set { LocalSave.SetInt("HalfAssetPrior", value); }
    }
    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);
@@ -51,7 +58,7 @@
                    }
                    break;
            }
        }
        }
        var smallPackages = new List<string>();
        var halfPackages = new List<string>();
@@ -92,24 +99,85 @@
        if (smallPackages.Count > 0)
        {
            var files = new List<FileInfo>();
            var builtInFiles = new List<FileInfo>();
            FileExtersion.GetAllDirectoryFileInfos(_assetBundlePath, files);
            foreach (var file in files)
            {
                var fileName = Path.GetFileName(file.FullName);
                if (file.FullName.Contains("builtin"))
                {
                    builtInFiles.Add(file);
                    continue;
                }
                if (file.FullName.Contains("Contact.txt")
                    || file.FullName.Contains("HelpInfo.txt")
                    || file.FullName.Contains("PriorBundle.txt")
                    || file.FullName.Contains("PriorLanguage.txt")
                    || file.FullName.Contains("ApkUpdateUrl.txt"))
                {
                    builtInFiles.Add(file);
                    continue;
                }
                File.Delete(file.FullName);
            }
            var totalCount = builtInFiles.Count;
            var completeCount = 0;
            foreach (var item in builtInFiles)
            {
                var directory = Path.GetDirectoryName(item.FullName);
                if (!Directory.Exists(directory))
                {
                    Directory.CreateDirectory(directory);
                }
                var relativePath = FileExtersion.GetFileRelativePath(_assetBundlePath, item.FullName);
                var to = StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, relativePath);
#if UNITY_ANDROID
                var extension = Path.GetExtension(item.FullName);
                if (extension == ".meta")
                {
                    continue;
                }
                to = to + ".7z";
                SevenZipUtility.Compress(item.FullName, to);
                UnityEditor.EditorUtility.DisplayProgressBar("正在压缩资源", item.Name, (float)completeCount / totalCount);
#elif UNITY_IOS
                File.Copy(item.FullName,to,true);
#endif
                completeCount++;
            }
            EditorUtility.ClearProgressBar();
            for (int i = 0; i < smallPackages.Count; i++)
            {
#if UNITY_ANDROID
                BuildApk(_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();
            FileExtersion.DirectoryCopy(_assetBundlePath, ResourcesPath.Instance.StreamingAssetPath);
            Config.Instance.LoadPriorBundleConfig();
            var files = new List<FileInfo>();
            FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, "mob"), files);
            foreach (var file in files)
            var fromFiles = new List<FileInfo>();
            FileExtersion.GetAllDirectoryFileInfos(_assetBundlePath, fromFiles);
            var excludeFileFullNames = new List<string>();
            var tempFiles = new List<FileInfo>();
            FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(_assetBundlePath, "/mob"), tempFiles);
            foreach (var file in tempFiles)
            {
                var extersion = Path.GetExtension(file.FullName);
                var fileName = Path.GetFileName(file.FullName);
@@ -118,15 +186,16 @@
                    fileName = fileName.Replace(extersion, "");
                }
                if (!PriorBundleConfig.mobs.Contains(fileName))
                var prior = PriorBundleConfig.GetAssetPrior(AssetVersion.AssetCategory.Mob, fileName);
                if (prior > AssetPrior)
                {
                    File.Delete(file.FullName);
                    excludeFileFullNames.Add(file.FullName);
                }
            }
            files.Clear();
            FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, "maps"), files);
            foreach (var file in files)
            tempFiles.Clear();
            FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(_assetBundlePath, "/maps"), tempFiles);
            foreach (var file in tempFiles)
            {
                var extersion = Path.GetExtension(file.FullName);
                var fileName = Path.GetFileName(file.FullName);
@@ -135,15 +204,16 @@
                    fileName = fileName.Replace(extersion, "");
                }
                if (!PriorBundleConfig.scenes.Contains(fileName))
                var prior = PriorBundleConfig.GetAssetPrior(AssetVersion.AssetCategory.Scene, fileName);
                if (prior > AssetPrior)
                {
                    File.Delete(file.FullName);
                    excludeFileFullNames.Add(file.FullName);
                }
            }
            files.Clear();
            FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, "audio"), files);
            foreach (var file in files)
            tempFiles.Clear();
            FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(_assetBundlePath, "/audio"), tempFiles);
            foreach (var file in tempFiles)
            {
                var extersion = Path.GetExtension(file.FullName);
                var fileName = Path.GetFileName(file.FullName);
@@ -152,15 +222,16 @@
                    fileName = fileName.Replace(extersion, "");
                }
                if (!PriorBundleConfig.audios.Contains(fileName))
                var prior = PriorBundleConfig.GetAssetPrior(AssetVersion.AssetCategory.Audio, fileName);
                if (prior > AssetPrior)
                {
                    File.Delete(file.FullName);
                    excludeFileFullNames.Add(file.FullName);
                }
            }
            files.Clear();
            FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, "effect"), files);
            foreach (var file in files)
            tempFiles.Clear();
            FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(_assetBundlePath, "/effect"), tempFiles);
            foreach (var file in tempFiles)
            {
                var extersion = Path.GetExtension(file.FullName);
                var fileName = Path.GetFileName(file.FullName);
@@ -169,41 +240,124 @@
                    fileName = fileName.Replace(extersion, "");
                }
                if (!PriorBundleConfig.effects.Contains(fileName))
                var prior = PriorBundleConfig.GetAssetPrior(AssetVersion.AssetCategory.Effect, fileName);
                if (prior > AssetPrior)
                {
                    File.Delete(file.FullName);
                    excludeFileFullNames.Add(file.FullName);
                }
            }
            tempFiles.Clear();
            FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(_assetBundlePath, "/ui/sprite"), tempFiles);
            foreach (var file in tempFiles)
            {
                var fileName = Path.GetFileName(file.FullName);
                if (fileName == "loadingbg")
                {
                    excludeFileFullNames.Add(file.FullName);
                }
            }
            for (int i = fromFiles.Count - 1; i >= 0; i--)
            {
                var item = fromFiles[i];
                if (excludeFileFullNames.Contains(item.FullName))
                {
                    fromFiles.RemoveAt(i);
                }
            }
            var totalCount = fromFiles.Count;
            var completeCount = 0;
            foreach (var item in fromFiles)
            {
                var relativePath = FileExtersion.GetFileRelativePath(_assetBundlePath, item.FullName);
                var to = StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, relativePath);
                var directory = Path.GetDirectoryName(to);
                if (!Directory.Exists(directory))
                {
                    Directory.CreateDirectory(directory);
                }
#if UNITY_ANDROID
                var extension = Path.GetExtension(item.FullName);
                if (extension == ".meta")
                {
                    continue;
                }
                to = to + ".7z";
                SevenZipUtility.Compress(item.FullName, to);
                UnityEditor.EditorUtility.DisplayProgressBar("正在压缩资源", item.Name, (float)completeCount / totalCount);
#elif UNITY_IOS
                File.Copy(item.FullName,to,true);
#endif
                completeCount++;
            }
            EditorUtility.ClearProgressBar();
            for (int i = 0; i < halfPackages.Count; i++)
            {
#if UNITY_ANDROID
                BuildApk(_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
            }
        }
        if (bigPackages.Count > 0)
        {
            FileExtersion.DirectoryCopy(_assetBundlePath, ResourcesPath.Instance.StreamingAssetPath);
            var fromFiles = new List<FileInfo>();
            FileExtersion.GetAllDirectoryFileInfos(_assetBundlePath, fromFiles);
            var totalCount = fromFiles.Count;
            var completeCount = 0;
            foreach (var item in fromFiles)
            {
                var relativePath = FileExtersion.GetFileRelativePath(_assetBundlePath, item.FullName);
                var to = StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, relativePath);
                var directory = Path.GetDirectoryName(to);
                if (!Directory.Exists(directory))
                {
                    Directory.CreateDirectory(directory);
                }
#if UNITY_ANDROID
                var extension = Path.GetExtension(item.FullName);
                if (extension == ".meta")
                {
                    continue;
                }
                to = to + ".7z";
                SevenZipUtility.Compress(item.FullName, to);
                UnityEditor.EditorUtility.DisplayProgressBar("正在压缩资源", item.Name, (float)completeCount / totalCount);
#elif UNITY_IOS
                File.Copy(item.FullName,to,true);
#endif
                completeCount++;
            }
            for (int i = 0; i < bigPackages.Count; i++)
            {
#if UNITY_ANDROID
                BuildApk(_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 _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);
@@ -225,10 +379,30 @@
            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;
@@ -237,31 +411,68 @@
            Directory.Delete(ANDROID_PLUGIN_PATH, true);
        }
        Debug.LogFormat("执行Android SDK 文件拷贝,from:{0};to:{1}", StringUtility.Contact(SDK_PLUGIN_PROJECT, "/Android/", versionConfig.appId), ANDROID_PLUGIN_PATH);
        FileExtersion.DirectoryCopy(StringUtility.Contact(SDK_PLUGIN_PROJECT, "/Android/", versionConfig.appId), ANDROID_PLUGIN_PATH);
        if (!versionConfig.appId.Equals("test"))
        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);
        var option = AssetDatabase.LoadAssetAtPath<Options>("Assets/Editor/Beebyte/Obfuscator/ObfuscatorOptions.asset");
        if (option != null)
        {
            FileExtersion.DirectoryCopy(StringUtility.Contact(SDK_PLUGIN_PROJECT, "/渠道差异/", versionConfig.productName), ANDROID_PLUGIN_PATH);
        }
            option.enabled = obfuscatorEnabled;
            EditorUtility.SetDirty(option);
        }
        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);
        var directory = Application.dataPath + Path.DirectorySeparatorChar + "Resources/Config";
        if (Directory.Exists(directory))
        {
            Directory.CreateDirectory(directory);
        }
        File.WriteAllText(Application.dataPath + Path.DirectorySeparatorChar + "Resources/Config/AuditTime.txt", correct ? auditOutTime : "");
        var option = AssetDatabase.LoadAssetAtPath<Options>("Assets/Editor/Beebyte/Obfuscator/ObfuscatorOptions.asset");
        if (option!=null)
        {
            option.enabled = obfuscatorEnabled;
            EditorUtility.SetDirty(option);
        }
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
        PlayerSettings.iOS.buildNumber = VersionConfig.Get().buildIndex.ToString();
        PlayerSettings.iOS.appleDeveloperTeamID = VersionConfig.Get().appleDeveloperTeamID;
@@ -273,42 +484,56 @@
        {
            XCodeProjectMod.BuildIOSProject_Append();
        }
    }
    private static void PreBuild(string _publisher)
#endif
    }
    private static void PreBuild(string _publisher, int _buildIndex)
    {
        var newVersionConfigPath = StringUtility.Contact("Assets/Resources/ScriptableObject/Config/VersionConfig", ".asset");
        var versionName = string.Empty;
        var fromVersionConfig = GetVersionConfig(_publisher, out versionName);
        var newVersionConfig = ScriptableObject.CreateInstance<VersionConfig>();
        if (File.Exists(newVersionConfigPath))
        try
        {
            AssetDatabase.DeleteAsset(newVersionConfigPath);
            var newVersionConfigPath = StringUtility.Contact("Assets/Resources/VersionConfig", ".asset");
            var versionName = string.Empty;
            var fromVersionConfig = GetVersionConfig(_publisher, out versionName);
            var newVersionConfig = ScriptableObject.CreateInstance<VersionConfig>();
            if (File.Exists(newVersionConfigPath))
            {
                AssetDatabase.DeleteAsset(newVersionConfigPath);
            }
            VersionConfig.Copy(fromVersionConfig, newVersionConfig);
            newVersionConfig.buildTime = DateTime.Now.ToString("yy/MM/dd--HH:mm");
            newVersionConfig.buildIndex = _buildIndex;
            AssetDatabase.CreateAsset(newVersionConfig, newVersionConfigPath);
            EditorUtility.SetDirty(newVersionConfig);
            SetIconAndSplashImage(versionName);
            PlayerSettings.companyName = "TheSecondWorld";
            PlayerSettings.productName = newVersionConfig.productName;
            PlayerSettings.applicationIdentifier = newVersionConfig.bundleIdentifier;
            PlayerSettings.defaultInterfaceOrientation = UIOrientation.AutoRotation;
            PlayerSettings.allowedAutorotateToLandscapeLeft = true;
            PlayerSettings.allowedAutorotateToLandscapeRight = true;
            PlayerSettings.allowedAutorotateToPortrait = false;
            PlayerSettings.allowedAutorotateToPortraitUpsideDown = false;
            PlayerSettings.bundleVersion = VersionConfig.GetVersionNumber(newVersionConfig.version).ToString();
            CSObjectWrapEditor.Generator.ClearAll();
            CSObjectWrapEditor.Generator.GenAll();
        }
        catch (Exception ex)
        {
            Debug.Log(ex);
        }
        finally
        {
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
        }
        VersionConfig.Copy(fromVersionConfig, newVersionConfig);
        newVersionConfig.buildTime = DateTime.Now.ToString("yy/MM/dd--HH:mm");
        newVersionConfig.buildIndex = packageIndex;
    }
        AssetDatabase.CreateAsset(newVersionConfig, newVersionConfigPath);
        EditorUtility.SetDirty(newVersionConfig);
        SetIconAndSplashImage(versionName);
        PlayerSettings.companyName = "TheSecondWorld";
        PlayerSettings.productName = newVersionConfig.productName;
        PlayerSettings.applicationIdentifier = newVersionConfig.bundleIdentifier;
        PlayerSettings.defaultInterfaceOrientation = UIOrientation.AutoRotation;
        PlayerSettings.allowedAutorotateToLandscapeLeft = true;
        PlayerSettings.allowedAutorotateToLandscapeRight = true;
        PlayerSettings.allowedAutorotateToPortrait = false;
        PlayerSettings.allowedAutorotateToPortraitUpsideDown = false;
        PlayerSettings.bundleVersion = newVersionConfig.version;
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
    }
    static VersionConfig GetVersionConfig(string _publisher, out string _versionName)
    {
        var lines = File.ReadAllLines(versionsFilePath);
@@ -328,8 +553,8 @@
        _versionName = string.Empty;
        return null;
    }
    }
    static void SetIconAndSplashImage(string _versionName)
    {
        var buildTarget = GetBuildTarget();
@@ -353,53 +578,15 @@
        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)
        {
            textureImporter.spritePackingTag = string.Empty;
            textureImporter.assetBundleName = string.Empty;
            var platformSetting = new TextureImporterPlatformSettings();
            switch (buildTarget)
            {
                case BuildTargetGroup.Android:
                    platformSetting.overridden = true;
                    platformSetting.allowsAlphaSplitting = false;
                    platformSetting.name = "Android";
                    platformSetting.maxTextureSize = 512;
                    platformSetting.format = TextureImporterFormat.ETC2_RGBA8;
                    platformSetting.compressionQuality = 1;
                    textureImporter.SetPlatformTextureSettings(platformSetting);
                    break;
                case BuildTargetGroup.iOS:
                    platformSetting.overridden = true;
                    platformSetting.allowsAlphaSplitting = false;
                    platformSetting.name = "iOS";
                    platformSetting.maxTextureSize = 512;
                    platformSetting.format = TextureImporterFormat.PVRTC_RGBA4;
                    platformSetting.compressionQuality = 1;
                    textureImporter.SetPlatformTextureSettings(platformSetting);
                    break;
            }
            AssetDatabase.ImportAsset(importerPath);
            EditorUtility.SetDirty(textureImporter);
        }
    }
    static BuildTargetGroup GetBuildTarget()
    {
#if UNITY_ANDROID
@@ -409,6 +596,6 @@
#else
        return BuildTargetGroup.Standalone;
#endif
    }
}
    }
}