1、一、重点注意:1、 manifast.xml 中的 versionCode 和 versionName:其中 versionCode 的默认值为 1,在创建新的软件版本时,一定要将此值设置的比前一个版本高,ps:versionCode 为整数,非 android 硬性规定,但从开发角度来讲,可以通过versionCode 马上知道当前软件是否比新版本软件的版本高还是低。一般来说,你发布的第一版程序的 versionCode 设定为 1,然后每次发布都会相应增加, android:versionCode 不像应用程序的发布版本(看下面android:versionName)那样显示给用户。应用程
2、序和发布的服务不应该显示这个版本值给用户。2、 android:versionName字符串值,代表应用程序的版本信息,需要显示给用户。Android:versionName 的命名规则:versionName 字符串值,由于现有的软件分为 4 个版本 ps:完整版,督导版,促销员版,基础版 ,每个版本都有针对自己的升级软件,那么如何区分不同版本软件更新到的是对应于自己的升级软件呢?通过 versionName。原理:软件初始化时获取到自身的versionName,将 versionName 中的 flag 当做参数访问服务器,服务器通过此参数返回相对应的版本升级软件。规则如下:如:versi
3、onName=”flagx.x” flag 为 a 代表是完整版,x.x 为版本号,如 1.1.例如,a1.1 代表 完整版的 1.1,服务端如果有新软件生成,此 vesionName 应该为 a1.2。不是绝对以 0.1 递增,但要有规律。为新版本软件打包时一定要注意,不要写错,否者软件更新会驴唇不对马嘴。以下类同。完整版:”ax.x”. flag = a督导版:”sx.x”. flag = s促销员版:”px.x”. flag = p基础版:”bx.x”. flag = b3、 服务端需要提供数据:a) 是 flag 用来区分软件的版本(这里指功能)。b) flag 对应的新版本软件的 v
4、ersionCode 和 versionName 值。格式:versionCode&versionName。c) apkName(对应 apk文件的全名称,比如:com.tstx.a1.1.apk), 对应软件实体 apk 包。二、模块设计思路1、 升级模式:a、自动检测,软件在运行初始化时所运行的工作量比较大,为了不增加负担,自动检测放在软件初始化进入主界面后,进行访问服务器检测软件是否有新版本。b、 手动检测,在选项菜单中有“下载“选项,单击后,进行服务器访问检测软件是否有新版本。Ps:不建议后台运行 service 进行定时巡检,造成资源浪费。2、 显示方式:a、 自动检测有果,在通知栏
5、显示通知,ps:不建议在不通知用户的情况下静默下载,关系到用户利益。当用户单击通知栏信息后并同意下载,在通知栏中显示进度条,下载完成后,通知栏中状态为安装,用户同意安装,整个更新过程完成。b、 手动检测有果,和自动检测一致。3、 异常处理如果用户在选择下载过程中,由于网络原因,比如连接不到服务器,30 秒后更新通知栏信息为“提示用户下载失败”,或者在中途下载到一半,网络环境不好,导致断链,同样提示用户下载失败,并且加入断点续传机制。三、访问服务器1、第一次访问服务器是确定软件是否更新,使用 json 格式,内容包括Type:软件功能版本DeviceId:终端序列号type:checkVersi
6、on, versionFlag:a, deviceId:00000000000服务返回versionCode:1.1, versionName:a1.1url:“http:/222.128.0.178:8090/MultiMediaServer/downlinkdata/downlink.do?“2、第二次访问服务器是下载新软件,使用 json 格式,内容type:downloadApk, versionFlag:a, deviceId:00000000000服务返回 com.tstx.a1.1.apk 文件及 jsonfilePath: http:/222.128.0.178:8090/co
7、m.tstx.a1.1.apkurl:“http:/222.128.0.178:8090/MultiMediaServer/downlinkdata/downlink.do?“返回:http:/222.128.0.178:8090/com.tstx.a1.1.apk再次进行访问。返回流。隐患:在替换安装软件时,如果新版本的软件的数据库结构发生变化(包括表和表的结构)。那么替换安装会失败,解决方式:1、在替换安装前,代码清除现有软件的用户数据(包括本地文件和数据库表和表中的信息)。2、用户手动进入到应用管理中,卸载老版本软件或手动清除数据,然后从 sdcard 中找出新版本安装包进行安装。以上两
8、种方式都会导致用户以前的数据信息丢失。解决方式,数据库升级,目前老软件和新软件之间的数据库差异太大,无法确定升级数据,不建议在新版软件中添加数据库升级机制,在以后的版本控制中加强数据库结构的管理,随时记录数据库结构的变化,在下下版中开始添加数据库升级机制。那么,在这一版新软件安装替换老软件时,只能使用上面两种方式。GPS 定位软件升级 jsondownlinkReqStr=type:mobileVersion, deviceId: 000000000000000, packageName: android.os.kernel, versionName:1.0 packageName为清单文件中的 package属性versionName为清单文件中的 versionName属性fileUrl:http:/118.192.10.123:8088/manager/mobileversion/android.os.core/2.0/android.os.core.apk