一键更新工具逻辑思路整理
整体逻辑:
首先,程序进入InitParams方法,读取upgradeTool.xml文件,得到新增和替换文件列表、删除文件列表、合并文件列表存入UpgradeConst.configMap
并剔除<exclude>标签下的文件,在得到新增替换和删除文件列表时,include标签中的dealChildren属性值决定了是否进行递归调用
获取合并文件时,先进入include标签,拿到dir的值,然后进入file标签,拿到name值,
dir+name即拿到了路径,然后再进入rule标签,获得所有rule的类型和内容,这样就拿到了ruleList参数
其次,生成hash文件,如果不存在生成本地hash文件的描述文件就新生成所有文件的hash码,否则通过描述文件生成hash文件,文件的
hash码用来标识文件是否需要更新,hash码的描述文件存放了文件的hash码、文件长度和最近修改时间,使用hash码的描述文件可以提高文件比对效率,
具体步骤是:先从paramsMap中拿到新增替换文件列表和合并文件列表,得到文件绝对路径,判断文件是否存在。以合并文件文件为例,如果描述文件不存在,则
通过取得key为"mergeFiles"对应的value值来初始化properties值,如果存在,则通过hash描述文件生成hash文件
再次,初始化各个文件列表并下载所有需要升级文件,初始化各个文件列表时,会调用compareProperties()方法,以确定需要更改的文件,
compareProperties()方法通过传入本地文件路径和下载文件路径,得到它们的properties对象,然后通过比较获得downloadList集合。之后备份文件。
最后,完成新增、替换、合并和删除动作,合并步骤是先拿到mergeFileMap并得到升级文件目录和本地app文件目录,判断要合并的文
在低版本中是否存在,不存在则进行拷贝,根据文件类型又分为web.xml、xml、json和porperties