HotFix 集成文档

之前有跟踪考察过这种热修复技术,这段时间阿里公测了HotFix 特此写这篇集成文档。

第一步 登陆阿里百川 创建应用

这里写图片描述


第二步 创建项目 引用代码库

当然也可以引用官方jar包,我这里直接引用远程库了。

dependencies {
    compile 'com.alibaba.sdk.android.plugins:alisdk-hotfix:1.0.0.3'
    compile 'com.alibaba.sdk.android.plugins.jar:alisdk-utdid:0.0.1'
}

这里写图片描述


第三步 AndroidManifest.xml 中添加配置信息

在“application”节点下添加如下配置:

<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="your-app-secret" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="your-rsa-secret" />

添加权限

<! -- 网络权限 -->
<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.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

这里写图片描述

画红线的地方替换你的信息。由于现在hotfix是属于公测期间所以需要你申请公测资格

申请完之后就可以在hotfix后台看到你的信息了 比如:appId res密钥 secret信息等

这里写图片描述


第四步 在你的Application中添加hotfix代码

这个地方不过多介绍了 mAppId需要替换

public class MainApp extends Application {

    private String mAppVersion;

    private String mAppId = "你的APPID";

    @Override
    public void onCreate() {
        super.onCreate();
        try {
            mAppVersion = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
        } catch (Exception e) {
            this.mAppVersion = "1.0.0";
        }
        HotFixManager hotFixManager = HotFixManager.getInstance().initialize(this, mAppVersion, mAppId, new NewPatchListener() {
            @Override
            public void handlePatch(int i) {
                Toast.makeText(MainApp.this, "请重启应用进行更新", Toast.LENGTH_LONG).show();
            }
        });
        hotFixManager.queryNewHotPatch();
    }
}

第五步 修改代码

打补丁之前的错误代码

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private int s = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btn_hot_fix_test).setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        int id = v.getId();
        switch (id) {
            case R.id.btn_hot_fix_test:
                int i = 25 / s;
                Log.w("wzh", "" + i);
                Toast.makeText(this, "修复成功", Toast.LENGTH_SHORT).show();
                break;
        }
    }
}

修复bug之后的代码

package com.cehome.hotfixtest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private int s = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btn_hot_fix_test).setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        int id = v.getId();
        switch (id) {
            case R.id.btn_hot_fix_test:
                if (s == 0) {
                    s = 1;
                }
                int i = 25 / s;
                Log.w("wzh", "" + i);
                Toast.makeText(this, "修复成功", Toast.LENGTH_SHORT).show();
                break;
        }
    }
}

HotFix要求在原来的代码上编码,注意不要新增Field也不要新增方法,只需要在原来的方法里边修改逻辑解决掉问题即可,例如:

修改前的方法:
 public void A(Object a) {
  ...
  a.getXXX();//a对象可能为空,而造成线上crash
 } 

 修改后的方法:
 public void A(Object a) {
  ...
  if (a != null) {
   a.getXXX();
  }
 }

将修改后的工程打包apk与修复前apk使用patch工具即可生成patch。

首先,需要声明的是,patch是针对客户端某个版本的,patch需要和版本绑定。
举个例子:
新上线的版本1.0发现了一个bug,表示为bug1
修复一个bug以后基于1.0版本产生patch1,修复1.0版本bug1
过不久又发现一个bug,表示为bug2
此时要在修复bug1的基础上再修复bug2,修复后的APK中应包含bug1和bug2,然后在基于1.0版本产生patch2,去替换之前的patch1。
也就是说,同一个版本中的最新patch总是包含该版本所有的bug修复。客户端一个版本只能对应一个patch。
当你选择升级应用时,当然也必须包含该之前所有的bug修复代码。


第六步 打补丁

java -jar alisdk-hotfix-android-pack-tools.jar PATCH srcAPK fixedAPK outPatch signInfo outLog
参数说明:
srcAPK:填写本地的原始APK(有问题的APK)的本地路径,如果文件找不到会报错
fixedAPK:已经修复过该问题的APK
outPatch:输出patch的路径
signInfo:本地的签名配置属性文件,可选,不输入或者不正确则不做签名
outLog:输出日志的目录,可以不填写,默认为控制台输出
这是我截图:
这里写图片描述
我的目录结构:
这里写图片描述


第七步 上传补丁

先打开hotfix后台创建一个版本信息
这里写图片描述
创建完版本信息之后,点击查看详情上传补丁信息。
上传完补丁之后会看到二维码用测试工具先测试补丁是否可用。
这里写图片描述


第八部 测试补丁

先下载补丁测试工具 补丁测试工具

这里写图片描述
先连接应用 然后扫补丁二维码。
这里写图片描述

如果有任何问题可以加入叮叮群 咨询官方人员
这里写图片描述


代码混淆
#HotFix
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
    native <methods>;
}
-keep class com.alipay.euler.andfix.**{
    *;
}
-keep class com.taobao.hotfix.aidl.**{*;}
-keep class com.ta.utdid2.device.**{*;}
-keep class com.taobao.hotfix.HotFixManager{
    public *;
}

文档支持更新中。。。
hotfix现在处于公测中,可能还有一些问题。也在持续关注中

官网地址:http://baichuan.taobao.com//product/hotfix.htm?spm=a3c0d.7662652.1998907851.8.JNLdp3

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值