阿里SopHix热修复框架
2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案、阿里AndFix以及微信Tinker(Bugly sdk也集成Tikner热更新)和阿里最新出品Sophix.它们在原理各有不同,适用场景各异。不过从技术上来说多数热修复框架是基于ClassLoader加载机制。下面是常见热修复框架的比较。
开通热修复服务
读者可以打开Sophix热修复的官网:Sophix官网1、注册阿里云账号,选择移动热修复服务 ,选择之后需要开通此功能,点击立即开通即可。 
2、打开管理控制台,点击右上角创建APP。

3、点击Hoxfix列表android版本的app后面的管理即可查看基本信息(AppId、AppSecret和密钥)。
本地接入热修复服务
1,添加依赖库和包
打开项目的app的build.gradle文件,添加maven仓库地址和hotfix库依赖:
repositories {
maven {
url "http://maven.aliyun.com/nexus/content/repositories/releases"
}
}
dependencies {
compile 'com.aliyun.ams:alicloud-android-hotfix:3.1.0'
}
注:如果项目中也依赖其它阿里系SDK,可能会同时依赖了utdid这个SDK,为了避免冲突可以这样。
dependencies {
compile ('com.aliyun.ams:alicloud-android-hotfix:3.1.0') {
exclude(module:'alicloud-android-utdid')
}
}
2,AndroidManifest相关配置
在AndroidManifest配置文件中添加如下配置:
<!-- 网络权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 外部存储读权限,调试工具加载本地补丁需要 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
在application标签下添加如下信息:
<meta-data
android:name="com.taobao.android.hotfix.IDSECRET"
android:value="AppId" />
<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="AppSecret" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="RSA密钥" />
3,在Application中初始化Sophix。
initialize的调用应该尽可能的早,必须在Application.attachBaseContext()或者Application.onCreate()的最开始进行SDK初始化操作,否则极有可能导致崩溃。而查询服务器是否有可用补丁的操作可以在后面的任意地方。
例如:
public class SophixApp extends Application {
@Override
public void onCreate() {
super.onCreate();
initSophix();
}
private void initSophix() {
String appVersion;
try {
appVersion = getPackageManager().getPackageInfo(getPackageName(), ).versionName;
} catch (PackageManager.NameNotFoundException e) {
appVersion = "1.0.0";
e.printStackTrace();
}
// initialize最好放在attachBaseContext最前面
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) {
// 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;
// 建议: 用户可以监听进入后台事件, 然后调用killProcessSafely自杀,以此加快应用补丁,详见1.3.2.3
} else {
// 其它错误信息, 查看PatchStatus类说明
}
}
}).initialize();
// queryAndLoadNewPatch不可放在attachBaseContext 中,否则无网络权限,建议放在后面任意时刻,如onCreate中
SophixManager.getInstance().queryAndLoadNewPatch();
}
}
记得在AndroidManifest中使用我们自己的Application。
生成补丁并上传到控制台
1,为了简单,我们需要生成两个apk,两个apk做一个简单的内容区分即可。将第一个命名为old.apk,代码如下:
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.textView);
mTextView.setText("版本修复前");
}
}
将第二个命名为new.apk,内容如下:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv= findViewById(R.id.fix_text);
tv.setText("版本修复后数据...");
Toast.makeText(this,"版本修复完成",Toast.LENGTH_LONG).show();
}
}
2,生成补丁的话需要下载阿里的打补丁工具SophixPatchTool,选择对应的平台,然后分别选择两次打包生成的apk,点击go即可。
补丁生成后,上传到阿里云平台,版本信息和代码的versionName对应。

然后点击上传补丁即可。


在选择正式发布之前,官方建议您先进行本地测试。下载hotfixdebug工具安装后,填写包名,点击连接应用,然后扫描补丁详情中的二维码下载补丁。或者将补丁包放到手机sdcard,填写绝对路径也是可以的。


Mode:1 表示扫码模式, Code:12 表示应用当前已经有一个补丁, 所以新补丁不会立刻加载需要等下一次重启加载。
总结
Sophix的优点:
1、补丁可以即时生效,不需要应用重启(我测试的过程中是因为本地已经存在了,所以需要重启APP);
2、补丁包同样采用差量技术,生成的PATCH体积小,阿里采用自己的SophixPatchTool进行补丁生成,简单易用;
3、对应用无侵入,几乎无性能损耗;
4、傻瓜式接入。
缺点:
开始收费,不过有免费阈值,每月5万台设备免费。具体资费请查看:价格资费
阿里SopHix热修复框架的更多相关文章
- 阿里 AndFix 热修复框架简介
阿里AndFix热修复框架简介 热修复原理: Android的类加载机制 Android的类加载器分为两种,PathClassLoader和DexClassLoader,两者都继承自BaseDexCl ...
- 阿里Sophix热修复
阿里巴巴对Android热修复技术已经进行了长达多年的探索. 最开始,是手淘基于Xposed进行了改进,产生了针对Android Dalvik虚拟机运行时的Java Method Hook技术,Dex ...
- 阿里最新热修复Sophix与QQ超级补丁和Tinker的实现与总结
2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案.阿里AndFix以及微信Tinker(Bugly sdk也集成Tikner ...
- Android热修复原理(一)热修复框架对比和代码修复
在Android应用开发中,热修复技术被越来越多的开发者所使用,也出现了很多热修复框架,比如:AndFix.Tinker.Dexposed和Nuwa等等.如果只是会这些热修复框架的使用那意义并不大,我 ...
- 手把手带你打造一个 Android 热修复框架(上篇)
本文来自网易云社区 作者:王晨彦 前言 热修复和插件化是目前 Android 领域很火热的两门技术,也是 Android 开发工程师必备的技能. 目前比较流行的热修复方案有微信的 Tinker,手淘的 ...
- 探索安卓热修复框架AndFix的奥秘
虽然阿里的AndFix框架已经出来很长时间了,但是还不了解它的同学依然挺多,接下来就跟着我一起来到AndFix的世界里一起看看,如何达到不用重新安装app就可以修复bug. 1.什么是AndFix? ...
- 十分钟教会你使用安卓热修复框架AndFix
腾讯最近开发出一个Tinker,阿里也有一个Dexposed框架,当然还有一个就是今天的主角热修复框架AndFix.接下来,我会从它的概念.原理.使用方法等为你详细介绍. 1.什么是AndFix? A ...
- 走进热修复框架AndFix的世界
关于阿里的开源热修复框架AndFix引起了广泛共鸣,受到了很多人的青睐.那今天就跟随我的步伐来详细了解一下AndFix的详细信息和使用方法.1.什么是AndFix? AndFix是阿里巴巴出的一个专门 ...
- 热修复框架Tinker的从0到集成之路(转)
转自:http://blog.csdn.net/lisdye2/article/details/54411727 热修复框架Tinker的从0到集成之路 转载请标明出处: http://blog.cs ...
随机推荐
- 设置select,option文本居中
设置select,option文本居中 可以通过 padding 属性设置内边距,使它看上去居中: select{ # 从左到右依次表示上内边距,右内边距,下内边距,左内边距: padding :0 ...
- JS特效实现微博评论逻辑
实现代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- Python常用模块os & sys & shutil模块
OS模块 import os ''' os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录: ...
- HDU 5113--Black And White(搜索+剪枝)
题目链接 Problem Description In mathematics, the four color theorem, or the four color map theorem, stat ...
- [每天解决一问题系列 - 0012] 如何通过程序获取IIS站点信息
问题描述: 在WiX中需要判断某个站点是否存在,WiX没有这个能力,该怎么做呢? 解决方案: 解决方法就是写一个Custom Action来检测,实现的途径也有很多,现在想到了这么几个 1)Power ...
- 基于Docker+Prometheus+Grafana监控SpringBoot健康信息
在微服务体系当中,监控是必不可少的.当系统环境超过指定的阀值以后,需要提醒指定的运维人员或开发人员进行有效的防范,从而降低系统宕机的风险.在CNCF云计算平台中,Prometheus+Grafana是 ...
- RocketMQ 集群监控以及Hello World
RocketMQ 目前有两个版本 alibaba版本和apache版本 一.alibaba版本 tomcat部署: apache-tomcat-7.0.90.tar.gz jdk7 虚拟机redha ...
- 从零开始学 Web 之 DOM(六)为元素绑定与解绑事件
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... +-------------------------------------------------------- ...
- TCP/IP 笔记 - 防火墙和网络地址转换
防火墙是位于内部网和外部网之间的屏障,是系统的第一套防线,作用是防止非法用户的进入. 网络地址转换是一种IP数据包通过路由器或防火墙时通过重写来源IP地址或目的地址的技术,可以用来隐藏或保护内部网络, ...
- 前端回顾:2016年 JavaScript 之星
JavasScript社区在创新的道路上开足了马力,曾经流行过的也许一个月之后就过时了.2016已经结束了.你可能会想你是否错过一些重要的东西?不用担心,让我们来回顾2016年前端有哪些主流.通过比较 ...