android 非侵入式热修复框架Hotfix使用

        先看一下比较热门的各大厂商热修复框架对比:

   


       

    Hotfix最新版本spofix是首款非侵入式框架:下面是百度内容

       假设大家都想要把用户代码塞到一个框架里。侵入式的做法就是要求用户代码知道框架的代码,表现为用户代码需要继承框   架提供的类。非侵入式则不需要用户代码引入框架代码的信息,从类的编写者角度来看,察觉不到框架的存在。
 
 例如:
  1)
使用struts的时候,我需要继承一些struts的类,这时struts侵入到了我的代码里。
  2)
使用spring,编写一些业务类的时候不需要继承spring特定的类,通过配置完成依赖注入后就可以使用,此时,spring就没     有侵入到我业务类的代码里。
  
 侵入式让用户代码产生对框架的依赖,这些代码不能在框架外使用,不利于代码的复用。但侵入式可以使用户跟框架更好的     结合,更容易更充分的利用框架提供的功能。
   
非侵入式的代码则没有过多的依赖,可以很方便的迁移到其他地方。但是与用户代码互动的方式可能就比较复杂。


 废话不多说直接看代码实现效果:

  1.直接在项目跟modle添加远程库:

     maven {
      
     url "http://maven.aliyun.com/nexus/content/repositories/releases"  
      }

 整个截图:

 

   2.然后在app的build.gradle里面添加坐标版本依赖:

  1. compile'com.aliyun.ams:alicloud-android-hotfix:3.1.3'
注意,若SDK集成过程中出现UTDID冲突,请参考:阿里云-移动云产品SDK UTDID冲突解决方案
https://help.aliyun.com/knowledge_detail/59152.html
3.新建一个 Application(注意在清单文件中声明name属性)

完整application代码:
   import android.app.Application;

   import com.taobao.sophix.PatchStatus;
   import com.taobao.sophix.SophixManager;
   import com.taobao.sophix.listener.PatchLoadStatusListener;

   /**
   * Created by Administrator on 2017/10/23.
   * code: 1 补丁加载成功
   code: 6 服务端没有最新可用的补丁
   code: 11 RSASECRET错误,官网中的密钥是否正确请检查
   code: 12 当前应用已经存在一个旧补丁, 应用重启尝试加载新补丁
   code: 13 补丁加载失败, 导致的原因很多种, 比如UnsatisfiedLinkError等异常, 此时应该严格检查logcat异常日志
   code: 16 APPSECRET错误,官网中的密钥是否正确请检查
   code: 18 一键清除补丁
   code: 19 连续两次queryAndLoadNewPatch()方法调用不能短于3s
   */

   public class A extends Application {
    @Override
    public void onCreate() {
        SophixManager.getInstance().setContext(this)
                .setAppVersion("1.0.0")//你的后台版本
                .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中
        super.onCreate();
        SophixManager.getInstance().queryAndLoadNewPatch();
     }
   }

后台版本:此版本号一定要与 setAppVersion("1.0.0")一致

4.清单文件配置:
   
   
   
  1. <! -- 网络权限 -->
  2. <uses-permission android:name="android.permission.INTERNET" />
  3. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  4. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  5. <! -- 外部存储读权限,调试工具加载本地补丁需要 -->
  6. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

READ_EXTERNAL_STORAGE权限属于Dangerous Permissions,仅调试工具获取外部补丁需要,不影响线上发布的补丁加载,调试时请自行做好 android6.0以上的运行时权限获取。

AndroidManifest.xml中间的application节点下添加如下配置:

   
   
   
  1. <meta-data
  2. android:name="com.taobao.android.hotfix.IDSECRET"
  3. android:value="App ID" />
  4. <meta-data
  5. android:name="com.taobao.android.hotfix.APPSECRET"
  6. android:value="App Secret" />
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值