一、介绍
Sophix是阿里爸爸最新热更新开源框架,它提供了一套客户端服务端一体的热更新方案,做到了图形界面一键打包、加密传输、签名校验和服务端控制发布与灰度功能,让你用最少的时间实现最强大可靠的全方位热更新。
最吸引我的地方是它的图形化界面,不过它是有使用设备有限制,如果想不受限制,就得付费了
与以往框架对比
阿里系热更新框架对比使用流程:
1.首先要登录阿里云 https://www.aliyun.com 当然注册账号是必须有的步骤,然后进入阿里云移动开发服务
移动开发平台 移动开发平台-2在移动开发平台-2页面中,如果是第一次注册登录的用户,需要开通EMAS(这个是免费的)
2.在管理控制平台中,添加开发应用
添加应用 添加开发应用信息 添加开发应用信息-23.下载aliyun-emas-services.json文件,此文件加中存放了开发需要的配置信息
二、集成SDK
1.使用Studio创建新项目, 项目与添加开发应用信息-2 图中添加的包名一致
2.集成SDK方式
在项目的Project的Gradle文件中添加Mave仓库地址:
在app的Gradle文件中添加版本依赖:
3.权限以及配置说明
在AndroidManifest.xml中添加应用权限以及更新配置
其中App ID、App Secret、RSA密钥这三个值需要到前面下载的aliyun-emas-services.json文件里查看,对应关系如下:
三、代码编写
1.首先创建属于自己的Appplication
2.创建Sophix Application
3.常见状态码说明如下: 一个补丁的加载一般分为三个阶段: 查询/预加载/加载
//兼容老版本的code说明
int CODE_LOAD_SUCCESS = 1;//加载阶段, 成功
int CODE_ERR_INBLACKLIST = 4;//加载阶段, 失败设备不支持
int CODE_REQ_NOUPDATE = 6;//查询阶段, 没有发布新补丁
int CODE_REQ_NOTNEWEST = 7;//查询阶段, 补丁不是最新的
int CODE_DOWNLOAD_SUCCESS = 9;//查询阶段, 补丁下载成功
int CODE_DOWNLOAD_BROKEN = 10;//查询阶段, 补丁文件损坏下载失败
int CODE_UNZIP_FAIL = 11;//查询阶段, 补丁解密失败
int CODE_LOAD_RELAUNCH = 12;//预加载阶段, 需要重启
int CODE_REQ_APPIDERR = 15;//查询阶段, appid异常
int CODE_REQ_SIGNERR = 16;//查询阶段, 签名异常
int CODE_REQ_UNAVAIABLE = 17;//查询阶段, 系统无效
int CODE_REQ_SYSTEMERR = 22;//查询阶段, 系统异常
int CODE_REQ_CLEARPATCH = 18;//查询阶段, 一键清除补丁
int CODE_PATCH_INVAILD = 20;//加载阶段, 补丁格式非法
//查询阶段的code说明
int CODE_QUERY_UNDEFINED = 31;//未定义异常
int CODE_QUERY_CONNECT = 32;//连接异常
int CODE_QUERY_STREAM = 33;//流异常
int CODE_QUERY_EMPTY = 34;//请求空异常
int CODE_QUERY_BROKEN = 35;//请求完整性校验失败异常
int CODE_QUERY_PARSE = 36;//请求解析异常
int CODE_QUERY_LACK = 37;//请求缺少必要参数异常
//预加载阶段的code说明
int CODE_PRELOAD_SUCCESS = 100;//预加载成功
int CODE_PRELOAD_UNDEFINED = 101;//未定义异常
int CODE_PRELOAD_HANDLE_DEX = 102;//dex加载异常
int CODE_PRELOAD_NOT_ZIP_FORMAT = 103;//基线dex非zip格式异常
int CODE_PRELOAD_REMOVE_BASEDEX = 105;//基线dex处理异常
//加载阶段的code说明 分三部分dex加载, resource加载, lib加载
//dex加载
int CODE_LOAD_UNDEFINED = 71;//未定义异常
int CODE_LOAD_AES_DECRYPT = 72;//aes对称解密异常
int CODE_LOAD_MFITEM = 73;//补丁SOPHIX.MF文件解析异常
int CODE_LOAD_COPY_FILE = 74;//补丁拷贝异常
int CODE_LOAD_SIGNATURE = 75;//补丁签名校验异常
int CODE_LOAD_SOPHIX_VERSION = 76;//补丁和补丁工具版本不一致异常
int CODE_LOAD_NOT_ZIP_FORMAT = 77;//补丁zip解析异常
int CODE_LOAD_DELETE_OPT = 80;//删除无效odex文件异常
int CODE_LOAD_HANDLE_DEX = 81;//加载dex异常
// 反射调用异常
int CODE_LOAD_FIND_CLASS = 82;
int CODE_LOAD_FIND_CONSTRUCTOR = 83;
int CODE_LOAD_FIND_METHOD = 84;
int CODE_LOAD_FIND_FIELD = 85;
int CODE_LOAD_ILLEGAL_ACCESS = 86;
//resource加载
public static final int CODE_LOAD_RES_ADDASSERTPATH = 123;//新增资源补丁包异常
//lib加载
int CODE_LOAD_LIB_UNDEFINED = 131;//未定义异常
int CODE_LOAD_LIB_CPUABIS = 132;//获取primaryCpuAbis异常
int CODE_LOAD_LIB_JSON = 133;//json格式异常
int CODE_LOAD_LIB_LOST = 134;//lib库不完整异常
int CODE_LOAD_LIB_UNZIP = 135;//解压异常
int CODE_LOAD_LIB_INJECT = 136;//注入异常
四、代码测试
1.首先在MainAct中添加第一次加载显示,并将运行好的apk放在指定文件夹中
2.加载修复MainAct信息,添加内容为:添加一个Stu类,并在MainAct中使用Stu.toString()方法
3.将第二次打包好的apk也放入指定文件夹中,并使用生成补丁打包工具进行打包
工具使用方式,选择新旧apk,直接GO 即可,如果是发布的apk,可以在设置中添加keystore
在生成不定目录中,可看到已生成的不定文件
五、添加补丁
1.在项目管理中对应的应用中选择移动热修复,
点击上传补丁,并选择之前生成好的补丁文件
上传成功后,会显示就绪状态
点击详情,选择新建发布,并添加发布类型
完成后,变可在上一目录中查看到已发布状态
六、发布测试
在第一次生成的APK中,点击serverFix 按钮,则可直接添加补丁文件,如果想看补丁结果,可以重启apk即可
在log中可查看到已经加载成功
第一次结果
重启apk后
网友评论