本应用为CM定制OTA更新应用
其中,使用了volley框架来实现网络请求连接操作,将手机端的基础信息以json的形式发送到服务器端,与服务器进行交互,获取更新信息。
在服务器端,服务器会接收客户端发送来的基本信息,包括手机信号,手机IMEI,incremental号,服务器会检测特定机型,特定的IMEI是否有更新,如果有,则返回更新信息;如果没有,则返回错误。
在客户端,接收到服务器的更新信息后,会对比本系统的信息,查看是否需要更新,如果需要,则下载,向服务器端发送本机的incremental与目标incremental,给服务器,在服务器端检测是否有匹配的增量更新包,如果存在,则返回增量更新包的download URL,如果不存在,则直接返回错误。
在客户端,接收到服务器端返回的信息,如果增量包的信息存在,直接使用下载增量包,如果不存在,则直接使用第一次检测,服务器返回的全包的download URL,使用系统服务DownloadManager来下载更新包。
注意:本应用不支持断点续传。
下面是应用的细节:
两个服务与服务其交互
UpdateCheckService.java 此服务用来检测更新
直接检测时要发送的数据:
to server: JSONObject{ (method:get_all_builds), (params( (device:xxx), (imei:xxx)), (source_incremental:xxx))) }
get server: JSONObject( from JSONAray (result:JSONObject))(由UpdateInfo数据构成):
UpdateInfo(filename, url, changes, md5sum, api_level, timestamp, channel, incremental)关于更新的情况
客户端从服务器中解读出的数据:更新信息的条数(updates.size()),新的更新次数(EXTRA_NEW_UPDATE_COUNT)
已经更新的次数(EXTRA_NEW_UPDATE_COUNT)
当设置更新形式的时候,发送的数据(此处可用于测试):有更新方式的区别
to server: JSONObject{ (method:get_all_builds), (params( (device:xxx), (channels :xxx)), (source_incremental:xxx))) }
DownloadService.java 此服务用来获取下载链接
与服务器交互: URL: http://123.56.87.121/api.ashx?action=download
to server: JSONObject{(device:xxx), (imei:xxx) , (source_incremental:xxx), (target_incremental:xxx) }
get server: JSONObject(包含UpdteInfo的数据);
其中 包含 UpdateInfo(filename, download_url, me5sum, mInfo, date_created_unix, update_type, incremental); 下载增量包
或 null, 下载全量包
下载服务直接利用系统DownloadManager,从download_url下载更新包
FetchChangeLogTask.java中,对更新的UpdateInfo,会检测其changeLog,如果没有,会与服务器进行一次交互
从服务器获取信息,生产changeLog
其中,使用了volley框架来实现网络请求连接操作,将手机端的基础信息以json的形式发送到服务器端,与服务器进行交互,获取更新信息。
在服务器端,服务器会接收客户端发送来的基本信息,包括手机信号,手机IMEI,incremental号,服务器会检测特定机型,特定的IMEI是否有更新,如果有,则返回更新信息;如果没有,则返回错误。
在客户端,接收到服务器的更新信息后,会对比本系统的信息,查看是否需要更新,如果需要,则下载,向服务器端发送本机的incremental与目标incremental,给服务器,在服务器端检测是否有匹配的增量更新包,如果存在,则返回增量更新包的download URL,如果不存在,则直接返回错误。
在客户端,接收到服务器端返回的信息,如果增量包的信息存在,直接使用下载增量包,如果不存在,则直接使用第一次检测,服务器返回的全包的download URL,使用系统服务DownloadManager来下载更新包。
注意:本应用不支持断点续传。
下面是应用的细节:
两个服务与服务其交互
UpdateCheckService.java 此服务用来检测更新
直接检测时要发送的数据:
to server: JSONObject{ (method:get_all_builds), (params( (device:xxx), (imei:xxx)), (source_incremental:xxx))) }
get server: JSONObject( from JSONAray (result:JSONObject))(由UpdateInfo数据构成):
UpdateInfo(filename, url, changes, md5sum, api_level, timestamp, channel, incremental)关于更新的情况
客户端从服务器中解读出的数据:更新信息的条数(updates.size()),新的更新次数(EXTRA_NEW_UPDATE_COUNT)
已经更新的次数(EXTRA_NEW_UPDATE_COUNT)
当设置更新形式的时候,发送的数据(此处可用于测试):有更新方式的区别
to server: JSONObject{ (method:get_all_builds), (params( (device:xxx), (channels :xxx)), (source_incremental:xxx))) }
DownloadService.java 此服务用来获取下载链接
与服务器交互: URL: http://123.56.87.121/api.ashx?action=download
to server: JSONObject{(device:xxx), (imei:xxx) , (source_incremental:xxx), (target_incremental:xxx) }
get server: JSONObject(包含UpdteInfo的数据);
其中 包含 UpdateInfo(filename, download_url, me5sum, mInfo, date_created_unix, update_type, incremental); 下载增量包
或 null, 下载全量包
下载服务直接利用系统DownloadManager,从download_url下载更新包
FetchChangeLogTask.java中,对更新的UpdateInfo,会检测其changeLog,如果没有,会与服务器进行一次交互
从服务器获取信息,生产changeLog