HotFix 集成文档

来源:互联网 发布:49154端口入侵 编辑:程序博客网 时间:2024/05/16 06:25

之前有跟踪考察过这种热修复技术,这段时间阿里公测了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-dataandroid:name="com.taobao.android.hotfix.APPSECRET"android:value="your-app-secret" /><meta-dataandroid: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
原创粉丝点击