阿里移动热修复Sophix使用体验

Android 热修复是个热门技术,各大公司都推出了自己的热修复框架,阿里也推出了全新的Sophix,我决定写个Demo 测试一下,看了阿里的快速接入指南感觉挺简单的,没想到这么简单的事情需要注意的地方也不少,下面就说一下体验的整个过程以及整个过程中应该注意的问题:

一、编写有Bug的测试Demo

        //testObj=new TestClass();
        //testObj.str="hello world";
        txt_test=(TextView)findViewById(R.id.txt_test);
        btn_click=(Button)findViewById(R.id.btn_click);
        txt_test.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(),"测试补丁",Toast.LENGTH_LONG).show();

                Toast.makeText(getApplicationContext(),testObj.str,Toast.LENGTH_LONG).show();

            }
        });

对象不进行声明点击按钮就会导致崩溃。

###二、按照快速接入方法接入 (1)打开链接:https://help.aliyun.com/document_detail/53240.html?spm=5176.doc53238.6.546.6dOrlU进行程序的相关配置和Sophix 补丁修复代码编写 (2) 先打包一个有bug 的apk,然后再修复Demo中的bug 再打包一个apk,下载阿里的补丁生成工具http://ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/SophixPatchTool_windows.zip?spm=5176.doc53247.2.2.ka9BX3&file=SophixPatchTool_windows.zip (3) 用阿里的补丁生成工具生成补丁,然后上传到阿里云平台,并发布补丁。

(4) 安装有Bug 的Demo 然后重启,提示补丁应用成功时既测试成功。

###三、需要注意的地方

(1) 阿里建议采用setSecretMetaData(idSecret, appSecret, rsaSecret) 方法代替在AndroidManifest里的设置。AndroidManifest 配置内容如下:

 <meta-data
            android:name="com.taobao.android.hotfix.IDSECRET"
            android:value="24550855-1" />
        <meta-data
            android:name="com.taobao.android.hotfix.APPSECRET"
            android:value="82172906d532125171f5aec82bb9fe76" />
        <meta-data
            android:name="com.taobao.android.hotfix.RSASECRET"
            android:value="MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCiaa5fH02HPorAKW15myUgHIAEyMK1Mf/A3tVuWKMr2mpLx2N6Bw2iW5wWpExlxmzQo4c5P/CmsuVqb5bWQ+BwErErvH8TTqf+Uq8c7u7O6RJAs32j3UqyVvc1cQWpHfLr5Q9OScXgFrWTcPO0q4CAyzznUd/+FuGa8Jlj9l00EyjMy4HSk5X9C3l6ZovTQmyRHr0C95S/w8nKBBlzxa2otHKcq6pfNImf+Vs0s4BVShHqD2LSxGzCTt+ebUFbEWden2xpYPY0hu/jaYdP8eQ0HTZ2GhFoGO5+zRoVctcKtAuZuwxaNm2ZPKQlN64qSFnRSWzUUcbtxPJVD44S8p4hAgMBAAECggEBAI/PH/VeVFnCyT0p8aPR+mealMins7CZmyp+pWHV3nXAKor6/FxaznnKwEVUKcmcj1GW2u+YbFBO69D5CgijhaH3CyX8/FBuP1Z0hFYMQyy3N9BOnptwIOoVE0Qg1bBPsn+qDYl2zV2E/jaVt1Vs3pYsX7s7xijIve9hx5C53wFx5HzV3RqkTY2FAQPI28A5eFdBObB2a7hKVnardfnvrtOHG5qtDQcSMoksgaXdTAJCwSwlze0u8+/4F9qm5PRanUgvE1OECOZHdx9CYX09EshBPtJOm3zMqcPljippkr9lSn7lFexT2TR7Yg9M1xskSPfyqB+bSEBBOy3ryvtNIAECgYEAzORP4pJMZjBtmDbbQ0XnSZIzISFVXeF8tBOGkLgnZ2zFXqizXI/sW3mf1LnDuS/6k2GPxCaYbUR+yY6ufc/xpToc55bR5a9+vKGJhU4PXpOtkK9Xsw1s7G4PJBICoDpJ6pASY5l85zxcDw19HQ/wJaW0pQz26W6lt3RpPGgRxYECgYEAyuzN/DnSfhh3PdcgmPOcBMqXyTlp1Zvkm5SDY8ahglBFcQcsvY/CddSwIyYkqeY9fS3mP7b+bBKEE50+2XINCZsHJg+FGfxBhGiFpeEIxQptTgHHao8dg4XscL3nvkmQNa7K2ER0FLZFAO74pNBJanmUDnw6wkVQ2mkMoHYJaKECgYAs8pUXxjJeZJdWQgp9ypL/j8QJq49XpgS+WF431z5FsRXnOykF0EjwlFDc0NfAA2d793YbeMANkG4j91oOHZUMQyBeKbboJUSvStypUsOKYuk7iUu66uIPR+Gobw8GaWMXwv1VvjEpZRNo9fORcZKkH6LuZlawROazxSTk7IuhgQKBgFEeNIF9Q82wTgpkct1xlI69xctkrg/7z3j590PtZSbIm9nA+nuUejHMIdULLGDWbwIZVQ9nQXFGPZHxq+wUkW2jkUn/rj9i/XXGqpZSzMSnlGY4g9Tu/OdUo921rGv+0C0FgITPaG/XJOJopPCNaquriin4MyzxtI56q9eBF+XBAoGBAK0PZa4J18w75nkzULNK8ImpWPSaVuGAxEfidJe9WoAwcMtkwHsRUtQ9peCPmwffyG7WaAwA7Xt/l8fGEpRiHsJ2pnnvuWQwsK9Pv+HDQ5XTkTfxDHAdzBzwmyJlztu1LL8beq5VzGiFoIJLTRa6MB6EpO6o0u252ucat/9Wo2/Z" />

理解错误: 我以为是可以删除配置内容直接利用函数即可,结果怎么测试都不行。正确的理解是配置内容还需要有,但是可以不设置配置的值,如下:

  <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="" />

(2) 当把setDebug 设为false 时,怎么也不起作用。后来发现是因为签名不一致。特别提醒:一定要保存好签名,另外在打补丁的时候移动保持签名信息一致。

(3) 增加补丁应用成功后重启代码,如下:

 Intent mStartActivity = new Intent(getBaseContext(), MainActivity.class);
                int mPendingIntentId = 123456;
                PendingIntent mPendingIntent = PendingIntent.getActivity(getBaseContext(), mPendingIntentId,    mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);
                AlarmManager mgr = (AlarmManager)getBaseContext().getSystemService(Context.ALARM_SERVICE);
                mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent);
                System.exit(0);

感悟: 事情虽小,只有亲身实践过才知道其中的坑,真是应了那句话:“千看万看,不如经手一遍啊”!

转载于:https://my.oschina.net/zhugenqiang/blog/1512267

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值