一步步集成sophix

前言

Android热修复已经有很多了,这篇文章主要继承一下阿里的sophix热修复。
关于sophix的更多介绍可以看下这篇文章 阿里推出业界首个非侵入式热修复方案Sophix,颠覆移动端传统更新流程!。
在集成阿里Sophix之前,也集成过微信的Tinker,相比较而言,Thinker的参数更多。

注意:

Sophix的收费
它有一个收费阀值
每个账号,每月5万台设备免费。
每个账号,平均到每台设备,一天免费调用20次。
补丁包使用,完全不做限制。不额外计费。
每月5万台设备免费。
按照正常调用,平均每台设备20次调用,完全是够用的

集成步骤

1.准备阿里云账号,添加应用

去阿里云注册账号,注册后进入控制台,添加移动热修复服务。

一步步集成sophix_第1张图片

点击热修复服务后,会跳转到资格申请,申请资格,很快就能过。

2. 进入移动热修复平台,申请用于移动热修复的app。
一步步集成sophix_第2张图片

注意,点击管理,进入app详情后,才能看到AppSecret和RSA密钥,这些都是后续配置sophix必须的。
有什么不懂的可以查看 阿里官方文档之创建应用
前期的工作准备差不多了,就要进入环境集成了。

3 环境集成
  • 在app的build.gradle下添加以下依赖


    一步步集成sophix_第3张图片
  • 添加权限,在AndroidManifest.xml中间的application节点下配置appid,appsecret,RSA密钥等






配置appid,appsecret,RSA密钥




  • 在proguard-rules.pro下添加混淆配置
#基线包使用,生成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
  • 重构application初始化Sophix
    阿里官方文档建议:
    initialize的调用应该尽可能的早,必须在Application.attachBaseContext()或者Application.onCreate()的最开始进行SDK初始化操作,初始化之前不能用到其他自定义类,否则极有可能导致崩溃。而查询服务器是否有可用补丁的操作可以在后面的任意地方。
 @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        String appVersion;
        try {
            appVersion = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
        } catch (Exception e) {
            appVersion = "1.0.0";
        }
        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();
    }

至此,配制酒基本完成了,现在测试一下吧。你也可以查看阿里官方集成文档

4 测试

  • 我在Activity里放了一个TextView,随便显示什么,然后签名打出第一个包
  • 修改TextView的内容,签名打出第二个包
  • 生成补丁 阿里官方生成补丁工具
一步步集成sophix_第4张图片
生成补丁工具

一步步集成sophix_第5张图片
设置签名路径

点击GO会在输出目录中生成 sophix-patch.jar补丁文件

  • 上传补丁
    先创建版本,sophix是根据版本号进行修复的


    创建版本

    上传补丁


    一步步集成sophix_第6张图片
    上传补丁
一步步集成sophix_第7张图片
查看详情
  • 发布完成后,重新启动App,bug就会修复了

你可能感兴趣的:(一步步集成sophix)