您的位置:首页 > 运维架构

阿里热修复方案Sophix

2017-06-14 17:03 357 查看
今天试了下阿里热修复方案Sophix,Sophix还在公测阶段,傻瓜式开发和使用。

Sophix的核心设计理念,就是非侵入性。下面是和其他主流热修复技术的性能比较:



使用也很简单,本人使用的是android studio,不需要下载第三方sdk。首先就是在主module下的build.gradle下添加maven仓库地址:

repositories {
maven {
url "http://maven.aliyun.com/nexus/content/repositories/releases"
}
}


添加gradle坐标版本依赖:

dependencies {
compile 'com.aliyun.ams:alicloud-android-hotfix:3.0.2'
}


配置AndroidManifest文件,在AndroidManifest.xml中间的application节点下添加如下配置:

<meta-data
android:name="com.taobao.android.hotfix.IDSECRET"
android:value="App ID" />
<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="App Secret" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="RSA密钥" />


SDK接口接入,initialize的调用应该尽可能的早,必须在Application.onCreate()的最开始进行SDk初始化操作,否则极有可能导致崩溃。而查询服务器是否有可用补丁的操作可以在后面的任意地方。

SophixManager.getInstance().setContext(this)
.setAppVersion(appVersion)
.setAesKey(null)
.setEnableDebug(true)
.setPatchLoadStatusStub(new PatchLoadStatusListener() {
@Override
public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
// 补丁加载回调通知
if (code == PatchStatus.CODE_LOAD_SUCCESS) {
// 表明补丁加载成功
} else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
// 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;
// 建议: 用户可以监听进入后台事件, 然后应用自杀
} else if (code == PatchStatus.CODE_LOAD_FAIL) {
// 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载
// SophixManager.getInstance().cleanPatches();
} else {
// 其它错误信息, 查看PatchStatus类说明
}
}
}).initialize();
SophixManager.getInstance().queryAndLoadNewPatch();


以上就完成了代码的配置,确实简单。

Sophix热修复时及时versionCode一样也可以更新,通过上面的代码生成两个apk后,就可以使用阿里补丁工具生成两apk对应的sophix-patch.jar文件。

我们可以本地利用调试工具通过sophix-patch.jar热修复原apk得到新apk。

第一次是利用我自己的努比亚手机实验的,利用调试工具热修复时提示找不到包名,此问题可以在官网的接入问题上找到“方案”:



但是我找了半天也没找到在哪手动设置开启aidl。

好吧,换个手机,确实可以了,使用补丁工具和调试工具进行热修复确实很简单。等测试后通过就可以发布到服务器进行正式测试了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  阿里 热修复 Sophix