安卓热修复,android打补丁,不用发版本就能实时的解决一些线上版本的bug

背景

当一个App发布之后,突然发现了一个严重bug需要进行紧急修复,这时候公司各方就会忙得焦头烂额:重新打包App、测试、

向各个应用市场和渠道换包、提示用户升级、用户下载、覆盖安装。有时候仅仅是为了修改了一行代码,

也要付出巨大的成本进行换包和重新发布。

这时候就提出一个问题:有没有办法以补丁的方式动态修复紧急Bug,

不再需要重新发布App,不再需要用户重新下载,覆盖安装?

搜索发现有这3种方式可以实现(至于其他的方式,暂不清楚)

1.dexposed     github https://github.com/alibaba/dexposed

2.andfix   github https://github.com/alibaba/AndFix

3.bsdiff  http://blog.csdn.net/lazyer_dog/article/details/47173013

dexposed和andfix是alibaba的开源项目,都是apk增量更新的实现框架,目前dexposed的兼容性较差,

只有2.3,4.0~4.4兼容,其他Android版本不兼容或未测试,详细可以去dexposed的github项目主页查看,

而andfix则兼容2.3~6.0,所以就拿这个项目来实现增量更新吧。至于bsdiff,只是阅览了一下,还没研究过。

使用步骤

一,Android studio可以在build.gradle里导入andfix,

compile ‘com.alipay.euler:andfix:0.3.1‘

gradle导入的话还有个小问题,所以还是建议把类库源码导入到你的项目中去

但是我是使用module的方式添加andfix,这样可以直接查看编辑源码,而且直接,后面再说。

我的项目里有andfix类库源码,你可以直接把源码导入到项目中,如下图所示

二,在你的项目记得新建jniLibs文件夹,把我项目中jniLibs里的so文件移到你的jniLibs里,如下图。

三,把我项目的以下代码拷贝到你的Application中,(我项目简单起见就两个类:mainactivity和myapplication)

public class MainApplication extends Application {
    private static final String TAG = "euler";
    private static final String APATCH_PATH = "/out.apatch";
    private static final String DIR = "apatch";//补丁文件夹
    /**
     * patch manager
     */
    private PatchManager mPatchManager;

    @Override
    public void onCreate() {
        super.onCreate();
        // initialize
        mPatchManager = new PatchManager(this);
        mPatchManager.init("1.0");
        Log.d(TAG, "inited.");

        // load patch
        mPatchManager.loadPatch();
        //        Log.d(TAG, "apatch loaded.");

        // add patch at runtime
        try {
            // .apatch file path
            String patchFileString = Environment.getExternalStorageDirectory()
                    .getAbsolutePath() + APATCH_PATH;
            mPatchManager.addPatch(patchFileString);
            Log.d(TAG, "apatch:" + patchFileString + " added.");
        } catch (IOException e) {
            Log.e(TAG, "", e);
        }
    }

    }

四,接着打包1.apk(这个1.apk就相当于你上线的版本)

然后修改mainactivity的toast(),打包2.apk。(

五,生成你的补丁包(最重要的一步)

这时需要用到:apkpatch-1.0.3 你可以到网上下,也可以直接用我项目里的apkpatch-1.0.3压缩文件

在apkpatch-1.0.3中把你生成的1.apk 和2.apk复制到apkpatch-1.0.3文件中,把你的签名文件:**.keystore也复制到apkpatch-1.0.3文件中

接下来cmd命令行上场了

上面输入的命令行:

apkpatch -f 2.apk -t 1.apk -o output1 -k qiushi.jks -p 123456 -a qiushi -e 123456

命令行意思:

apkpatch -f new.apk -t old.apk -o output1 -k 签名文件 -p 签名密码 -a 机构名 -e 机构签名密码

六,如无错误,编译后会生成一个apatch文件,改名成out.apatch,如下图

安装打开1.apk

关闭app(不是简单的退出,而是要结束app的进程),将out.apatch放sdcard根目录(就是你的手机内存根目录)后,重新打开app,toast方法改变了

七,还有源码混淆

ps:

1. 这里只是简单的测试了一下,没有复杂的功能,而且andfix不支持布局资源等的修改。

2. 使用了apk加固时(360加固,百度加固等等),发现在加固前要先apkpatch制作补丁,

不能使用加固后的apk制作,否则补丁无法使用,但是在加固前制作的补丁可以很容易的被反编译出源码

github地址:https://github.com/qiushi123/AndFixDemo

时间: 2024-10-22 11:17:12

安卓热修复,android打补丁,不用发版本就能实时的解决一些线上版本的bug的相关文章

安卓热修复之AndFIX

我致力于最新的前沿安卓技术分析和使用教学,不打算将很多很深的东西,因为有多少人愿意沉下你的心境去学习难点?我一般只会简单提及.文字错漏在所难免还希望同学们喜欢 热修复介绍 热修复是什么? 如果你一个项目已经上线,出现了严重缺陷,那么你第一反应是推送新版本.那么问题来.老子刚下你的APP 你就叫我重新下载?啥东西!卸了.从而导致用户流量的减退.而热修复就是推送一个补丁文件到客户端(很小),用户打开应用时自动安装.是不是很棒? AndFix 热修复原理 已经翻译的源码分析 阿里github官网(英文

探索安卓热修复框架AndFix的奥秘

虽然阿里的AndFix框架已经出来很长时间了,但是还不了解它的同学依然挺多,接下来就跟着我一起来到AndFix的世界里一起看看,如何达到不用重新安装app就可以修复bug. 1.什么是AndFix?AndFix是阿里巴巴出的一个专门针对Android的热修复框架,那什么是热修复呢?就是不需要重新安装APK而达到修复bugs的目的.看看阿里巴巴官方对AndFix的描述:英文好的可以看官网说明文档(有翻译不妥欢迎指出)1.AndFix是一个Android库,它是在线解决bugs,而不是重新安装app

十分钟教会你使用安卓热修复框架AndFix

腾讯最近开发出一个Tinker,阿里也有一个Dexposed框架,当然还有一个就是今天的主角热修复框架AndFix.接下来,我会从它的概念.原理.使用方法等为你详细介绍. 1.什么是AndFix?AndFix是阿里巴巴出的一个专门针对Android的热修复框架,那什么是热修复呢?就是不需要重新安装APK而达到修复bugs的目的.看看阿里巴巴官方对AndFix的描述:英文好的可以看官网说明文档(有翻译不妥欢迎指出)1.AndFix是一个Android库,它是在线解决bugs,而不是重新安装app的

安卓 热修复的原理

韩梦飞沙  韩亚飞  [email protected]  yue31313  han_meng_fei_sha #热修复技术 APP提早发出去的包,如果出现客户端的问题,实在是干着急,覆水难收.因此线上修复方案迫在眉睫. ###概述 基于Xposed中的思想,通过修改c层的Method实例描述,来实现更改与之对应的java方法的行为,从而达到修复的目的. ###Xposed 诞生于XDA论坛,类似一个应用平台,不同的是其提供诸多系统级的应用.可实现许多神奇的功能.Xposed需要以越狱为前提,

android产品研发(七)-->Apk热修复

转载请标明出处:一片枫叶的专栏 去年一整年android社区中刮过了一阵热修复的风,各大厂商,逼格大牛纷纷开源了热修复框架,恩,产品过程中怎么可能没有bug呢?重新打包上线?成本太高用户体验也不好,咋办?上热修复呗. 好吧,既然要开始上热修复的功能,那么就得调研一下热修复的原理.下面我将分别讲述一下热修复的原理,各大热修复框架的比较,以及自身产品中热修复功能的实践. 热修复的原理 通过更改dex加载顺序实现热修复 最新github上开源了很多热补丁动态修复框架,大致有: HotFix      

百川解码精彩回顾:热修复的坑和阿里的解

热修复是很多开发者关心的技术,8月27日晚,阿里百川组织了"百川解码"在线直播,以"热修复的坑和阿里的解"为主题,邀请了三位业界嘉宾对热修复技术进行了探讨,并介绍了阿里百川全面接受公测的热修复解决方案:阿里百川HotFix,就网友提出的相关问题进行了解答.本文是此次直播的精彩回顾. 嘉宾简介 歩川,阿里巴巴资深开发工程师,<让App像Web一样发布新版本>一文作者,在OPPO从事Android Framework两年,腾讯QQ空间工作一年半,热衷研究安卓

tinker热修复gradle接入

今天研究了一天的热修复,热修复,简单的来讲就是在不需要发包的情况下,修改你线上应用的bug,magic,像魔术一样,接入使用后对于我这种小白来说还是很神奇的,同时也考虑了一下,要不要接入我们的项目中,这样就不用因为一个小BUG而去再次发包了,不过,就算要接入项目中,也还有很多坑需要踩,tinker有俩种接入方式,一种命令行接入,一种是gradle接入,本篇只讲gradle接入,下篇我在补充命令行,主要用于自己做个记录,把踩得坑和感想写下来. 首先,基本的配置 在peoject的build中配置如

APP热修复

APP热修复的概念: APP修复是针对修复app中的bug场景来定义的.当我们已上线的app出现bug的时候,我们想在用户不知情的情况下修复这个bug,那么就会用到热修复. APP热修复的实现原理: 首先,生成新版本的apk与旧版本的apk的差异补丁包文件: 其次,使用热修复框架的Api在Application中去尝试加载指定路径的补丁差异包: 最后,只需要将补丁差异包宝贝到对应路径,代开有bug的App,在Applcation创建的时候就会将补丁包文件加载到内存中并且替换对应的方法. 常用的热

Android 热补丁技术——资源的热修复

前言 今年真是热补丁框架的洪荒之力爆发的一年,短短几个月内,已经出现了好几个热修复的框架了,基本上都是大同小异,这里我就不过多的去评论这些框架.只有自己真正的去经历过,你才会发现其中的 大写的坑 事实上,现在出现的大多数热修复的框架,稳定性和兼容性都还达不到要求,包括阿里的Andfix,据同事说,我们自己的app原本没有多少crash,接入了andfix倒引起了一部分的crash,这不是一个热修复框架所应该具有的"变态功能".虽然阿里百川现在在大力推广这套框架,我依旧不看好,只是其思路