private static void AnalyzeBundleFiles(List <AssetBundleFileInfo> infos)
        {
            // 分析被依赖的关系
            foreach (var info in infos)
            {
                List <string> beDepends = new List <string>();
                foreach (var info2 in infos)
                {
                    if (info2.name == info.name)
                    {
                        continue;
                    }

                    if (info2.allDepends.Contains(info.name))
                    {
                        beDepends.Add(info2.name);
                    }
                }
                info.beDepends = beDepends.ToArray();
            }

            // 以下不能保证百分百找到所有的资源,最准确的方式是解密AssetBundle格式
            foreach (var info in infos)
            {
#if UNITY_5_3_OR_NEWER
                AssetBundle ab = AssetBundle.LoadFromFile(info.path);
#else
                AssetBundle ab = AssetBundle.CreateFromMemoryImmediate(File.ReadAllBytes(info.path));
#endif
                if (ab)
                {
                    try
                    {
#if UNITY_5_3_OR_NEWER
                        if (!ab.isStreamedSceneAssetBundle)
#else
                        if (true)
#endif
                        {
                            if (!analyzeOnlyScene)
                            {
#if UNITY_5 || UNITY_5_3_OR_NEWER
                                Object[] objs = ab.LoadAllAssets <Object>();
#else
                                Object[] objs = ab.LoadAll();
#endif
                                foreach (var o in objs)
                                {
                                    AnalyzeObjectReference(info, o);
                                    AnalyzeObjectComponent(info, o);
                                }
                                AnalyzeObjectsCompleted(info);
                            }
                        }
                        else
                        {
#if UNITY_5_3_OR_NEWER
                            info.isScene = true;
                            sAnalyzeScene.AddBundleSceneInfo(info, ab.GetAllScenePaths());
#endif
                        }
                    }
                    finally
                    {
                        ab.Unload(true);
                    }
                }
            }
        }