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
- HotFix 集成文档
- Android studio集成HotFix
- 阿里 HotFix 热更新 集成
- iOS版hotfix调研文档
- Android studio集成阿里百川HotFix
- 阿里百川HotFix快速集成
- 安卓阿里百川hotfix集成
- 集成阿里百川hotFix过程步骤
- hotfix
- 东子文档集成
- Hotfix Check
- Local-Hotfix
- Remote-Hotfix
- Android HotFix
- 让Eclipse 集成 JDK 文档
- 摇一摇截屏相关功能 -- 集成文档
- UMeng统计分析Android集成文档
- 银联支付集成文档
- 使用Maven生成web-app无法使用EL表达式的解决方法
- 常用开发语言及相应框架
- JAVA Math类的数学计算函数
- vs新特性学习总结
- 安卓平台OpenGL ES的调用
- HotFix 集成文档
- [LeetCode] 136. Single Number
- 研究生生涯,新开一个坑
- 无法定位程序输入点WSAPoll于动态链接库ws2_32.dll
- 详解二叉查找树算法的实现
- WebClient Post 和 Get
- 比svn更专业的代码托管软件git+coding.net(一)
- 【Shell】linux中shell变量$#,$@,$0,$1,$2的含义解释
- Android 文件操作帮助类FileUtils文件