少年修仙传客户端基础资源
hch
2024-05-10 f736485f1337e64475d54352fccc460b817c1441
0312 加密处理
14个文件已修改
212 ■■■■■ 已修改文件
Assets/Editor/AssetBundleBrowser/AssetBundleBuildTab.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/ScriptTemplate/ConfigDataTemplate.txt 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/Tool/AssetBundleBuildExtersion.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/Tool/AssetsVersionCmpMaker.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/Tool/AssetsVersionMaker.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/Tool/BytesVersionMaker.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/Tool/ClientPackage.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/Tool/ConfigClassGenerate.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/Tool/InGameDownTestWindow.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/Tool/TableTool.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Launch/AssetVersion.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Launch/InitialFunctionConfig.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Launch/LoadDll.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Launch/ResourcesModel.cs 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/AssetBundleBrowser/AssetBundleBuildTab.cs
@@ -670,7 +670,7 @@
            PrebuildCommand.GenerateAll();
            // 输出到AssetBundles目录
            var outputPath = Application.dataPath.Replace("Assets", m_UserData.m_OutputPath);
            outputPath = StringUtility.Contact(outputPath, "/logicbytes");
            outputPath = StringUtility.Contact(outputPath, "/daimazijie");
            if (Directory.Exists(outputPath))
                Directory.Delete(outputPath, true);
            //复制新生成的AOT dll到指定路径
@@ -692,7 +692,7 @@
            }
            // 输出到AssetBundles目录
            var outputPath = Application.dataPath.Replace("Assets", m_UserData.m_OutputPath);
            outputPath = StringUtility.Contact(outputPath, "/logicbytes");
            outputPath = StringUtility.Contact(outputPath, "/daimazijie");
            CopyHotUpdateDll(outputPath);
            MakeBytesVersionFile();
            AssetDatabase.Refresh();
@@ -700,9 +700,8 @@
        private void MakeBytesVersionFile()
        {
            ChangeBytes();
            var fileInfos = new List<FileInfo>();
            FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(m_UserData.m_OutputPath, "/logicbytes"), fileInfos);
            FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(m_UserData.m_OutputPath, "/daimazijie"), fileInfos);
            BytesVersionMaker.WriteAssetsVersionFile(Path.Combine(Directory.GetParent(Application.dataPath).FullName, m_UserData.m_OutputPath), fileInfos);
            Debug.Log("热更新代码更新完毕,生成md5文件");
        }
@@ -732,7 +731,7 @@
            for (int i = 0; i < AOTGenericReferences.PatchedAOTAssemblyList.Count; i++)
            {
                string dllFile = StringUtility.Contact(aotDir, AOTGenericReferences.PatchedAOTAssemblyList[i]);
                var outDllFile = outputPath + "/" + AOTGenericReferences.PatchedAOTAssemblyList[i] + ".bytes";
                var outDllFile = outputPath + "/" + AssetVersionUtility.EncodeFileName(AOTGenericReferences.PatchedAOTAssemblyList[i]) + ".bytes";
                if (!File.Exists(dllFile))
                {
                    DebugEx.LogErrorFormat("错误:{0} 不存在", dllFile);
@@ -740,7 +739,8 @@
                }
                FileExtersion.MakeSureDirectory(outDllFile);
                File.Copy(dllFile, outDllFile, true);
                //File.Copy(dllFile, outDllFile, true);
                ChangeBytes(dllFile, outDllFile);
            }
        }
@@ -770,7 +770,8 @@
                    return;
                }
                FileExtersion.MakeSureDirectory(outDllFile);
                File.Copy(dllFile, outDllFile, true);
                //File.Copy(dllFile, outDllFile, true);
                ChangeBytes(dllFile, outDllFile);
            }
            //HybridCLR的Settings面板上设置的要热更的DLL资源
@@ -785,7 +786,8 @@
                    return;
                }
                FileExtersion.MakeSureDirectory(outDllFile);
                File.Copy(dllFile, outDllFile, true);
                //File.Copy(dllFile, outDllFile, true);
                ChangeBytes(dllFile, outDllFile);
            }
            //HybridCLR的Settings面板上设置的预留的热更新dlls
@@ -800,7 +802,8 @@
                    continue;
                }
                FileExtersion.MakeSureDirectory(outDllFile);
                File.Copy(dllFile, outDllFile, true);
                //File.Copy(dllFile, outDllFile, true);
                ChangeBytes(dllFile, outDllFile);
            }
        }
@@ -912,20 +915,24 @@
            FileExtersion.GetAllDirectoryFileInfos(m_UserData.m_OutputPath, fileInfos);
            AssetsVersionMaker.WriteAssetsVersionFile(Path.Combine(Directory.GetParent(Application.dataPath).FullName, m_UserData.m_OutputPath), fileInfos);
            Debug.Log("生成AssetsVersion.txt文件完毕");
            Debug.Log("AVersion.txt文件完毕");
        }
        void ChangeBytes()
        void ChangeBytes(string originalDllBytesFilePath, string outDllFile)
        {
            string path = StringUtility.Contact(m_UserData.m_OutputPath, "/logicbytes/");
            // 原始DLL字节内容文件的路径
            string originalDllBytesFilePath = path + "Assembly-CSharp.dll.bytes";
            string path = StringUtility.Contact(m_UserData.m_OutputPath, "/daimazijie/");
            // 临时文件的路径,用于写入"abc"后再追加原始DLL字节内容  
            string tempFilePath = path + "temp_Assembly-CSharp.dll.bytes";
            string tempFilePath = AssetVersionUtility.EncodeFileName(outDllFile);
            // 如果目标文件存在,则删除它
            if (File.Exists(tempFilePath))
            {
                File.Delete(tempFilePath);
            }
            // 要写入的字符串"abc"  
            string contentToWrite = "abc";
            string contentToWrite = "cbg";
            // 将"abc"转换为字节数组  
            byte[] abcBytes = Encoding.ASCII.GetBytes(contentToWrite);
@@ -942,26 +949,8 @@
                fs.Write(originalDllBytes, 0, originalDllBytes.Length);
            }
            ReplaceFile(tempFilePath, originalDllBytesFilePath);
        }
        public void ReplaceFile(string sourceFile, string targetFile)
        {
            // 确保源文件存在
            if (!File.Exists(sourceFile))
            {
                throw new FileNotFoundException("源文件未找到:" + sourceFile);
            }
            // 如果目标文件存在,则删除它
            if (File.Exists(targetFile))
            {
                File.Delete(targetFile);
            }
            // 将源文件重命名为目标文件
            File.Move(sourceFile, targetFile);
        }
        static int packageIndex
Assets/Editor/ScriptTemplate/ConfigDataTemplate.txt
@@ -9,6 +9,7 @@
using System;
using UnityEngine;
using LitJson;
using System.Linq;
public partial class #ClassName#
{
@@ -125,6 +126,10 @@
                try 
                {
                    var line = lines[i];
                    if (!AssetSource.refdataFromEditor)
                    {
                        line = new string(line.Reverse().ToArray());
                    }
                    var index = line.IndexOf("\t");
                    if (index == -1)
                    {
@@ -163,7 +168,11 @@
                {
                    try 
                    {
                       var line = lines[i];
                        var line = lines[i];
                        if (!AssetSource.refdataFromEditor)
                        {
                            line = new string(line.Reverse().ToArray());
                        }
                        var index = line.IndexOf("\t");
                        if (index == -1)
                        {
Assets/Editor/Tool/AssetBundleBuildExtersion.cs
@@ -3,6 +3,8 @@
using UnityEngine;
using UnityEditor;
using System.IO;
using System.Text;
using System.Linq;
public class AssetBundleBuildExtersion
{
@@ -42,16 +44,17 @@
        for (int i = 0; i < targetAssetBundles.Count; i++)
        {
            var assetBundleBuild = new AssetBundleBuild();
            assetBundleBuild.assetBundleName = targetAssetBundles[i];
            assetBundleBuild.assetBundleName = AssetVersionUtility.EncodeFileName(targetAssetBundles[i]);
            assetBundleBuild.assetNames = AssetDatabase.GetAssetPathsFromAssetBundle(targetAssetBundles[i]);
            assets.Add(assetBundleBuild);
        }
        var rootPath = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, category);
        var mainFile = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, GetMainFestFileName(buildTarget));//改名字前
        var mainFileRename = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, category, "_assetbundle");//改名字后
        var mainFileRename = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, AssetVersionUtility.EncodeFileName(category), "_abundle");//改名字后
        var manifest = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, GetMainFestFileName(buildTarget), ".manifest");
        var manifestRename = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, category, "_assetbundle.manifest");
        var manifestRename = StringUtility.Contact(output, Path.AltDirectorySeparatorChar, AssetVersionUtility.EncodeFileName(category), "_abundle.manifest");
        if (rebuild && Directory.Exists(rootPath))
            Directory.Delete(rootPath, true);
Assets/Editor/Tool/AssetsVersionCmpMaker.cs
@@ -19,12 +19,12 @@
        for (int i = 0; i < _fileInfos.Count; i++)
        {
            var fileInfo = _fileInfos[i];
            if (fileInfo.Name == "AssetsVersion.txt")
            if (fileInfo.Name == "AVersion.txt")
            {
                continue;
            }
            if (fileInfo.Name == "AssetsVersionCmp.txt")
            if (fileInfo.Name == "AVersionCmp.txt")
            {
                continue;
            }
@@ -38,7 +38,7 @@
            {
                continue;
            }
            if (fileInfo.FullName.Contains("logicbytes"))
            if (fileInfo.FullName.Contains("daimazijie"))
            {
                continue;
            }
@@ -51,7 +51,7 @@
            lines.Add(StringUtility.Contact(relativePath, "\t", extersion, "\t", fileSize, "\t", md5));
        }
        var assetVersionFile = StringUtility.Contact(Application.dataPath, "/Resources/AssetsVersionCmp.txt");
        var assetVersionFile = StringUtility.Contact(Application.dataPath, "/Resources/AVersionCmp.txt");
        if (File.Exists(assetVersionFile))
        {
            File.Delete(assetVersionFile);
Assets/Editor/Tool/AssetsVersionMaker.cs
@@ -16,11 +16,11 @@
        for (int i = 0; i < _fileInfos.Count; i++)
        {
            var fileInfo = _fileInfos[i];
            if (fileInfo.Name == "AssetsVersion.txt")
            if (fileInfo.Name == "AVersion.txt")
            {
                continue;
            }
            if (fileInfo.Name == "AssetsVersionCmp.txt")
            if (fileInfo.Name == "AVersionCmp.txt")
            {
                continue;
            }
@@ -29,7 +29,7 @@
            {
                continue;
            }
            if (fileInfo.FullName.Contains("logicbytes"))
            if (fileInfo.FullName.Contains("daimazijie"))
            {
                continue;
            }
@@ -42,13 +42,13 @@
            lines.Add(StringUtility.Contact(relativePath, "\t", extersion, "\t", fileSize, "\t", md5));
        }
        var assetVersionFile = StringUtility.Contact(_path, Path.DirectorySeparatorChar, "AssetsVersion.txt");
        var assetVersionFile = StringUtility.Contact(_path, Path.DirectorySeparatorChar, "AVersion.txt");
        if (File.Exists(assetVersionFile))
        {
            File.Delete(assetVersionFile);
        }
        File.WriteAllText(StringUtility.Contact(_path, Path.DirectorySeparatorChar, "AssetsVersion.txt"), string.Join(FileExtersion.lineSplit, lines.ToArray()));
        File.WriteAllText(StringUtility.Contact(_path, Path.DirectorySeparatorChar, "AVersion.txt"), string.Join(FileExtersion.lineSplit, lines.ToArray()));
    }
}
Assets/Editor/Tool/BytesVersionMaker.cs
@@ -16,7 +16,7 @@
        for (int i = 0; i < _fileInfos.Count; i++)
        {
            var fileInfo = _fileInfos[i];
            if (fileInfo.Name == "logicbytes.txt")
            if (fileInfo.Name == "daimazijie.txt")
            {
                continue;
            }
@@ -34,13 +34,13 @@
            lines.Add(StringUtility.Contact(relativePath, "\t", extersion, "\t", fileSize, "\t", md5));
        }
        var assetVersionFile = StringUtility.Contact(_path, Path.DirectorySeparatorChar, "logicbytes.txt");
        var assetVersionFile = StringUtility.Contact(_path, Path.DirectorySeparatorChar, "daimazijie.txt");
        if (File.Exists(assetVersionFile))
        {
            File.Delete(assetVersionFile);
        }
        File.WriteAllText(StringUtility.Contact(_path, Path.DirectorySeparatorChar, "logicbytes.txt"), string.Join(FileExtersion.lineSplit, lines.ToArray()));
        File.WriteAllText(StringUtility.Contact(_path, Path.DirectorySeparatorChar, "daimazijie.txt"), string.Join(FileExtersion.lineSplit, lines.ToArray()));
    }
}
Assets/Editor/Tool/ClientPackage.cs
@@ -574,13 +574,13 @@
    //该文件在打包时生成 记录随包的所有资源的信息
    //该文件记录的资源在包中肯定存在,所以不用去取指定的资源文件获得FileInfo 计算MD5
    //通过文件和AssetsVersion.txt的文件做比较,来判断是否需要下载资源
    //logicbytes.txt 包含元数据和代码 如果不随包也要处理
    //daimazijie.txt 包含元数据和代码 如果不随包也要处理
    static void MakePackageMD5File()
    {
        var fileInfos = new List<FileInfo>();
        FileExtersion.GetAllDirectoryFileInfos(ResourcesPath.Instance.StreamingAssetPath, fileInfos);
        AssetsVersionCmpMaker.WriteAssetsVersionFile(ResourcesPath.Instance.StreamingAssetPath, fileInfos);
        Debug.Log("--生成AssetsVersionCmp.txt文件完毕");
        Debug.Log("--生成AVersionCmp.txt文件完毕");
    }
    private static void PreBuild(string _publisher, int _buildIndex)
Assets/Editor/Tool/ConfigClassGenerate.cs
@@ -267,12 +267,18 @@
    }
    static string configClassPath = "Assets/Scripts/Core/GameEngine/Model/Config";
    static string configILClassPath = "LogicProject/Src/Config";
    static string configILClassPath = "Assets/Scripts/LogicProject/Config";
    static string templatePath = "Assets/Editor/ScriptTemplate/ConfigDataTemplate.txt";
    public static void CreatNewConfigClass(string _name, bool isIL)
    {
        string newConfigPath;
        newConfigPath = configILClassPath + string.Format("/IL{0}Config.cs", _name);
        if (File.Exists(newConfigPath))
        {
            //默认兼容旧的ILRuntime表,如果要生成新的先删除旧的表代码
            isIL = true;
        }
        if (isIL)
        {
            newConfigPath = configILClassPath + string.Format("/IL{0}Config.cs", _name);
Assets/Editor/Tool/InGameDownTestWindow.cs
@@ -53,7 +53,7 @@
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        InGameDownTestUtility.isReadVesionEx = EditorGUILayout.Toggle("是否下载热更代码", InGameDownTestUtility.isReadVesionEx);
        EditorGUILayout.TextField("开启下载热更代码,会读取VersionConfigEx.txt 分支需配置正确, 检测logicbytes.txt");
        EditorGUILayout.TextField("开启下载热更代码,会读取VersionConfigEx.txt 分支需配置正确, 检测daimazijie.txt");
    }
}
Assets/Editor/Tool/TableTool.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using UnityEditor;
@@ -249,13 +250,32 @@
            Directory.CreateDirectory(configOutPutPath);
        }
        string filePath = configOutPutPath + "/" + fileName + ".txt";
        string filePath = configOutPutPath + "/" + AssetVersionUtility.EncodeFileName(fileName) + ".txt";
        if (File.Exists(filePath))
        {
            File.Delete(filePath);
        }
        File.Copy(fileInfo.FullName, filePath);
        if (fileName.Contains("MapData_"))
        {
            File.Copy(fileInfo.FullName, filePath);
        }
        else
        {
            //按行读取文件,并将每行内容倒序写入新文件
            using (StreamReader sr = new StreamReader(fileInfo.FullName, Encoding.Default))
            {
                using (StreamWriter sw = new StreamWriter(filePath, false, Encoding.Default))
                {
                    string line;
                    while ((line = sr.ReadLine()) != null)
                    {
                        sw.WriteLine(new string(line.Reverse().ToArray()));
                    }
                }
            }
        }
    }
    /// <summary>
Assets/Launch/AssetVersion.cs
@@ -5,7 +5,7 @@
{
    public class AssetVersion
    {
        //参考文本 logicbytes/Assembly-CSharp.dll.bytes    .bytes    7360512    71157bfdecb53e8a580432621f3725c7
        //参考文本 daimazijie/Assembly-CSharp.dll.bytes    .bytes    7360512    71157bfdecb53e8a580432621f3725c7
        string m_RelativePath = string.Empty;
        public string relativePath { get { return m_RelativePath; } }
Assets/Launch/InitialFunctionConfig.cs
@@ -7,7 +7,7 @@
using System.IO;
using System;
using UnityEngine;
using System.Linq;
namespace StartAot
{
@@ -122,6 +122,9 @@
                int lineIndex = 0;
                while ((line = reader.ReadLine()) != null)
                {
#if !UNITY_EDITOR
                    line = new string(line.Reverse().ToArray());
#endif
                    lineIndex++;
                    if (lineIndex <= 3)
                    {
Assets/Launch/LoadDll.cs
@@ -108,15 +108,10 @@
                {
                    // 特殊处理
                    byte[] assetData;
                    if (asset == "Assembly-CSharp.dll.bytes")
                    {
                        assetData = new byte[www.downloadHandler.data.Length - 3];
                        Array.Copy(www.downloadHandler.data, 3, assetData, 0, assetData.Length);
                    }
                    else
                    {
                        assetData = www.downloadHandler.data;
                    }
                    assetData = new byte[www.downloadHandler.data.Length - 3];
                    Array.Copy(www.downloadHandler.data, 3, assetData, 0, assetData.Length);
                    Debug.Log($"dll:{asset}  size:{assetData.Length}");
                    s_assetDatas[asset] = assetData;
@@ -142,7 +137,7 @@
            HomologousImageMode mode = HomologousImageMode.SuperSet;
            foreach (var aotDllName in AOTMetaAssemblyFiles)
            {
                if (aotDllName == "Assembly-CSharp.dll.bytes")
                if (aotDllName == ResourcesModel.Instance.EncodeFileName("Assembly-CSharp.dll.bytes"))
                    continue;
                // 加载assembly对应的dll,会自动为它hook。一旦aot泛型函数的native函数不存在,用解释器版本代码
                LoadImageErrorCode err = RuntimeApi.LoadMetadataForAOTAssembly(ReadBytesFromStreamingAssets(aotDllName), mode);
@@ -154,7 +149,7 @@
        {
#if !UNITY_EDITOR
        LoadMetadataForAOTAssemblies();
        _hotUpdateAss = Assembly.Load(ReadBytesFromStreamingAssets("Assembly-CSharp.dll.bytes"));
        _hotUpdateAss = Assembly.Load(ResourcesModel.Instance.EncodeFileName("Assembly-CSharp.dll.bytes"));
        s_assetDatas = null;
#else
            if (_hotUpdateAss == null)
Assets/Launch/ResourcesModel.cs
@@ -5,7 +5,7 @@
using LitJsonForAot;
using System.Collections;
using UnityEngine.Networking;
using System.Linq;
namespace StartAot
{
@@ -13,7 +13,7 @@
    {
        //不下载时本地安卓测试路径
        public string assetBundlesPath { get; private set; }
        public static string bytesFolderName = "logicbytes/";
        public static string bytesFolderName = "daimazijie/";
        public string StreamingAssetPath { get; private set; }
        public string ExternalStorePath { get; private set; }
@@ -64,7 +64,7 @@
        string assetBytesUrl;
        //从网络获取的资源版本信息
        public Dictionary<string, AssetVersion> assetVersions = new Dictionary<string, AssetVersion>();
        //本地LogicBytes文件和 assetVersions 比较是否需要下载
        //本地daimazijie文件和 assetVersions 比较是否需要下载
        public Dictionary<string, AssetVersion> localAssetVersions = new Dictionary<string, AssetVersion>();
        public static string versionUrlResult { get; private set; }
@@ -230,9 +230,48 @@
        }
        //将文件名倒序,加上_aop后缀
        public string EncodeFileName(string name)
        {
            name = name.Replace("\\", "/");
            int index = name.LastIndexOf("/");
            string headString;
            if (index >= 0)
            {
                int dotLastIndex = name.LastIndexOf(".");
                if (dotLastIndex == -1)
                {
                    headString = name.Substring(0, index);
                    name = name.Substring(index + 1);
                    return StringUtility.Contact(headString, "/", new string(name.Reverse().ToArray()), "_aop");
                }
                else
                {
                    headString = name.Substring(0, index);
                    var ext = name.Substring(dotLastIndex);
                    name = name.Substring(index + 1, dotLastIndex - index - 1);
                    return StringUtility.Contact(headString, "/", new string(name.Reverse().ToArray()), "_aop", ext);
                }
            }
            else
            {
                int dotLastIndex = name.LastIndexOf(".");
                if (dotLastIndex == -1)
                    return StringUtility.Contact(new string(name.Reverse().ToArray()), "_aop");
                else
                {
                    var ext = name.Substring(dotLastIndex);
                    name = name.Substring(0, dotLastIndex);
                    return StringUtility.Contact(new string(name.Reverse().ToArray()), "_aop", ext);
                }
            }
        }
        public string GetAssetFilePath(string _assetKey)
        {
            _assetKey = EncodeFileName(_assetKey);
            var path = Path.Combine(ExternalStorePath, _assetKey);
            if (!File.Exists(path))
            {
@@ -333,7 +372,7 @@
        //LogicBytes文件的MD5信息
        public void RequestLogicBytes()
        {
            var remoteURL = string.Concat(versionInfo.GetResourcesURL(VersionConfigEx.Get().branch), fixPath, "/logicbytes.txt");
            var remoteURL = string.Concat(versionInfo.GetResourcesURL(VersionConfigEx.Get().branch), fixPath, "/daimazijie.txt");
            //var localURL = string.Concat(.ExternalStorePath, "/logicbytes.txt");
            assetBytesUrl = remoteURL;
            Debug.Log("http地址:logicbytesUrl  " + assetBytesUrl);
@@ -434,7 +473,7 @@
            if (isPCTestDownLoad || Application.isMobilePlatform)
            {
                //读取的一定是StreamingAssetPath路径
                StartCoroutine(ReadText("logicbytes", (isOK, value) =>
                StartCoroutine(ReadText("daimazijie", (isOK, value) =>
                {
                    if (isOK)
                        InitLocalLogicbytes(value);