public static void CollectionAllAssets(bool isUpdate)
    {
        m_abbuildDic.Clear();
        m_dependsDic.Clear();
        m_curretBundleID = new BundleID(m_currentCache.firstVersion, EnumAB.shaders_ab);
        CollectFromDirectinfo("XGame/Public/Resources", isUpdate);
        CollectFromDirectinfo("XGame/Resources/Shaders", isUpdate);

        //主要图集 和 字体
        m_curretBundleID = new BundleID(m_currentCache.firstVersion, EnumAB.uialtas_ab);
        CollectFromDirectinfo("XGame/Resources/EZFunUI/Altas/Release", isUpdate);
        CollectFromDirectinfo("XGame/Data/UI/AltasRef", isUpdate);
        CollectFromDirectinfo("XGame/Resources/EZFunUI/Font", isUpdate);

        //主要ui
        m_curretBundleID = new BundleID(m_currentCache.firstVersion, EnumAB.ui_ab);
        CollectFromDirectinfo("XGame/Resources/EZFunUI", isUpdate);
        CollectFromDirectinfo("XGame/Resources/SuperTextMesh", isUpdate);

        //主要是角色模型技能等
        m_curretBundleID = new BundleID(m_currentCache.firstVersion, EnumAB.model_ab);
        CollectFromDirectinfo("XGame/Resources/Prefab", isUpdate);


        m_curretBundleID = new BundleID(m_currentCache.firstVersion, EnumAB.scene_ab);
        CollectFromDirectinfo("XGame/Scene/Release", isUpdate, "unity");

        // 场景prefab
        m_curretBundleID = new BundleID(m_currentCache.firstVersion, EnumAB.scenemodle_ab);
        CollectFromDirectinfo("XGame/Resources/Scene", isUpdate);
    }
    private static ABAssetInfo ColloectDependecies(string prefabPath, string fileName = "")
    {
        prefabPath = prefabPath.ToLower();
        string[] depends = AssetDatabase.GetDependencies(prefabPath, false);
        //场景比较特殊是因为场景ab不能包含其他的资源,场景自己一个ab,所以得把场景引用的资源挪到scenemodle_ab中去
        if (prefabPath.EndsWith(".unity"))
        {
            if (fileName.Contains("."))
            {
                fileName = fileName.Substring(0, fileName.IndexOf("."));
            }
            m_curretBundleID = new BundleID(m_currentCache.firstVersion, EnumAB.scene_ab, fileName);
            if (!m_abbuildDic.ContainsKey(m_curretBundleID))
            {
                ABBundleInfo buildInfo = new ABBundleInfo();
                buildInfo.bundleId     = m_curretBundleID;
                buildInfo.firstVersion = m_currentCache.firstVersion;
                m_abbuildDic.Add(m_curretBundleID, buildInfo);
            }
        }
        ABAssetInfo parentAssetInfo = null;

        if (!m_dependsDic.ContainsKey(prefabPath))
        {
            parentAssetInfo = LoadAssetData(prefabPath);
            m_dependsDic.Add(prefabPath, parentAssetInfo);
            if (depends != null)
            {
                for (int i = 0; i < depends.Length; i++)
                {
                    depends[i] = depends[i].ToLower().Replace("\\", "/");
                    if (!depends[i].EndsWith("dll") && !depends[i].EndsWith("cs") && !depends[i].EndsWith("js"))
                    {
                        //场景比较特殊是因为场景ab不能包含其他的资源,场景自己一个ab,所以得把场景引用的资源挪到scenemodle_ab中去
                        if (prefabPath.EndsWith(".unity"))
                        {
                            m_curretBundleID = new BundleID(m_currentCache.firstVersion, EnumAB.scenemodle_ab);
                        }
                        var childAssetInfo = ColloectDependecies(depends[i]);
                        parentAssetInfo.AddChild(childAssetInfo);
                    }
                }
            }
        }
        else
        {
            parentAssetInfo = m_dependsDic[prefabPath];
        }
        return(parentAssetInfo);
    }
    private static ABBundleInfo GetUpdateABBuild(EnumAB bundleType, string sceneName = "")
    {
        ABBundleInfo build    = null;
        var          bundleId = new BundleID(m_curVersion, bundleType, sceneName);

        if (m_abbuildDic.ContainsKey(bundleId))
        {
            build = m_abbuildDic[bundleId];
        }
        else
        {
            build          = new ABBundleInfo();
            build.bundleId = bundleId;
            m_abbuildDic.Add(bundleId, build);
        }
        return(build);
    }
    public static void BuildSpecialBundleAndriod()
    {
        BuildTarget buildTargetGroup = BuildTarget.Android;
        string      buildPath        = EditorUtility.OpenFolderPanel("选择目录", Application.dataPath, "");

        if (string.IsNullOrEmpty(buildPath))
        {
            return;
        }
        LoadAndVerions(buildTargetGroup, false, 99999);
        m_curretBundleID = new BundleID(99999, EnumAB.ui_ab);
        CollectFromDirectinfo(buildPath, false);

        List <AssetBundleBuild> buildsList = new List <AssetBundleBuild>();

        foreach (var keyValue in m_abbuildDic)
        {
            buildsList.Add(keyValue.Value.GetBundleBuild());
        }
        ProcessCacheDic(false);
        BuildAssetBuindles(buildTargetGroup, 99999);
    }
        public override int GetHashCode()
        {
            int hash = 1;

            if (ChannelName.Length != 0)
            {
                hash ^= ChannelName.GetHashCode();
            }
            if (Sdk.Length != 0)
            {
                hash ^= Sdk.GetHashCode();
            }
            if (Platform.Length != 0)
            {
                hash ^= Platform.GetHashCode();
            }
            if (Source.Length != 0)
            {
                hash ^= Source.GetHashCode();
            }
            if (BundleID.Length != 0)
            {
                hash ^= BundleID.GetHashCode();
            }
            if (DownloadName.Length != 0)
            {
                hash ^= DownloadName.GetHashCode();
            }
            if (UpdateInGame != false)
            {
                hash ^= UpdateInGame.GetHashCode();
            }
            if (ProductName.Length != 0)
            {
                hash ^= ProductName.GetHashCode();
            }
            return(hash);
        }