美团robust热修复入门填坑
来源:互联网 发布:视频人声消音软件 编辑:程序博客网 时间:2024/04/30 21:49
以下内容主要涉及robust的入门介绍,其主要步骤在robust上已经说明,但是有必要在实践过程中进行说明。
工程配置
首先在项目的build.gradle文件中加入如下配置:
dependencies { classpath 'com.meituan.robust:gradle-plugin:0.4.0' classpath 'com.meituan.robust:auto-patch-plugin:0.4.0' }
然后在app的build.gradle文件中加入如下配置:
制作补丁时将这个打开,auto-patch-plugin紧跟着com.android.application//apply plugin: 'auto-patch-plugin'打包apk时打开这个选项,关闭auto-patch-pluginapply plugin: 'robust'
apply plugin: ‘robust’在打包apk时需要使用;
在打包补丁时,需要使用apply plugin: ‘auto-patch-plugin’。
添加依赖:
compile 'com.meituan.robust:robust:0.4.0'
在src同级目录新增robust.xml文件。
在robust.xml文件中,hotfixPackage代表需要修复的包名;patchPackname代表补丁生成的包名。
<!--需要热补的包名或者类名,这些包名下的所有类都被会插入代码--> <packname name="hotfixPackage"> <name>com.android.robust</name> </packname><!--补丁的包名--> <patchPackname name="patchPackname"> <name>com.android.robust.patch</name> </patchPackname>
这里有个小技巧,补丁的包名为了不影响修复的包名,建议两者不一致,这样不会影响修复包下的混淆设置。
按照正常方式打包后,可以在build/outputs目录找到mapping.txt和robust/methodsMap.robust,将这两个文件复制到与src同级的robust目录(没有请创建)。
制作补丁
public class SecondActivity extends AppCompatActivity { @Override @Modify protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); TextView txt = (TextView) findViewById(R.id.txt); txt.setText(getTxt()); } @Add private String getTxt(){ return "Robust successs..."; }}
@Modify与@Add注解请查看官网语法。
制作补丁时将这个打开,auto-patch-plugin紧跟着com.android.applicationapply plugin: 'auto-patch-plugin'打包apk时打开这个选项,关闭auto-patch-plugin//apply plugin: 'robust'
在命令行执行
gradlew clean assembleRelease --stacktrace --no-daemon
制作成功后会在build/outputs/robust目录找到patch.jar文件。
加载补丁
实现自己的加载补丁策略。
public class PatchManpulateImpl extends PatchManipulate { @Override protected List<Patch> fetchPatchList(Context context) { Patch patch = new Patch(); patch.setName("test robust..."); patch.setLocalPath(Environment.getExternalStorageDirectory().getPath() + File.separator + "robust" + File.separator + "patch"); patch.setTempPath(Environment.getExternalStorageDirectory().getPath() + File.separator + "robust" + File.separator + "patch"); patch.setPatchesInfoImplClassFullName("com.android.robust.patch.PatchesInfoImpl"); List<Patch> patches = new ArrayList<>(4); patches.add(patch); return patches; } @Override protected boolean verifyPatch(Context context, Patch patch) { return true; } @Override protected boolean ensurePatchExist(Patch patch) { return true; }}
需要注意的是com.android.robust.patch.PatchesInfoImpl的包名需要与robust.xml中的patchPackname标签的配置保持一直。
<patchPackname name="patchPackname"> <name>com.android.robust.patch</name></patchPackname>
patch.setPatchesInfoImplClassFullName("com.android.robust.patch.PatchesInfoImpl");
将补丁push到手机。
adb push patch.jar /sdcard/crash/patch_temp.jar
加载补丁之后,可以看到SecondActivity 显示内容变化成修复后的内容。
演示代码地址
notes:
public class Patch implements Cloneable {... //原始补丁文件的路径,推荐放到私有目录 public String getLocalPath() { return localPath + ".jar"; } //解密之后的补丁文件,可以直接运行的补丁文件,建议加载之后立刻删除,保证安全性 public String getTempPath() { return tempPath + "_temp" + ".jar"; }...}
在加载补丁时,正确的设置为。
patch.setTempPath(Environment.getExternalStorageDirectory().getPath() + File.separator + "robust" + File.separator + "patch");
不带后缀.jar
同时还需要注意push到手机的patch包的文件名应该为patch_temp.jar,如上所示。
- 美团robust热修复入门填坑
- Android 美团Robust热更新 使用入门
- Android 美团Robust热更新 使用入门
- Android 美团Robust热更新 使用入门
- 美团 Robust热更新使用图解
- android热修复之Robust使用(真正的入门)
- android热修复之Robust使用
- 热修复框架研究之Robust原理
- 热修复框架研究之Robust原理
- 美团Android热更新开源框架Robust的使用教程
- 教你如何在SDK开发使用美团Robust进行热更新
- Android热更新方案Robust——美团热更新(热修复)使用介绍
- 热修复入门:Android 中的 ClassLoader
- WORDPRESS 入门填坑
- Android热更新方案Robust
- Android中热修复框架Robust原理解析+并将框架代码从"闭源"变成"开源"(上篇)
- Android中热修复框架Robust原理解析+并将框架代码从"闭源"变成"开源"(下篇)
- Android中热修复框架Robust原理解析+并将框架代码从"闭源"变成"开源"(上篇)
- 如何将想要的程序添加到“打开方式”
- 转:uploadify HTTP Error (302)错误的原因
- Java过滤器与SpringMVC拦截器之间的关系与区别
- 主机屋免费虚拟主机(一)
- IDC:互联网数据中心
- 美团robust热修复入门填坑
- 文件大小单位转换函数-getFileSize($bytes)
- 一个php笔试题:两个文件相对路径的计算
- php:快速排序的两种方法
- 深入PHP:面向对象、模式与实践-读书笔记:对象工具1
- SSO-单点登录(single sign on)
- 数据仓库
- 代码设计(6.1)《深入PHP:面向对象、模式与实践》
- 面向对象设计和过程式编程(6.2)《深入PHP:面向对象、模式与实践》