阿里云热修复之初体验—Sophix

之前一直有听热修复的新闻,但是也没有真正的接触,最近照着官方文档进行了细细评味了一番,将我的经历及体会记录如下:

第一步就是在本地创建一个项目,然后在项目的一个页面中写一句话:“打补丁前”;创建好项目之后就可以开始接入Sophix一些操作了。

首先最重要的当然是官方开发文档了,详细内容可以查看官网 https://help.aliyun.com/document_detail/53240.html?spm=a2c4g.11174283.6.546.s4DZiK

在接入之前,我们需要做一些准备工作,其实就是将我们的应用在阿里云上面进行报备,也方便我们后续的更新工作。 然后入口呢,是从这里进入 https://www.aliyun.com/

但是在使用之前,需要先注册一下,然后还需要实名认证,这些过程就不一一记录了,操作起来还是挺快的(预先准备好身份证哦)
然后呢,要在控制台这边添加产品

作为测试项目,产品名称我直接填写的项目名称,图标直接去网上找了一个Android的图片上传了上去,分类看项目吧,我没填写也是可以的。创建完成之后,会有一个卡片式的记录了你的产品信息,单击进去,添加应用,选择了创建Android应用。然后填入应用名称和包名,这里填的内容就保持和manifest里面的保持一致就OK了。创建好之后也是一个卡片记录了应用的信息,但是这里的数据不全,我们要去另一个地方拿数据

当走到这一步,我们的准备工作就完成了,现在开始按照官方文档搞一遍:
首先在app下的内层的gradle中添加maven仓库:
 repositories {
        maven {
            url "http://maven.aliyun.com/nexus/content/repositories/releases"
        }
    }
然后在dependencies里面添加依赖:
compile 'com.aliyun.ams:alicloud-android-hotfix:3.2.1'
然后gradle就可以放一边了,接下来要添加一些权限:其实这些权限想想也知道需要添加,当然Android6.0以后对于权限的申请工作要做好哦。
<! -- 网络权限 -->
<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,当然是继承app中的Application,然后重写
attachBaseContext方法,并将下面的代码复制到super.attachBaseContext(base);之后:
String appVersion = "";
        try {
            appVersion = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
        } catch (Exception e) {
            appVersion = "1.0";
        }

        // initialize必须放在attachBaseContext最前面,初始化代码直接写在Application类里面,切勿封装到其他类。
        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();
当然,别忘了在manifest中注明自己的Application哈,然后在manifest的Application节点下添加如下信息:
<meta-data
            android:name="com.taobao.android.hotfix.IDSECRET"
            android:value="***" />
        <meta-data
            android:name="com.taobao.android.hotfix.APPSECRET"
            android:value="***" />
        <meta-data
            android:name="com.taobao.android.hotfix.RSASECRET"
            android:value="***" />
还记得我们准备工作中有查看应用信息吧,这里就用到那些信息了,第一处的IDSECRET填的就是AppKey;第二处的APPSECRET填的就是AppSecret的内容;第三处的 RSASECRET填的就是RSA的那一串长长的内容。
到此,应用的接入工作已经差不多了,我们可以来试验一下了:
为了检测打补丁这样一个过程,官方提供了一个调试工具给我们使用:
这是一个apk安装包,安装到手机上,然后打开应用,在红线处填入应用的包名。接下来,为我们的项目打第一个打补丁之前的包,打成apk之后通过adb命令安装到手机上:adb install -r D:\01\apkname.apk;
然后发现项目有个问题,要紧急修改一下,我们把“打补丁前”改成“打补丁后”。然后重新打一个apk,然后就需要将前后的两个apk进行处理,生成相应的补丁,这里官方提供了工具:
解压后用到SophixPatchTool-3.2.1文件夹中的SophixPatchTool.exe,双击,
点击设置-->然后填入补丁包存放的位置,以及我们打包apk的时候用到的keystor的一些信息,然后点击确定,回到主页面之后,导入旧的APK包和新的APK包,然后点击GO!稍等片刻就会生成一个sophix-patch.jar补丁包;这个包我们要拿来发布的;回到阿里云网站那边

然后把刚刚生成的补丁包上传上去,稍微添加一些说明,点击确定。在下面的列表会看到补丁包的一些信息,然后点击右边的详情。
接下来重点关注右上方的补丁验证,首先在手机上启动刚刚安装的项目,不是调试工具哈,启动了项目之后会看到“打补丁前”,然后去点击调试工具的app,刚刚已经输入好了包名,这时候只要点击“连接应用”这样就请求到了服务器的连接,然后点击“扫描二维码”,来扫描刚刚重点关注的补丁验证那边的一个二维码,然后观察调试工具下方弹出的提示,如果弹出

这说明补丁加载成功,这时候退出我们的项目,清除后台进程之后,重新启动,会发现内容变成了“打补丁后”;到此测试成功,这些都是我们自测,完了之后肯定要将补丁发布,我们选择刚刚补丁详情页下面的发布按钮

然后选择全量发布,这样就通知到每一个安装了应用的设备。然后在手机上只要连接应用,之后就会下载补丁包,不需要扫码下载了,到此,对热修复的初体验就结束了。

热修复里面主要的技术还是反射以及内存上的指针那些的内容,详细的我说的也没有那些大牛解释的清楚,具体的还是参考那些大牛的说明吧。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值