基于Nuwa实现Android自动化HotFix

转载 2016年08月30日 17:54:31

What--什么是HotFix

HotFix是针对某一个具体的系统漏洞或安全问题而发布的专门解决该漏洞或安全问题的小程序,通常称为修补程序

Why--为什么我们要用HotFix

试想这样一个场景:当Android发布App之后,如果突然发现了一个严重bug,而这个bug需要进行紧急修复

这时候我们通常的处理流程是:解决bug、重新打包App、测试、向各个应用市场和渠道换包、提示用户升级、用户下载、覆盖安装。有时候仅仅是为了修改了一行代码,也要付出巨大的成本进行换包和重新发布。用户体验来很是糟糕

Question: 有没有办法不重新发布App,不需要用户重新下载覆盖安装,就可以完成Bug的修复?

答案是Yes,HotFix就是做这个事情的。Android HotFix原理介绍可以参照这里:HotFix

Nuwa(女娲)是一个自动化的工具,基于上述原理将骤自动化了,下面我就介绍一下如何使用

How--怎么用

添加Gradle Plugin

在工程的根build.gradle文件中添加

classpath 'cn.jiajixin.nuwa:gradle:1.2.2'

然后我们的build.gradle文件可能长这样:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
        classpath 'cn.jiajixin.nuwa:gradle:1.2.2'
    }
}

添加Nuwa SDK

在app的build.gradle中添加依赖:

apply plugin: "cn.jiajixin.nuwa"

然后我们的build.gradle文件可能长这样:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'cn.jiajixin.nuwa:nuwa:1.0.0'
}

【备注】 这边有个坑,2.0版本的Android Studio为了支持Instant Run, 默认使用的Gradle Plugin是2.0.0-alpha2, 如果用此版本,会报错Error:Cannot get property 'taskDependencies' on null object,乖乖降低到1.2.3,木有此问题

使用Nuwa

1.自定义Application,并且在Application类中添加如下代码:

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    Nuwa.init(this);
    Nuwa.loadPatch(this,"/sdcard/patch.jar")
}

2.运行并安装apk,会在app/build/outputs/目录下自动生成一个叫nuwa的目录:


拷贝此目录到一个指定的目录,比如:

/Users/Documents/nuwa

此apk目前是有bug的apk, 然后我们修复bug, 修复完毕后进入步骤3

3.在修复完bug的code base下执行如下命令:

./gradlew clean nuwaDebugPatch -P NuwaDir=/Users/Documents/nuwa

然后在app/build/outputs/nuwa/debug/目录下会自动生成patch.jar文件:


此文件就是我们热部署的补丁文件

4.我们把补丁文件拷贝到sdcard根目录(这边只是为了测试整个hotfix流程, 自己的项目肯定是放在服务器上,我们通过代码自己去下载和存储)

adb push app/build/outputs/nuwa/debug/patch.jar /sdcard/

5.重新启动app,Bug Fix

基于Nuwa实现Android自动化HotFix

转自: http://www.jianshu.com/p/72c17fb76f21 What--什么是HotFixHotFix是针对某一个具体的系统漏洞或安全问题而发布的专门解决该漏洞或安...
  • lpftobetheone
  • lpftobetheone
  • 2016年01月08日 15:36
  • 2032

5大Android hotfix 线上热修复框架比较

hot fix1.阿里巴巴-淘宝https://github.com/alibaba/dexposed#Dexposed不支持Art模式(5.0+),且写补丁有点困难,需要反射写混淆后的代码,粒度太细...
  • RichieZhu
  • RichieZhu
  • 2016年01月28日 16:02
  • 2637

Android 热修复Nuwa的原理及Gradle插件源码解析

现在,热修复的具体实现方案开源的也有很多,原理也大同小异,本篇文章以Nuwa为例,深入剖析。 Nuwa的github地址 https://github.com/jasonross/Nuwa 以及...
  • sbsujjbcy
  • sbsujjbcy
  • 2016年03月06日 19:09
  • 15593

聊聊Android 热修复Nuwa有哪些坑

前面写了两篇关于Nuwa的文章 然后我说了Nuwa有坑,有人就问Nuwa到底有哪些坑,这篇文章对自己在Nuwa上走过的坑做一个总结,如果你遇到了其他坑,欢迎留言,我会统一加到文章中去。当然有些也不算是...
  • sbsujjbcy
  • sbsujjbcy
  • 2016年03月31日 21:51
  • 8152

Android 热修复之nuwa使用简略

android热更新之nuwa使用
  • u011882998
  • u011882998
  • 2016年10月31日 14:59
  • 572

一步步教你实现Android HotFix热更新

这篇文章是手把手教你如何实现热更新的,对于热更新的原理这里不涉及 实现热更新技术要点如下: (1)如何防止类被打上CLASS_ISPREVERIFIED的标志 (2)如何制作补丁包 (3)如何动态加载...
  • u010937230
  • u010937230
  • 2017年06月20日 21:05
  • 1349

Android studio集成HotFix

直接进入主题,记录一下过程遇到的坑。以后谨记。 首先,接入流程&准备工作看看官方文档。 ·注册阿里百川开发者 ·创建百川应用 ·申请产品权限 ·集成SDK ·生成...
  • wangyanchao000
  • wangyanchao000
  • 2016年10月11日 00:57
  • 983

Android打补丁 热修复(HotFix)小结

需求场景:        当我们的app发布以后,发现有bug,比如维护数据错误,应用逻辑错误,严重的可能引发应用崩溃。这时修改应用可能只需要修改几行代码,或者某个方法就可以搞定。以前为了解决这样的问...
  • u012500046
  • u012500046
  • 2016年03月30日 14:21
  • 2240

Android热修复之HotFix初探

hotfix初探
  • Lchannel
  • Lchannel
  • 2017年02月07日 14:16
  • 652

Android热修复:Andfix和Hotfix,两种方案的比较与实现

Andfix和hotfix是两种android热修复框架。android的热修复技术我看的最早的应该是QQ空间团队的解决方案,后来真正需要了,才仔细调查,现在的方案中,阿里有两种Dexposed和An...
  • yuankundong
  • yuankundong
  • 2016年05月10日 17:44
  • 4074
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于Nuwa实现Android自动化HotFix
举报原因:
原因补充:

(最多只允许输入30个字)