public static void BuildAssetBuindles(BuildTarget buildTargetGroup, int version)
    {
        List <AssetBundleBuild> buildsList = new List <AssetBundleBuild>();

        foreach (var keyValue in m_abbuildDic)
        {
            buildsList.Add(keyValue.Value.GetBundleBuild());
        }
        BuildAssetBundleOptions m_options = BuildAssetBundleOptions.DeterministicAssetBundle | BuildAssetBundleOptions.ChunkBasedCompression;
        var assetBundleManifest           = BuildPipeline.BuildAssetBundles(PreOutPath(buildTargetGroup), buildsList.ToArray(),
                                                                            m_options, buildTargetGroup);

        ABDesc structs = new ABDesc();

        AddResrouceToAbDataStruct(assetBundleManifest, structs);

        m_currentCache.newVersion = m_curVersion;
        //1存储ResourceManager的描述文件,
        SaveABDataFile(structs, buildTargetGroup);
        //2将相应的ab拷贝到对应的文件夹中
        CopyABToUpdateForlder(buildTargetGroup);

        m_currentCache.assetList.Clear();
        foreach (var keyvalue in m_dependsDic)
        {
            m_currentCache.assetList.Add(keyvalue.Value.ToCacheData());
        }
        ABAssetDataUtil.SaveAssetCache(buildTargetGroup, m_currentCache);
    }
    static void SaveABDataFile(ABDesc abData, BuildTarget buildTargetGroup)
    {
        string outPath  = PreOutPath(buildTargetGroup);
        string fileName = "ABDatabase";

        if (m_currentCache.firstVersion != m_curVersion)
        {
            fileName = m_curVersion + "_ABDatabase";
        }
        outPath += "/" + m_curVersion;
        Directory.CreateDirectory(outPath);
        string path  = outPath + "/" + fileName + ".abMap";
        string json  = JsonMapper.ToJson(abData);
        var    bytes = System.Text.Encoding.UTF8.GetBytes(json);

        if (File.Exists(path))
        {
            File.Delete(path);
        }
        using (Stream file = File.Create(path))
        {
            file.Write(bytes, 0, bytes.Length);
            file.Close();
        }
        if (m_currentCache.firstVersion == m_currentCache.newVersion)
        {
            var newPath = Application.streamingAssetsPath + "/AssetBundles/" + fileName + ".abMap";
            if (File.Exists(newPath))
            {
                File.Delete(newPath);
            }
            using (Stream file = File.Create(newPath))
            {
                file.Write(bytes, 0, bytes.Length);
                file.Close();
            }
        }
    }
    private static void AddResrouceToAbDataStruct(AssetBundleManifest manifest,
                                                  ABDesc structs)
    {
        foreach (var build in m_abbuildDic)
        {
            if (build.Value.bundleId.version >= m_curVersion)
            {
                foreach (string fileName in build.Value.fileList)
                {
                    if (fileName.EndsWith("unity"))
                    {
                        ABSceneDesc sceneData = new ABSceneDesc();
                        sceneData.m_sceneName   = fileName;
                        sceneData.m_bundleName  = build.Value.BundleName;
                        sceneData.m_ressVersion = build.Value.bundleId.version;
                        structs.m_scenes.Add(sceneData);
                    }
                    else if (fileName.EndsWith(".prefab") ||
                             fileName.EndsWith("shader") || fileName.EndsWith("cginc") ||
                             fileName.EndsWith("ttf") ||
                             fileName.EndsWith("shadervariants") ||
                             fileName.EndsWith("png"))
                    {
                        ABFileDesc sceneData = new ABFileDesc();
                        sceneData.m_gbName      = fileName;
                        sceneData.m_bundleName  = build.Value.BundleName;
                        sceneData.m_ressVersion = build.Value.bundleId.version;
                        structs.m_files.Add(sceneData);
                    }
                }
            }
        }
        var data = manifest.GetAllAssetBundles();

        for (int i = 0; i < data.Length; i++)
        {
            ABDependencies ad  = new ABDependencies();
            var            abs = manifest.GetAllDependencies(data[i]);
            ad.m_abName = data[i];
            if (ad.m_abName == EnumAB.shaders_ab.ToString())
            {
                if (m_isUpdateShader)
                {
                    ad.m_ressVersion = m_curVersion;
                }
                else
                {
                    ad.m_ressVersion = m_currentCache.firstVersion;
                }
            }
            else
            {
                var spliteStrList = ad.m_abName.Split('_');
                if (spliteStrList.Length >= 2)
                {
                    int tversion = 0;
                    if (int.TryParse(spliteStrList[0], out tversion))
                    {
                        ad.m_ressVersion = tversion;
                    }
                    else
                    {
                        ad.m_ressVersion = m_currentCache.firstVersion;
                    }
                }
                else
                {
                    ad.m_ressVersion = m_currentCache.firstVersion;
                }
            }

            for (int j = 0; j < abs.Length; j++)
            {
                ad.m_dependenciesAb.Add(abs[j]);
            }
            structs.m_abDepends.Add(ad);
        }
    }