Android热修复之Hotfix接入流程
2017-06-21 14:55
357 查看
在传统的移动应用开发流程中,当我们发现已经发布在应用市场上的APP有Bug时,需要修改Bug升级版本后再重新发布到应用市场,而用户需要重新下载最新版本来替换掉旧版本。这样不仅修复Bug无论是在成本还是时间上代价都太大,而且用户体验也差。因此热修复的开发流程显得更加灵活,在无需重新发版的情况下,进行实时高效的热修复,并且往往是在用户无感知修复,无需下载新的应用,代价小。
如今市场上已经有很多热修复框架,我们可以结合自身项目情况合理选择,主流的框架优缺点如下图:
Hotfix接入流程简单,而且文档说明非常详细,因此先介绍Hotfix的接入流程。
HotFix最大的优势在于:
1.补丁即时生效,不需要应用重启;
2.补丁包同样采用差量技术,生成的PATCH体积小;
3.对应用无侵入,几乎无性能损耗;
4.傻瓜式接入。
1. 接入前的准备
1.1 注册阿里云账号
注册地址:https://account.aliyun.com/register/register.htm
1.2 开通热修复功能
阿里云官网https://cn.aliyun.com/ 选择-产品->移动服务->移动热修复
1.3 创建应用
管理控制台-》创建应用
2. Hotfix接入流程
2.1 添加仓库依赖
在app的build.gradle文件,添加如下配置
repositories { maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" } } dependencies { compile 'com.aliyun.ams:alicloud-android-hotfix:3.0.2' }
2.2 在AndroidManifest.xml中添加权限
<!-- 网络权限 --> <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-permision android:name="android.permission.READ_EXTERNAL_STORAGE"/>
外部存储读权限在6.0以上的系统需要做运行权限处理。
2.3 在AndroidManifest.xml配置应用信息
<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密钥" />
这三个数据在控制台可以获取,如下图
2.4 在Application中的onCreate()方法中初始化Hotfix
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();
注意,在setAppVersion中appVersion确保与app的build.gradle的版本号相同,建议通过代码动态获取APP版本号
2.5 混淆配置
#基线包使用,生成mapping.txt -printmapping mapping.txt #生成的mapping.txt在app/buidl/outputs/mapping/release路径下,移动到/app路径下 #修复后的项目使用,保证混淆结果一致 #-applymapping mapping.txt #hotfix -keep class com.taobao.sophix.**{*;} -keep class com.ta.utdid2.device.**{*;} #防止inline -dontoptimize
自此Hotfix接入完毕,接下来进行简单的补丁测试。
我们要做的测试很简单,改变一下文本内容即可,将下图TextView中的内容Hello World!热修复为Hello Hotfix!
1.将TextView的内容设置为Hello World! 然后打包,这里将打出来的apk命名为old.apk;
2.修改TextView的内容为Hello Hotfix! 然后打包,这里将打出来的apk命名为new.apk;
3.下载补丁工具,地址如下
win:http://ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/SophixPatchTool_windows.zip
mac:http://ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/SophixPatchTool_macos.zip
Windows下运行SophixPatchTool.exe,macOS下运行SophixPatchTool.app
然后将我们刚刚打出来的两个包路径设置进来
设置补丁输出路径和签名,Debug包可以不设置签名
点击Go开始获取补丁
之后我们在输出路径可以发现生成了sophix-patch.jar和hotfix-working文件夹,这里sophix-patch.jar就是我们需要的补丁。
4. 到阿里云控制台上传补丁
4.1 创建版本号
4.2 上传补丁
4.3 发布补丁
为了确保补丁可以正常修复bug,一般在发布前我们需要使用阿里云提供的调试工具对补丁进行测试,具体可以去查看开发文档。
5.在手机上安装old.apk,查看效果,下图示例应用名称为AndFixDemo,第一次启动是TextView显示内容为Hello World!,清除后台退出应用重新时发现TextView显示内容为Hello Hotfix!,证明补丁修改成功.
————————————————————————————————————————
欢迎继续阅读Android热修复之Tinker接入流程
相关文章推荐
- Android热修复之Tinker接入流程
- Android Gradle项目Hotfix热修复技术的接入
- android app 快速接入支付宝流程(android studio)
- 5大Android hotfix 线上热修复框架比较
- Android 支付宝以及微信支付快速接入流程
- Android热修复:Andfix和Hotfix,两种方案的比较与实现
- Android热修复:Andfix和Hotfix,两种方案的比较与实现
- Android端接入微信支付的详细流程
- Android开发——支付宝和微信支付快速接入流程
- Android 支付宝以及微信支付快速接入流程
- Android 支付宝以及微信支付快速接入流程
- Android 支付宝微信支付快速接入流程
- Android热修复_待修复dex打包详细流程
- Android 支付宝接入流程
- Android打补丁 热修复(HotFix)小结
- android app 快速接入银联支付流程(android studio版)
- android 热修复 HotFix 混淆apk生成patch包方案
- Android 支付宝接入流程
- android app 快速接入银联支付流程(android studio版)
- Android开发——支付宝和微信支付快速接入流程