Android-Sophix

一、介绍

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,884评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,212评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,351评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,412评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,438评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,127评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,714评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,636评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,173评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,264评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,402评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,073评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,763评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,253评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,382评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,749评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,403评论 2 358

推荐阅读更多精彩内容