/// <summary> /// 读取AB包MD5文件,找出改变的ab包 /// </summary> /// <param name="abmd5Path">ab包md5文件路径</param> /// <param name="hotCount">热更次数</param> static void ReadMd5Com(string abmd5Path, string hotCount) { m_PackedMD5.Clear(); using (FileStream fs = new FileStream(abmd5Path, FileMode.Open, FileAccess.Read)) { BinaryFormatter bf = new BinaryFormatter(); ABMD5 abmd5 = bf.Deserialize(fs) as ABMD5; foreach (ABMD5Base abmd5Base in abmd5.ABMD5List) { m_PackedMD5.Add(abmd5Base.Name, abmd5Base); } } //搜集变化的AB包的list List <string> changeList = new List <string>(); //获取当前AB包目录下的所有的AB包文件 DirectoryInfo directory = new DirectoryInfo(m_BundleTargetPath); FileInfo[] files = directory.GetFiles("*", SearchOption.AllDirectories); for (int i = 0; i < files.Length; ++i) { //过滤meta文件和mainfest文件 if (!files[i].Name.EndsWith(".meta") && !files[i].Name.EndsWith(".manifest")) { string name = files[i].Name; string md5 = MD5Manager.Instance.BuildFileMd5(files[i].FullName); ABMD5Base abmd5Base = null; //新打的ab包 if (!m_PackedMD5.ContainsKey(name)) { changeList.Add(name); } else { if (m_PackedMD5.TryGetValue(name, out abmd5Base)) { //变化了的AB包 if (md5 != abmd5Base.Md5) { changeList.Add(name); } } } } } CopyABAndGeneratXml(changeList, hotCount); }
/// <summary> /// 读取本地资源MD5码 /// </summary> void ReadMD5() { m_PackedMd5.Clear(); TextAsset md5 = Resources.Load <TextAsset>("ABMD5"); if (md5 == null) { Debug.LogError("未读取到本地MD5"); return; } using (MemoryStream stream = new MemoryStream(md5.bytes)) { BinaryFormatter bf = new BinaryFormatter(); ABMD5 abmd5 = bf.Deserialize(stream) as ABMD5; foreach (ABMD5Base abmd5Base in abmd5.ABMD5List) { m_PackedMd5.Add(abmd5Base.Name, abmd5Base); } } }
/// <summary> /// 写入AB包的MD5信息 /// </summary> static void WriteABMD5() { //获取AssetBundle文件夹下的所有信息 DirectoryInfo directoryInfo = new DirectoryInfo(m_BundleTargetPath); FileInfo[] files = directoryInfo.GetFiles("*", SearchOption.AllDirectories); ABMD5 abmd5 = new ABMD5(); abmd5.ABMD5List = new List <ABMD5Base>(); for (int i = 0; i < files.Length; ++i) { //过滤meta文件和mainfest文件 if (!files[i].Name.EndsWith(".meta") && !files[i].Name.EndsWith(".manifest")) { ABMD5Base abmd5Base = new ABMD5Base(); abmd5Base.Name = files[i].Name; abmd5Base.Md5 = MD5Manager.Instance.BuildFileMd5(files[i].FullName); abmd5Base.Size = files[i].Length / 1024.0f; abmd5.ABMD5List.Add(abmd5Base); } } string ABMD5Path = Application.dataPath + "/Resources/ABMD5.bytes"; BinarySerializeOpt.BinarySerilize(ABMD5Path, abmd5); //将打包的版本拷贝到外部进行储存 if (!Directory.Exists(m_VersionsMd5Path)) { Directory.CreateDirectory(m_VersionsMd5Path); } string targetPath = m_VersionsMd5Path + "/ABMD5_" + PlayerSettings.bundleVersion + ".bytes"; if (File.Exists(targetPath)) { File.Delete(targetPath); } File.Copy(ABMD5Path, targetPath); }