美文网首页
Android-Sophix

Android-Sophix

作者: 恋之无痕 | 来源:发表于2018-10-29 15:05 被阅读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

    相关文章

      网友评论

          本文标题:Android-Sophix

          本文链接:https://www.haomeiwen.com/subject/vvcbtqtx.html