美文网首页
使用bugly热更新记录(一)

使用bugly热更新记录(一)

作者: 闫回 | 来源:发表于2017-11-09 13:51 被阅读0次

现在市面上热更新方案很多,本篇尝试使用bugly方案,bugly对tinker进行封装并添加后台管理,使用更新方便,目前免费。
bugly热更新官方使用指南地址:https://bugly.qq.com/docs/user-guide/instruction-manual-android-hotfix/?v=20170912151050
如果有时间的话最好看下介绍视频,你会避免接入过程中的很多问题。


上述步骤可以参考文档完成,很简单,第三步我们采用enableProxyApplication = false 的情况,这也是bugly推荐的方式。
这时我们可以打开热更新API接口,把设置bugly的一些参数加入到自己的SampleApplicationLike类中,https://bugly.qq.com/docs/user-guide/api-hotfix/?v=20170912151050
例如我加入的
@Override
public void onCreate() {
    super.onCreate();

    initBuglyHotFix();

}

private void initBuglyHotFix() {

    // 设置是否开启热更新能力,默认为true
    Beta.enableHotfix = true;
    // 设置是否自动下载补丁,默认为true
    Beta.canAutoDownloadPatch = true;
    // 设置是否自动合成补丁,默认为true
    Beta.canAutoPatch = true;
    // 设置是否提示用户重启,默认为false
    Beta.canNotifyUserRestart = true;
    // 补丁回调接口
    Beta.betaPatchListener = new BetaPatchListener() {
        @Override
        public void onPatchReceived(String patchFile) {
            Toast.makeText(getApplication(), "补丁下载地址" + patchFile, Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onDownloadReceived(long savedLength, long totalLength) {
            Toast.makeText(getApplication(),
                    String.format(Locale.getDefault(), "%s %d%%",
                            Beta.strNotificationDownloading,
                            (int) (totalLength == 0 ? 0 : savedLength * 100 / totalLength)),
                    Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onDownloadSuccess(String msg) {
            Toast.makeText(getApplication(), "补丁下载成功", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onDownloadFailure(String msg) {
            Toast.makeText(getApplication(), "补丁下载失败", Toast.LENGTH_SHORT).show();

        }

        @Override
        public void onApplySuccess(String msg) {
            Toast.makeText(getApplication(), "补丁应用成功", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onApplyFailure(String msg) {
            Toast.makeText(getApplication(), "补丁应用失败", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onPatchRollback() {

        }
    };

    // 设置开发设备,默认为false,上传补丁如果下发范围指定为“开发设备”,需要调用此接口来标识开发设备
    Bugly.setIsDevelopmentDevice(getApplication(), true);
    // 多渠道需求塞入
    // String channel = WalleChannelReader.getChannel(getApplication());
    // Bugly.setAppChannel(getApplication(), channel);
    // 这里实现SDK初始化,appId替换成你的在Bugly平台申请的appId
    //第三个参数就是是否开启debug的参数
    Bugly.init(getApplication(), "900029763", true);
}

请注意这里面的参数设置,例如这行Beta.canNotifyUserRestart = true;
是否提示用户重启,为了方便我们看到自己的效果,这时我们这时了true,还有这行 Bugly.init(getApplication(), "900029763", true);
第三个参数就是开启debug的参数
然后我们需要在bugly平台注册一个账号,创建自己的应用,获取自己的App ID



我们需要在SampleApplicationLike中修改这个参数
Bugly.init(getApplication(), "900029763", false);第二个参数就是我们的App ID。
我在自己的demo里面写了一个bug

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    findViewById(R.id.bt_test).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Toast.makeText(MainActivity.this, Bug.getBugString(), Toast.LENGTH_SHORT).show();


        }
    });

}

class Bug{

  static String getBugString(){

     String str=null;

     Log.e("BugClass","get string length:"+str.length());

     return "This is a bug class";
 }

}
这时一个空指针异常
这时我们打开tinker-support.gradle文件,修改tinkerId


记得要在build.grade文件里面配置自己的签名信息,这时我们可以生成自己的基准包了,注意关闭自己的instant run模式,我们打开右侧的gradle,双击assembleRelease,就会生成自己的基准包

我们把app-release.apk安装到自己的手机上面

这时点击TEST按钮程序就会崩溃,错误信息如下

好了,这时我们可以修复我们的bug

然后修改tinker-support.gradle文件中的baseApkDir,一定要和左侧基准包一致,不然无法修复,修改第二个参数就是tinkerId,把1.0.1-base改成1.0.1-patch即可


这时我们可以生成对应的补丁包了,双击下图中的buildTinkerPatchRelease即可

然后在左侧可以看到生成的补丁包

patch_signed_7zip.apk就是补丁包,这时我们打开bugly热更新管理平台

点击发布新补丁,上传patch_signed_7zip.apk文件即可,注意我们上传补丁包前一定要运行我们的基准包,上传我们的基准包的信息给bugly平台,这样我们上传补丁包才可以修复我们的bug,上传过后我们重新运行我们的基准包
可以看到bug修复成功,上面的提示信息和弹框都可以在SampleApplicationLike设置关闭,注意一定要重启应用或者屏幕关闭后开启,bug才能修复成功。
实际的开发中都会有很多的渠道包,而且会加固,多个渠道包如何进行热修复呢?下篇会将自己集成美团walle多渠道打包和360加固的过程分享出来。
demo地址https://github.com/yanchenling/MyHotFixDemo

相关文章

网友评论

      本文标题:使用bugly热更新记录(一)

      本文链接:https://www.haomeiwen.com/subject/dspymxtx.html