/// <summary>
        /// 安卓解包过程
        /// </summary>
        private IEnumerator StartAndroidUnPack(AssetBundleDownloadTaskModel taskModel, Action onComplete)
        {
            string resDicUrl    = ABDataConfig.AppAssetBundleDirName; //安卓包资源路径
            string targetDicUrl = ABDataConfig.localABFullName;       //目标路径

            string[] copyFile = new string[]
            {
                ABDataConfig.localCacheFileName,
                ABDataConfig.localDepFileName,
            };
            //先拷贝cache.txt 与dep.file文件
            taskModel.taskMessage = "解压配置文件";
            yield return(CopyAssetBundle(resDicUrl, targetDicUrl, copyFile));

            //解析dep文件 得到所有的ab 名字
            var abNames = AssetBundleDepFileManager.ResolveDepFile(targetDicUrl + copyFile[1]);
            //添加mainfest文件
            int count = abNames.Count;

            for (int i = 0; i < count; ++i)
            {
                abNames.Add(abNames[i] + ABDataConfig.assetBundleManifestFilePostfixName);
            }
            //在拷贝所有ab文件
            taskModel.taskMessage = "解压ab文件";
            yield return(CopyAssetBundle(resDicUrl, targetDicUrl, abNames));

            DebugManager.Log("解包完成!");
            taskModel.taskMessage = "解包完成";
            yield return(0);

            onComplete();
        }
        /// <summary>
        /// 解包过程 参数1:任务model  参数2:回调
        /// </summary>
        private void StartUnPack(AssetBundleDownloadTaskModel taskModel, Action onComplete)
        {
            taskModel.taskMessage = "检查安装包资源";
            var localAbFullName = ABDataConfig.localABFullName;

            if (!Directory.Exists(localAbFullName))
            {
                taskModel.taskMessage = "开始解包";
                Directory.CreateDirectory(localAbFullName);
                DebugManager.Log(localAbFullName + "文件夹不存在,自动创建!开始解包!");

                if (Application.platform == RuntimePlatform.Android)
                {
                    //安卓环境下必须用www访问StreamingAssets文件夹下的文件
                    StartCoroutine(StartAndroidUnPack(taskModel, onComplete));
                }
                else
                {
                    Util.CopyDirectoryToOtherDir(ABDataConfig.AppAssetBundleDirName, localAbFullName);
                    DebugManager.Log("解包完成!");
                    taskModel.taskMessage = "解包完成";
                    onComplete();
                }
            }
            else
            {
                DebugManager.Log(localAbFullName + "文件夹存在!不需要解包!");
                onComplete();
            }
        }
 /// <summary>
 /// 启动任务下载器
 /// </summary>
 private void StarDownloadTaskManage(AssetBundleDownloadTaskModel task)
 {
     if (task == null || downloadTaskMangageState || task.downloadNOModels == null)
     {
         return;
     }
     if (task.downloadNOModels.Count == 0)
     {
         task.taskState   = TaskState.TaskOk;
         task.taskMessage = "下载完成";
         downloadSuccessTasks.Add(task);
         return;
     }
     try
     {
         task.taskState   = TaskState.Tasking;//任务开启中
         task.taskMessage = "开始下载资源";
         StartCoroutine(DownloadTaskMangage(task));
     }
     catch (Exception e)
     {
         task.taskMessage = "下载出错!";
         DebugManager.LogError(task + "任务下载出错!" + e.Message);
         downloadErrorTasks.Enqueue(task);
         downloadTaskMangageState = false;//出错将下载状态设置为false
     }
 }
        /// <summary>
        /// 开始更新ab 返回ab任务model
        /// </summary>
        public AssetBundleDownloadTaskModel StarUpdateAssetBundle()
        {
            AssetBundleDownloadTaskModel taskModel = new AssetBundleDownloadTaskModel();

            //检测是否是第一次安装apk,是就先解包
            StartUnPack(taskModel, () =>
            {
                taskModel.taskMessage = "获取更新资源中";
                //获取ab更新资源
                AssetBundleCacheFileManager.Instance.GetUpdateDownLoadAssetBundles((waitDownloadAssetBundleList) =>
                {
                    if (waitDownloadAssetBundleList != null)
                    {
                        taskModel.downloadNOModels = waitDownloadAssetBundleList;
                    }
                    taskModel.taskMessage = "需要更新资源数:" + taskModel.downloadNOModels.Count;
                    //将当前任务压入资源下载栈
                    downloadTasks.Enqueue(taskModel);
                });
            });
            return(taskModel);
        }
        /// <summary>
        /// 任务下载器
        /// </summary>
        private IEnumerator DownloadTaskMangage(AssetBundleDownloadTaskModel task)
        {
            downloadTaskMangageState = true;//状态位标志
            string downLoadUrl = ABDataConfig.GetAssetBundleUrl + ABDataConfig.getAssetBundleApiName;

            DebugManager.Log("任务开始下载:" + task.ToString());

            AssetBundleDownloadModel tempABModel = null;//中间变量

            #region 遍历未下载列表资源,开启下载
            for (int i = 0; i < task.downloadNOModels.Count; ++i)
            {
                tempABModel = task.downloadNOModels[i];

                DownloadModel downModel = new DownloadModel();

                //下载资源文件
                task.taskMessage    = "下载资源" + tempABModel.assetBundleFileName;
                downModel.postDatas = System.Text.Encoding.UTF8.GetBytes(tempABModel.assetBundleFileName);
                yield return(DownloadABFile(downLoadUrl, downModel));

                tempABModel.assetBundleData = downModel.resultDatas;

                //下载资源mainfest文件
                task.taskMessage    = "下载资源" + tempABModel.assetBundleManifestFileName;
                downModel.postDatas = System.Text.Encoding.UTF8.GetBytes(tempABModel.assetBundleManifestFileName);
                yield return(DownloadABFile(downLoadUrl, downModel));

                tempABModel.assetBundleManifestData = downModel.resultDatas;


                if (tempABModel != null && tempABModel.assetBundleManifestData != null && tempABModel.assetBundleData != null)
                {
                    DebugManager.Log("资源:" + tempABModel.assetBundleName + "下载成功!准备写入本地文件!");
                    //TODO 写入文件
                    bool result = FileManager.CreateFile(ABDataConfig.localABFullName + tempABModel.assetBundleFileName, tempABModel.assetBundleData);
                    if (result)
                    {
                        result = FileManager.CreateFile(ABDataConfig.localABFullName + tempABModel.assetBundleManifestFileName, tempABModel.assetBundleManifestData);
                    }

                    if (result)
                    {
                        task.downloadOKModels.Add(tempABModel);//添加到成功队列中
                    }
                    else
                    {
                        DebugManager.Log("资源:" + tempABModel.assetBundleName + "下载成功,写入文件异常!");
                        task.downloadErrorModels.Add(tempABModel);//添加到失败队列中
                    }
                }
                else
                {
                    DebugManager.Log("资源:" + tempABModel.assetBundleName + "下载异常!数据错误!");
                    task.downloadErrorModels.Add(tempABModel);//添加到失败队列中
                }

                task.downloadNOModels.RemoveAt(i--);//移出未下载队列
                tempABModel = null;
            }
            #endregion

            //判断任务是否成功或者失败
            if (task.downloadErrorModels != null && task.downloadErrorModels.Count > 0)
            {
                DebugManager.LogWarning("任务:" + task.ToString() + "下载失败!");
                task.taskState   = TaskState.TaskError;
                task.taskMessage = task.downloadErrorModels.Count + "个资源下载失败!重新下载!";
                downloadErrorTasks.Enqueue(task);
            }
            else
            {
                DebugManager.LogWarning("任务:" + task.ToString() + "下载成功!");
                task.taskState   = TaskState.TaskOk;
                task.taskMessage = "下载完成";
                downloadSuccessTasks.Add(task);
            }

            //当前任务下载结束
            downloadTaskMangageState = false;
        }