PHP 发布了 5.5 的第六个 Alpha 版本,官方首页上没有该版本的消息。

方案

使用腾讯的tinker,对于加固的apk(360和应用宝2个渠道)不支持

不加固的apk:

1、支持热更新的手机

使用热更新方案自动下载加载补丁包,无需安装,共用一个补丁包

2、不支持热更新的手机

检测到加载补丁失败,提醒用户下载对应渠道新的完整apk,重新安装

加固的apk:

提醒用户下载对应渠道新的完整apk,重新安装

 

1,打开cmd,进入到路径:C:WINDOWSMicrosoft.NETFrameworkv2.0.50727
2,执行:aspnet_regiis.exe -r   一键搞定!

下载地址:php-5.5.0alpha6.tar.xz
(2013-03-07 03:38 -0800) – 9.3M

Web

为了保证不支持热更新的手机,也能升级修复bug,并保证版本号不变,所以每次热更新,后台都必选管理所有渠道的apk,也即每次热更新都必须提供所有渠道的apk。

 

每次更新后台补丁时,都需要提供的文件:

1、通用补丁文件

2、不加固的渠道,所有渠道的apk文件(为了保证不支持热更新的手机,也能通过下载完整apk的方式升级)

3、加固的渠道,所有渠道的apk文件(加固的apk不支持热更新)

 

重点

所有渠道的apk文件,都要有!!!

以下是aspnet_regiis.exe参数的说明信息:

(文/开源中国)    

通讯

新增checkPatchVersion接口(新增,检测并获取最新版本补丁信息)

URL

http://helper.2bulu.com/product/checkPatchVersion

参数

String  channel  渠道(必须)

Integer   version  当前软件版本号(必须)

Integer   patchVersion   当前补丁版本号(必须)

String    deviceName   设备型号

String    sdkLevel      系统版本

返回值

Integer  flag:1-是最新补丁,0-不是最新补丁

PatchInfo  info:最新版本补丁信息(当flag=0时有值,flag为1时为空)

描述

通讯

根据版本号、补丁号、渠道名,确定是否有热更新

1、如果是加固的渠道,只返回apk信息

2、如果是非加固渠道,返回补丁和apk信息

终端

if(info.patchFileId > 0){

    //有补丁文件返回,下载补丁文件,弹窗提醒用户,已经下载完成补丁,需要重启加载

    //加载抛异常就是不支持热更新,然后弹窗提醒用户下载apk安装更新补丁

}else{

    //没有补丁文件

    if(info.apkFileId > 0){

        //弹窗提醒用户下载apk安装更新补丁

    }

}

 

PatchInfo 补丁信息:

patchVersion

Integer

补丁版本号

version

Integer

版本号

versionName

String

版本名称(如V5.0.2)

channel

String

渠道

description

String

补丁描述

releaseTime

Long

发布时间

 

 

 

patchFileId

Long

补丁文件下载id,如果没有返回0

patchFileSize

Long

补丁文件大小(单位:Byte),如果没有返回0

patchMd5Code

String

补丁文件MD5文件校验码

apkFileId

Long

apk补丁文件下载id,如果没有返回0

apkFileSize

Long

apk补丁文件大小(单位:Byte),如果没有返回0

apkMd5Code

String

apk补丁文件MD5文件校验码

 

 

 

-i         – 安装 ASP.NET 的此版本,并更新 IIS 元数据库根处的
              脚本映射和根以下的所有
              脚本映射。现有的低版本脚本映射
              升级到此版本。
-ir        – 安装 ASP.NET 的此版本,仅注册。不
              更新 IIS 中的脚本映射。
-enable    – 带 -i 或 -ir 指定 -enable 时,还将
              在 IIS 安全控制台(IIS 6.0 或更高版本)中启用 ASP.NET。
-s <path> – 在指定的路径以递归方式安装此版本
              的脚本映射。现有的低版本脚本映射
              升级到此版本。
              例如 aspnet_regiis.exe -s W3SVC/1/ROOT/SampleApp1
-sn <path> – 在指定的路径以非递归方式安装此版本的
              脚本映射。现有的低版本脚本映射
              升级到此版本。
-r         – 为 IIS 元数据库根位置的此版本
              以及根以下的所有脚本映射安装脚本映射。不论当前版本是什么,
              所有现有的脚本映射都更改为此版本。

终端

代码逻辑

完整流程

手机重新运行

读取缓存的PatchInfo ,检测是否有对应当前版本的补丁文件(文件名称需要包含版本号-补丁号,补丁文件的补丁号需要>程序读取到的补丁号,不要已经通过apk的方式安装补丁了还走加载补丁的流程)

1、有补丁文件,加载补丁文件(需要捕获异常)

1.1 加载成功

进入“检测市场版本流程

1.2 加载失败

根据PatchInfo里面的apk信息,进入“下载apk安装流程

 

2、没有补丁文件

进入“检测市场版本流程

 

检测市场版本流程

此流程是程序启动都必须走一遍的

先通过checkApkVersion,获取是否有市场版本升级

1.1 如果有市场版本升级

    通过getUpgradeApkInfo获取具体升级信息,提醒下载升级市场版本

    1.1.1 选择下载更新,进入“下载apk安装流程

    1.1.2 选择忽略当前版本,进入“检测补丁文件流程

1.2 如果没有市场版本升级

    进入“检测补丁文件流程

 

检测补丁文件流程

通过checkPatchVersion获取是否有热更新,如果flag==0(不是最新补丁),

if(info.patchFileId > 0){

    //有补丁文件返回,下载补丁文件,弹窗提醒用户,补丁已经下载完成,修复了哪些问题,需要重启加载

}else{

    //没有补丁文件

    if(info.apkFileId > 0){

        //进入“下载apk安装流程

    }

}

 

下载apk安装流程

弹窗提醒用户下载apk安装更新补丁

……

 

 

 

-u         – 卸载 ASP.NET 的此版本。到此版本的
              现有脚本映射重新映射到此计算机上安装的
              其余的最高 ASP.NET 版本。
-ua        – 卸载计算机上的所有 ASP.NET 版本
-k <path> – 从指定的路径中以递归方式移除到任何 ASP.NET
版本的所有
              脚本映射。
              例如 aspnet_regiis.exe -k W3SVC/1/ROOT/SampleApp1
-kn <path> – 从指定的路径中以非递归方式移除到任何 ASP.NET
版本的所有
              脚本映射。
-lv        – 列出计算机上安装的所有
              ASP.NET 版本(包括状态和安装路径)。
              Status: Valid[ (Root)]|Invalid
-lk        – 列出包含 ASP.NET 脚本映射的所有 IIS 元数据库项的所有路径
              (连同版本一起)。不显示从父项
              继承 ASP.NET 脚本映射的项。
-c         – 将客户端脚本的此版本安装到
              每个 IIS 站点目录的 aspnet_client 子目录中。
-e         – 从每个 IIS 站点目录的 aspnet_client 子目录中
              移除客户端脚本的此版本。
-ea        – 从每个 IIS 站点目录的 aspnet_client 子目录中
              移除客户端脚本的所有版本。
-?         – 打印此帮助文本。

测试

热更新必要验证流程:

 

至少要验证的版本:

5.1.5-520-0(市场版本)

准备文件:

5.1.5-520-0-baidu7.apk(不加固)、5.1.5-520-0-36012.apk(加固)

 

5.1.5-520-1(热更新版本)

准备文件:

通用补丁包、5.1.5-520-1-baidu7.apk(不加固)、5.1.5-520-1-36012.apk(加固)

 

5.1.5-520-2(热更新版本)

准备文件:

通用补丁包、5.1.5-520-2-baidu7.apk(不加固)、5.1.5-520-2-36012.apk(加固)

 

5.1.6-530-2(市场版本)

准备文件:

5.1.6-530-2-baidu7.apk(不加固)、5.1.6-530-2-36012.apk(加固)

 

 

准备手机:

三星android-21(5.0)机型或其他不支持补丁的手机A、手机B、手机C、手机D

 

 

保证验证的流程:

1、市场版本,升级下一个补丁包是否正常(例如5.1.5-520-0升级到5.1.5-520-1)

2、某些不支持补丁的手机(手机A),加载补丁包失败后,是否会提醒下载安装apk(例如手机A从5.1.5-520-0升级到5.1.5-520-1,加载插件失败,应该提醒下载apk并安装)

3、补丁版本,升级下一个补丁版本是否正常(例如5.1.5-520-1升级到5.1.5-520-2)

4、某些不支持补丁的手机(手机A),apk升级到补丁版本之后,再升级下一个补丁版本是否正常(例如手机A通过apk升级到5.1.5-520-1后,是否能正常升级到5.1.5-520-2)

5、热更新版本,是否能正常升级到下一个市场版本(例如5.1.5-520-2,是否能正常升级到5.1.6-530-2)

6、对于加固的版本,是否能如不支持补丁的手机一样,提醒下载apk并安装

 

 

手机保证修改:

1、关于户外助手与帮助里面,显示版本名-版本号-补丁版本

2、每次发布补丁,至少修改下代码、布局(这个也不算太重要,要是不支持的也没办法了)

 

 

测试流程

1、发布5.1.5-520-0(市场版本)

测试:

手机A安装baidu7渠道,验证5.1.5-520-0版本特征及是否是baidu7渠道

手机B安装baidu7渠道,验证5.1.5-520-0版本特征及是否是baidu7渠道

手机C安装baidu7渠道,验证5.1.5-520-0版本特征及是否是baidu7渠道

手机D安装36012渠道,验证5.1.5-520-0版本特征及是否是36012渠道

 

2、发布5.1.5-520-1(热更新版本)

测试:

手机A是否能检测到有更新,并提醒下载补丁apk并安装,并安装流程升级到5.1.5-520-1,验证5.1.5-520-1版本特征及是否是baidu7渠道;

手机B是否能自动加载补丁包然后完成升级,验证5.1.5-520-1版本特征及是否是baidu7渠道;

手机C是否能自动加载补丁包然后完成升级,验证5.1.5-520-1版本特征及是否是baidu7渠道(验证完全手机设置里面杀死进程,不要运行升级到5.1.5-520-2,为了验证5.1.5-520-1跳过5.1.5-520-2升级到5.1.6-530-2);

手机D是否能检测到有更新,并提醒下载补丁apk并安装,并安装流程升级到5.1.5-520-1,验证5.1.5-520-1版本特征及是否是36012渠道;

 

3、发布5.1.5-520-2(热更新版本)

测试:

手机A是否能检测到有更新,并提醒下载补丁apk并安装,并安装流程升级到5.1.5-520-2,验证5.1.5-520-2版本特征及是否是baidu7渠道;

手机B是否能自动加载补丁包然后完成升级,验证5.1.5-520-2版本特征及是否是baidu7渠道;

手机D是否能检测到有更新,并提醒下载补丁apk并安装,并安装流程升级到5.1.5-520-2,验证5.1.5-520-2版本特征及是否是36012渠道;

 

4、发布5.1.6-530-2(市场版本)

测试:

手机A是否能检测到有更新,并提醒下载apk并安装,并安装流程升级到5.1.6-530-2,验证5.1.6-530-2版本特征及是否是baidu7渠道;

手机B是否能检测到有更新,并提醒下载apk并安装,并安装流程升级到5.1.6-530-2,验证5.1.6-530-2版本特征及是否是baidu7渠道;

手机C是否能检测到有更新,并提醒下载apk并安装,并安装流程升级到5.1.6-530-2,验证5.1.6-530-2版本特征及是否是baidu7渠道;

手机D是否能检测到有更新,并提醒下载apk并安装,并安装流程升级到5.1.6-530-2,验证5.1.6-530-2版本特征及是否是36012渠道;