Android热修复之Hotfix接入流程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a1533588867/article/details/73549206

在传统的移动应用开发流程中,当我们发现已经发布在应用市场上的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接入流程

猜你喜欢

转载自blog.csdn.net/a1533588867/article/details/73549206