Example #1
0
        //读取streamingAssets path里面的abinfo
        private static void ReadAssetToABInfos(string[] allBundles, FileManifest streamingManifest)
        {
            string title = "create crc list content ";

            var   allABInfos = new List <ABInfo>();
            float i          = 0;
            float allLen     = allBundles.Length;

            //忽略列表
            Dictionary <string, bool> ignore = new Dictionary <string, bool>();

            ignore.Add(CUtils.GetRightFileName(Common.CRC32_FILELIST_NAME), true);
            ignore.Add(CUtils.GetRightFileName(Common.CRC32_VER_FILENAME), true);
            ignore.Add(CUtils.GetRightFileName(CUtils.platform), true);

            string extension;

            foreach (var str in allBundles)
            {
                string url     = Path.Combine(Application.dataPath, str);
                uint   outCrc  = 0;
                uint   fileLen = 0;
                string abName  = str.Replace("\\", "/");
                string key     = EditorUtils.GetAssetBundleName(abName);
                //后缀替换
                extension = System.IO.Path.GetExtension(key);
                if (extension.Equals(Common.DOT_BYTES))//lua
                {
                    key = key.Replace(extension, Common.CHECK_ASSETBUNDLE_SUFFIX);
                }

                if (!ignore.ContainsKey(key))
                {
                    outCrc = CrcCheck.GetLocalFileCrc(url, out fileLen);
                    var extendsABinfo = streamingManifest.GetABInfo(key);
                    if (extendsABinfo == null)
                    {
                        extendsABinfo = new ABInfo(key, outCrc, fileLen, 0);
                        streamingManifest.Add(extendsABinfo);
                    }
                    extendsABinfo.priority  = 0;
                    extendsABinfo.crc32     = outCrc;
                    extendsABinfo.size      = fileLen;
                    extendsABinfo.assetPath = str;
                    allABInfos.Add(extendsABinfo);
                }
                EditorUtility.DisplayProgressBar(title, title + "=>" + i.ToString() + "/" + allLen.ToString(), i / allLen);
                i++;
            }

            EditorUtility.ClearProgressBar();
        }
Example #2
0
        /// <summary>
        /// 2 Creates the content of the crc list.
        /// </summary>
        /// <returns>The crc list content.</returns>
        /// <param name="allBundles">All bundles.</param>
        /// <param name="manualFileList">manual file list.</param>
        public static List <ABInfo>[] CreateCrcListContent(string[] allBundles, FileManifest firstCrcDict, FileManifest streamingManifest, FileManifest manualFileList)
        {
            string title = "create crc list content ";

            List <ABInfo>[] abInfoArray  = new List <ABInfo> [2];
            var             diffManifest = new List <ABInfo>();

            abInfoArray[0] = diffManifest;

            float i      = 0;
            float allLen = allBundles.Length;

            //忽略列表
            Dictionary <string, bool> ignore = new Dictionary <string, bool>();

            ignore.Add(CUtils.GetRightFileName(Common.CRC32_FILELIST_NAME), true);
            ignore.Add(CUtils.GetRightFileName(Common.CRC32_VER_FILENAME), true);
            ignore.Add(CUtils.GetRightFileName(CUtils.platform), true);

            string extension;

            foreach (var str in allBundles)
            {
                string url     = Path.Combine(Application.dataPath, str);
                uint   outCrc  = 0;
                uint   fileLen = 0;
                string abName  = str.Replace("\\", "/");
                string key     = BuildScript.GetAssetBundleName(abName);
                //后缀替换
                extension = System.IO.Path.GetExtension(key);
                if (string.IsNullOrEmpty(extension))
                {
                    key = key + Common.CHECK_ASSETBUNDLE_SUFFIX;
                }
                else if (extension.Equals(Common.DOT_BYTES))
                {
                    key = key.Replace(extension, Common.CHECK_ASSETBUNDLE_SUFFIX);
                }

                if (!ignore.ContainsKey(key))
                {
                    outCrc = CrcCheck.GetLocalFileCrc(url, out fileLen);
                    var extendsABinfo = streamingManifest.GetABInfo(key);
                    if (extendsABinfo == null)
                    {
                        extendsABinfo = new ABInfo(key, outCrc, fileLen, 0);
                        streamingManifest.Add(extendsABinfo);
                    }

                    extendsABinfo.crc32     = outCrc;
                    extendsABinfo.size      = fileLen;
                    extendsABinfo.assetPath = str;

                    if (firstCrcDict != null)
                    {
                        ABInfo localFirstInfo = null;
                        if (!firstCrcDict.CheckABCrc(extendsABinfo))
                        {
                            var newAbinfo = extendsABinfo.Clone();
                            newAbinfo.assetPath = str;
                            diffManifest.Add(newAbinfo);
                        }
                        else if ((localFirstInfo = firstCrcDict.GetABInfo(extendsABinfo.abName)) != null && !extendsABinfo.EqualsDependencies(localFirstInfo)) //dependencies change
                        {
                            var newAbinfo = extendsABinfo.Clone();
                            newAbinfo.assetPath = str;
                            diffManifest.Add(newAbinfo);
                        }
                    }
                }
                EditorUtility.DisplayProgressBar(title, title + "=>" + i.ToString() + "/" + allLen.ToString(), i / allLen);
                i++;
            }

            // CrcCheck.Clear();
            EditorUtility.ClearProgressBar();
            return(abInfoArray);
        }
Example #3
0
        /// <summary>
        /// 1 读取首包,找出忽略文件
        /// </summary>
        /// <param name="ignoreFiles">Ignore files.</param>
        public static bool ReadFirst(out FileManifest firstCrcDict, out FileManifest streamingManifest, FileManifest extensionFileManifest)
        {
            // string title = "read first crc file list";
            bool firstExists = false;

            firstCrcDict = null;
            HugulaExtensionFolderEditor.instance = null;

            string readPath      = Path.Combine(FirstOutReleasePath, CUtils.platform);
            string firstFileName = CUtils.InsertAssetBundleName(CUtils.GetRightFileName(Common.CRC32_FILELIST_NAME), "_v" + CodeVersion.CODE_VERSION.ToString());

            readPath = Path.Combine(readPath, firstFileName);
            Debug.Log(readPath);

            //check tmp directory
            if (!Directory.Exists("Assets/Tmp"))
            {
                Directory.CreateDirectory("Assets/Tmp");
            }

            // extensionFileManifest.Clear();
            //读取首包
            WWW abload = new WWW("file://" + readPath);

            if (string.IsNullOrEmpty(abload.error) && abload.assetBundle != null)
            {
                var      ab     = abload.assetBundle;
                Object[] assets = ab.LoadAllAssets();
                foreach (Object o in assets)
                {
                    if (o is FileManifest)
                    {
                        firstCrcDict = o as FileManifest;
                        firstExists  = true;
                        firstCrcDict.WriteToFile("Assets/Tmp/firstManifest.txt");
                        Debug.Log(firstCrcDict.Count);
                    }
                }
                ab.Unload(false);
            }
            else
            {
                Debug.LogWarning(abload.error + "no frist packeage in " + readPath);
            }
            abload.Dispose();

            //读取本地AB包AssetBundleManifest
            var fileListName = Common.CRC32_FILELIST_NAME;
            var url          = CUtils.PathCombine(CUtils.GetRealStreamingAssetsPath(), CUtils.GetRightFileName(fileListName));

            Debug.Log(url);
            // url = CUtils.GetAndroidABLoadPath(url);
            AssetBundle assetbundle = AssetBundle.LoadFromFile(url);
            var         assets1     = assetbundle.LoadAllAssets <FileManifest>();
            uint        len         = 0;
            var         crc32       = CrcCheck.GetLocalFileCrc(url, out len);

            var streamingManifest1 = assets1[0];

            assetbundle.Unload(false);
            streamingManifest        = streamingManifest1;
            streamingManifest1.crc32 = crc32;
            Debug.Log(streamingManifest1.appNumVersion);
            Debug.Log(streamingManifest1.crc32);

            //读取忽略扩展包
            System.Action <string, int> AddExtensionFileManifest = (string ab, int priority1) =>
            {
                var abinfo = streamingManifest1.GetABInfo(ab);
                if (abinfo == null)
                {
                    abinfo = new ABInfo(ab, 0, 0, priority1);
                    streamingManifest1.Add(abinfo);
                }

                abinfo.priority = priority1;
                extensionFileManifest.Add(abinfo);
            };


            //读取忽略别名后缀
            // priority = FileManifestOptions.StreamingAssetsPriority;
            // var inclusionVariants = HugulaSetting.instance.inclusionVariants;
            // var allVariants = HugulaSetting.instance.allVariants;
            // string pattern = "";
            // string sp = "";
            // foreach (var s in allVariants)
            // {
            //     if (!inclusionVariants.Contains(s))
            //     {
            //         pattern += sp + @"\." + s + "$";
            //         sp = "|";
            //     }
            // }

            // if (!string.IsNullOrEmpty(pattern))
            // {
            //     // Debug.Log(pattern);
            //     var u3dList = ExportResources.getAllChildFiles(dinfo.FullName, pattern, null, true);
            //     foreach (var s in u3dList)
            //     {
            //         priority++;
            //         string ab = CUtils.GetAssetBundleName(s);
            //         ab = ab.Replace("\\", "/");
            //         AddExtensionFileManifest(ab, priority);
            //     }
            // }

            //读取手动加载排除资源
            string        firstStreamingPath = CUtils.realStreamingAssetsPath;
            DirectoryInfo dinfo    = new DirectoryInfo(firstStreamingPath);
            var           dircs    = dinfo.GetDirectories();
            var           priority = FileManifestOptions.ManualPriority;

            Debug.LogFormat("ManualPriority.priority={0}", priority);
            foreach (var dir in dircs)
            {
                var u3dList = ExportResources.getAllChildFiles(dir.FullName, @"\.meta$|\.manifest$|\.DS_Store$", null, false);
                foreach (var s in u3dList)
                {
                    priority++;
                    string ab = CUtils.GetAssetBundleName(s);
                    ab = ab.Replace("\\", "/");
                    AddExtensionFileManifest(ab, priority);
                }
            }

            //读取首包排除资源
            var firstLoadFiles = HugulaExtensionFolderEditor.instance.FirstLoadFiles;

            priority = FileManifestOptions.FirstLoadPriority;
            Debug.LogFormat("FirstLoadPriority.priority={0}", priority);
            var needLoadFirst = false;

            foreach (var s in firstLoadFiles)
            {
                var ab = CUtils.GetRightFileName(s);
                priority++;
                AddExtensionFileManifest(ab, priority);
                needLoadFirst = true;
            }

            if (!HugulaSetting.instance.spliteExtensionFolder)
            {
                needLoadFirst = false;
            }
            streamingManifest.hasFirstLoad = needLoadFirst;
            // AssetDatabase.SaveAssets();

            //读取自动下载资源
            var extensionFiles = HugulaExtensionFolderEditor.instance.ExtensionFiles;

            priority = FileManifestOptions.AutoHotPriority;
            Debug.LogFormat("AutoHotPriority.priority={0}", priority);

            foreach (var s in extensionFiles)
            {
                var ab = CUtils.GetRightFileName(s);
                priority++;
                AddExtensionFileManifest(ab, priority);
            }

            streamingManifest.WriteToFile("Assets/Tmp/streamingManifest0.txt");
            extensionFileManifest.WriteToFile("Assets/Tmp/manualFileList0.txt");
            EditorUtility.ClearProgressBar();
            return(firstExists);
        }
Example #4
0
        /// <summary>
        /// 1 读取首包,找出忽略文件
        /// </summary>
        /// <param name="ignoreFiles">Ignore files.</param>
        public static bool ReadFirst(string[] allBundles, out FileManifest firstCrcDict, out FileManifest streamingManifest, FileManifest extensionFileManifest)
        {
            // string title = "read first crc file list";
            bool firstExists = false;

            firstCrcDict = null;
            HugulaExtensionFolderEditor.instance = null;

            string readPath      = Path.Combine(FirstOutReleasePath, CUtils.platform);
            string firstFileName = CUtils.InsertAssetBundleName(CUtils.GetRightFileName(Common.CRC32_FILELIST_NAME), "_v" + CodeVersion.CODE_VERSION.ToString());

            readPath = Path.Combine(readPath, firstFileName);
            Debug.Log(readPath);

            //check tmp directory
            if (!Directory.Exists("Assets/Tmp"))
            {
                Directory.CreateDirectory("Assets/Tmp");
            }

            // extensionFileManifest.Clear();
            //读取首包
            WWW abload = new WWW("file://" + readPath);

            if (string.IsNullOrEmpty(abload.error) && abload.assetBundle != null)
            {
                var      ab     = abload.assetBundle;
                Object[] assets = ab.LoadAllAssets();
                foreach (Object o in assets)
                {
                    if (o is FileManifest)
                    {
                        firstCrcDict = o as FileManifest;
                        firstExists  = true;
                        firstCrcDict.WriteToFile("Assets/Tmp/firstPackageManifest.txt");
                        Debug.Log(firstCrcDict.Count);
                    }
                }
                ab.Unload(false);
            }
            else
            {
                Debug.LogWarning(abload.error + "no frist packeage in " + readPath);
            }
            abload.Dispose();

            //读取本地AB包AssetBundleManifest
            var         fileListName = Common.CRC32_FILELIST_NAME;
            var         url          = CUtils.PathCombine(CUtils.GetRealStreamingAssetsPath(), CUtils.GetRightFileName(fileListName));
            AssetBundle assetbundle  = AssetBundle.LoadFromFile(url);
            var         assets1      = assetbundle.LoadAllAssets <FileManifest>();
            uint        len          = 0;
            var         crc32        = CrcCheck.GetLocalFileCrc(url, out len);

            var streamingManifest1 = assets1[0];

            assetbundle.Unload(false);
            // streamingManifest = streamingManifest1;
            streamingManifest1.crc32 = crc32;
            Debug.Log(streamingManifest1.appNumVersion);
            Debug.Log(streamingManifest1.crc32);

            //读取assetbundle的crc和size
            ReadAssetToABInfos(allBundles, streamingManifest1);

            if (!HugulaSetting.instance.spliteExtensionFolder)//如果不分离文件
            {
                streamingManifest = streamingManifest1;
                streamingManifest.hasFirstLoad = false;
                streamingManifest.WriteToFile("Assets/Tmp/StreamingAssetsManifest.txt");
                extensionFileManifest.WriteToFile("Assets/Tmp/ExtensionFileManifest.txt");
                return(firstExists);
            }

            //读取忽略扩展包
            System.Action <string, int> AddExtensionFileManifest = (string ab, int priority1) =>
            {
                var abinfo = streamingManifest1.GetABInfo(ab);
                if (abinfo == null)
                {
                    Debug.LogWarningFormat("the file {0} is not exists. please check ExtenionFolder.txt", ab);
                    //  abinfo = new ABInfo(ab, 0, 0, priority1);
                    //  streamingManifest1.Add(abinfo);
                    return;
                }

                abinfo.priority = priority1;
                extensionFileManifest.Add(abinfo);
            };


            string firstStreamingPath = CUtils.realStreamingAssetsPath;
            var    needLoadFirst      = false;

            var onlyInclusionFiles      = HugulaExtensionFolderEditor.instance.OnlyInclusionFiles;//只包涵
            var onlyInclusionRightFiles = new List <string>();

            foreach (var f in onlyInclusionFiles)
            {
                onlyInclusionRightFiles.Add(CUtils.GetRightFileName(f));
            }

            var firstPriority       = FileManifestOptions.FirstLoadPriority;
            var firstLoadFiles      = HugulaExtensionFolderEditor.instance.FirstLoadFiles;//读取首包资源
            var firstLoadRightFiles = new List <string>();

            foreach (var f in firstLoadFiles)
            {
                firstLoadRightFiles.Add(CUtils.GetRightFileName(f));
            }


            var manualPriority      = FileManifestOptions.ManualPriority;
            var extensionFiles      = HugulaExtensionFolderEditor.instance.ExtensionFiles;//读取扩展文件资源
            var extensionRightFiles = new List <string>();

            foreach (var f in extensionFiles)
            {
                extensionRightFiles.Add(CUtils.GetRightFileName(f));
            }

            var autoPriority = FileManifestOptions.AutoHotPriority;
            Dictionary <int, int> priorityDic = new Dictionary <int, int>();

            priorityDic[firstPriority]  = firstPriority;
            priorityDic[manualPriority] = manualPriority;
            priorityDic[autoPriority]   = autoPriority;
            priorityDic[FileManifestOptions.StreamingAssetsPriority] = FileManifestOptions.StreamingAssetsPriority;

            //streamingAssets目录下的文件夹默认为手动加载
            DirectoryInfo dinfo = new DirectoryInfo(firstStreamingPath);
            var           dircs = dinfo.GetDirectories();

            foreach (var dir in dircs)
            {
                var u3dList = EditorUtils.getAllChildFiles(dir.FullName, @"\.meta$|\.manifest$|\.DS_Store$", null, false);
                foreach (var s in u3dList)
                {
                    string ab = CUtils.GetAssetBundleName(s);
                    ab = ab.Replace("\\", "/");
                    extensionRightFiles.Add(ab);
                }
            }

            var allAbInfos = streamingManifest1.allAbInfo;

            bool shouldInclude       = false;
            bool elseShouldInAutoHot = onlyInclusionRightFiles.Count > 0 && false;
            bool elseShouldInFirst   = onlyInclusionRightFiles.Count > 0;

            foreach (var abInfo in allAbInfos)
            {
                shouldInclude = onlyInclusionRightFiles.Contains(abInfo.abName);

                if (!shouldInclude && firstLoadRightFiles.Contains(abInfo.abName))//首次启动加载包
                {
                    priorityDic[firstPriority]++;
                    AddExtensionFileManifest(abInfo.abName, priorityDic[firstPriority]);
                    needLoadFirst = true;
                }
                else if (!shouldInclude && extensionRightFiles.Contains(abInfo.abName)) //手动加载
                {
                    priorityDic[manualPriority]++;
                    AddExtensionFileManifest(abInfo.abName, priorityDic[manualPriority]);
                }
                else if (!shouldInclude && elseShouldInAutoHot) //放入自动热更新包
                {
                    priorityDic[autoPriority]++;
                    AddExtensionFileManifest(abInfo.abName, priorityDic[autoPriority]);
                }
                else if (!shouldInclude && elseShouldInFirst)
                {
                    priorityDic[firstPriority]++;
                    AddExtensionFileManifest(abInfo.abName, priorityDic[firstPriority]);
                    needLoadFirst = true;
                }
            }

            if (!HugulaSetting.instance.spliteExtensionFolder)
            {
                needLoadFirst = false;
            }

            streamingManifest = streamingManifest1;
            streamingManifest.hasFirstLoad = needLoadFirst;
            streamingManifest.WriteToFile("Assets/Tmp/StreamingAssetsManifest.txt");
            extensionFileManifest.WriteToFile("Assets/Tmp/ExtensionFileManifest.txt");
            EditorUtility.ClearProgressBar();
            return(firstExists);
        }