From 6b6d10e0cf634dcfa862f88aa140602103e5a733 Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期四, 01 十一月 2018 17:08:02 +0800
Subject: [PATCH] 3335 资源打包使用7zip压缩

---
 Assets/Editor/Tool/ClientPackage.cs |   77 +++++++++++++++++++++++++++++---------
 1 files changed, 59 insertions(+), 18 deletions(-)

diff --git a/Assets/Editor/Tool/ClientPackage.cs b/Assets/Editor/Tool/ClientPackage.cs
index f30872d..77f2ee8 100644
--- a/Assets/Editor/Tool/ClientPackage.cs
+++ b/Assets/Editor/Tool/ClientPackage.cs
@@ -135,11 +135,14 @@
         if (halfPackages.Count > 0)
         {
             Config.Instance.LoadPriorBundleConfig();
-            FileExtersion.DirectoryCopy(_assetBundlePath, ResourcesPath.Instance.StreamingAssetPath);
 
-            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);
@@ -151,13 +154,13 @@
                 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);
@@ -169,13 +172,13 @@
                 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);
@@ -187,13 +190,13 @@
                 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);
@@ -205,8 +208,46 @@
                 var prior = PriorBundleConfig.GetAssetPrior(AssetVersion.AssetCategory.Effect, fileName);
                 if (prior > AssetPrior)
                 {
-                    File.Delete(file.FullName);
+                    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 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("姝e湪鍘嬬缉璧勬簮", item.Name, (float)completeCount / totalCount);
+#elif UNITY_IOS
+                File.Copy(item.FullName,to,true);
+#endif
+
+                completeCount++;
             }
 
             for (int i = 0; i < halfPackages.Count; i++)
@@ -286,7 +327,7 @@
         PlayerSettings.Android.keystorePass = versionConfig.keystorePassword;
         PlayerSettings.Android.keyaliasName = versionConfig.keystoreAlias;
         PlayerSettings.Android.keyaliasPass = versionConfig.keystoreAliasPassword;
-        PlayerSettings.Android.targetSdkVersion = AndroidSdkVersions.AndroidApiLevel22;
+       // PlayerSettings.Android.targetSdkVersion = AndroidSdkVersions.AndroidApiLevel22;
         PlayerSettings.Android.bundleVersionCode = VersionConfig.GetVersionNumber(versionConfig.version);
 
         PlayerSettings.enableInternalProfiler = _development;

--
Gitblit v1.8.0