AndFix 实现热修复功能

参考资料:http://blog.csdn.net/qxs965266509/article/details/49802429

http://blog.csdn.net/yaya_soft/article/details/50460102

http://www.jianshu.com/p/479b8c7ec3e3

http://blog.hwangjr.com/2016/03/02/Android-HotFix%E6%96%B9%E6%A1%88/

随着开发需求的不断迫切,目前开源已经涌现了很多Hot Fix项目,但是从方案上来说,主要是基于rovo89/Xposedalibaba/dexposed;以方法hook,从Field切入的AndFixDex分包Nuwa。而相同原理的不同实现有很多,这里就不再累赘。这三个实现原理截然不同,各有各自优缺点,让我们走近这几个方案。

本文只实现了AndFix来实现热修复功能

1.首先添加依赖关系

compile ‘com.alipay.euler:andfix:[email protected]’

2.然后在Application的onCreate方法中初始化AndFix(自定义BaseApplication,继承Application)

public class BaseApplication extends Application {
      private String appVersion;
      private PatchManager patchManager;
      private static final String APATCH_PATH = "/out.apatch";
      private String patchFile;
      @Override
      public void onCreate() {
          super.onCreate();
          try {
              appVersion = getApplicationContext().getPackageManager().
                      getPackageInfo(getPackageName(), 0).versionName;
          } catch (PackageManager.NameNotFoundException e) {
              e.printStackTrace();
          }
          // 初始化patch管理类
          patchManager = new PatchManager(this);
          // 初始化patch版本
          patchManager.init(appVersion);
          // 加载已经添加到PatchManager中的patch
          patchManager.loadPatch();
          try {
              //自动获取路径
              //patchFile = Environment.getExternalStorageDirectory()
              //.getAbsolutePath().concat(APATCH_PATH);
              //暂时写固定路径,测试用
              patchFile ="/sdcard" + APATCH_PATH;
              //添加到patch
              patchManager.addPatch(patchFile);
             } catch (IOException e) {
               e.printStackTrace();
          }
      }
   }
       

3.在需要的地方调用addPatch方法加载新补丁,如第2步,比如在下载补丁文件后调      用这个方法。

4.修改有bug的地方,分别打出apk包,命名为old.apk,new.apk如下:

public class MainActivity extends AppCompatActivity {
    private TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextView = (TextView) findViewById(R.id.textview);
        mTextView.setText(R.string.old_name);
    }
}

此时 TextView显示的字为“这是old app”,打出一个包,改名字为old.apk。

将MainActivity的修改为:
    public class MainActivity extends AppCompatActivity {
    private TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextView = (TextView) findViewById(R.id.textview);
        mTextView.setText(R.string.new_name);
    }
}

  

此时 TextView显示的字为“这是and_fix app”,打出一个包,改名字为new.apk。

5.关键一步,生成apatch文件,也就是补丁文件,用到的是apkpatch-1.0.3工具,这这一步,要把第四步生成的两个apk和签名文件要放到apkpatch的同一文件夹下,如图:

然后在终端运行命令:前提是已经定位到此目录下,否则会报 commond not found

./apkpatch.sh -f new.apk -t old.apk -o ./ -k andfix.jks -p 1q2w3e4r -a 123456 -e 1q2w3e4r

说明:

-f <new.apk> :新版本

-t <old.apk> : 旧版本

-o <output> : 输出目录

-k <keystore>: 打包所用的keystore

-p <password>: keystore的密码

-a <alias>: keystore 用户别名

-e <alias password>: keystore 用户别名密码

运行完命令后:

将后缀名为.apatch的文件改下名字,为out.apatch,然后拷贝到手机中的sd的根目录下,重新安装old.apk,就会看到页面如下:

注意 !!前提要在Manifest中注册相关权限

<!-- 在SDCard中创建与删除文件权限 -->

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

<!-- 往SDCard写入数据权限 -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

时间: 2024-10-19 19:16:03

AndFix 实现热修复功能的相关文章

基于AndFix的热修复 成功后简单的总结总结错失

首先了解热修复是什么东西?? 就我自己简单的理解:就是不须要又一次打包 公布到市场 然后再让用户又一次下载就能够把一些小bug和需求通过补丁的形式进行改动. 然后如今的热修复方式有大致的三种: 1.dexposed   github https://github.com/alibaba/dexposed 2.andfix   github https://github.com/alibaba/AndFix 3.bsdiff  http://blog.csdn.net/lazyer_dog/art

AndFix Bug 热修复框架原理及源码解析

作为阿里巴巴开源的 Android APP--热修复工具AndFix ,帮助 Anroid 开发者修复应用的线上问题.Andfix 是 "Android hot-fix" 的缩写. 1.什么是AndFix?AndFix是阿里巴巴出的一个专门针对Android的热修复框架,那什么是热修复呢?就是不需要重新安装APK而达到修复bugs的目的.看看阿里巴巴官方对AndFix的描述:英文好的可以看官网说明文档(有翻译不妥欢迎指出)1.AndFix是一个Android库,它是在线解决bugs,而

AndFix Bug热修复框架原理及源码解析

?? AndFix原理 AndFix的原理就是方法的替换,把有bug的方法替换成补丁文件中的方法.  注:在Native层使用指针替换的方式替换bug方法,已达到修复bug的目的. 使用AndFix修复热修复的整体流程: 方法替换过程: 源码解析 解析源码从使用的方法一一解析. 在自定义Application中初始化PatchManger: PatchManager mPatchManager = new PatchManager(); 1 1 直接实例化了一个PatchManger实例对象,接

《android基于andFix的热修复方案》实战篇

有篇文章说的比较简洁,大家可以参考下:AndFix使用说明 下面说说实际使用中遇到的问题 1:如何继承到gradle项目中 dependencies { compile 'com.alipay.euler:andfix:[email protected]' } 截止目前2016-5-3 这种引用方式,是不会再armeabi-v7下面引入so库的,我们要手动添加进去 地址:https://github.com/alibaba/AndFix/blob/master/libs/armeabi-v7a/

Android热修复框架AndFix原理解析及使用

一.前言 最近腾讯弄出一个Tinker热修复框架,那么本文先不介绍这个框架,先来介绍一下阿里的一个热修复框架AndFix,这个框架出来已经很长时间了,但是看网上没有太多非常详细的讲解,这里就来做一次分析.正好项目中要使用到.首先这个框架是开源的:https://github.com/alibaba/AndFix 其实在最早的时候我已经分析了阿里的另外一个热修复框架:Dexposed框架,还不了解的同学可以点击这里查看:Dexposed框架原理解析以及使用 当时介绍这个框架的时候发现他的实现原理很

android--------阿里 AndFix 热修复

AndFix,全称是Android hot-fix.是阿里开源的一个热补丁框架,允许APP在不重新发布版本的情况下修复线上的bug. 支持Android 2.3 到 6.0,并且支持arm 与 X86系统架构的设备.完美支持Dalvik与ART的Runtime,补丁文件是以 .apatch 结尾的文件. 原理 AndFix的原理就是方法的替换,把有bug的方法替换成补丁文件中的方法: 直接在native层进行方法的结构体信息对换,从而实现完美的方法新旧替换,从而实现热修复功能. 添加依赖和混淆

Andfix热修复原理

一.前言 最近腾讯弄出一个Tinker热修复框架,那么本文先不介绍这个框架,先来介绍一下阿里的一个热修复框架AndFix,这个框架出来已经很长时间了,但是看网上没有太多非常详细的讲解,这里就来做一次分析.正好项目中要使用到.首先这个框架是开源的:https://github.com/alibaba/AndFix 其实在最早的时候我已经分析了阿里的另外一个热修复框架:Dexposed框架,还不了解的同学可以点击这里查看:Dexposed框架原理解析以及使用 当时介绍这个框架的时候发现他的实现原理很

android产品研发(七)--&gt;Apk热修复

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

Android热修复框架汇总整理(Hotfix)

??Android平台出现了一些优秀的热更新方案,主要可以分为两类:一类是基于multidex的热更新框架,包括Nuwa.Tinker等:另一类就是native hook方案,如阿里开源的Andfix和Dexposed. 基于native hook的方案 ??需要针对dalvik虚拟机和art虚拟机做适配,需要考虑指令集的兼容问题,需要native代码支持,兼容性上会有一定的影响: 基于Multidex的方案 ??需要反射更改DexElements,改变Dex的加载顺序,这使得patch需要在下