/// <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); }
/// <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); }