Android-Sophix

2018-10-29  本文已影响0人  恋之无痕

一、介绍

Sophix是阿里爸爸最新热更新开源框架,它提供了一套客户端服务端一体的热更新方案,做到了图形界面一键打包、加密传输、签名校验和服务端控制发布与灰度功能,让你用最少的时间实现最强大可靠的全方位热更新。

官方文档

最吸引我的地方是它的图形化界面,不过它是有使用设备有限制,如果想不受限制,就得付费了

与以往框架对比

阿里系热更新框架对比

使用流程:

1.首先要登录阿里云 https://www.aliyun.com 当然注册账号是必须有的步骤,然后进入阿里云移动开发服务

移动开发平台 移动开发平台-2

在移动开发平台-2页面中,如果是第一次注册登录的用户,需要开通EMAS(这个是免费的)

2.在管理控制平台中,添加开发应用

添加应用 添加开发应用信息 添加开发应用信息-2

3.下载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后

github代码地址:https://github.com/qay1139069530/SopHixDemo

上一篇下一篇

猜你喜欢

热点阅读