大雁才成群结队,雄鹰永远孤傲飞翔

之前跟大家介绍一个Alibaba的框架dexposed框架,此框架能够动态的从线上完成一些补丁的工作。但是,由于它的性能和兼容性(不支持ART)所以,很多朋友都决定不再研究此框架。

今天,这里我再次给大家介绍一个Alibaba的开源框架——AndFix。和Dexposed一样,此框架一样是为了能够在线的打补丁。即发现了bug之后,通过线上补丁修复本地的逻辑代码的工具库。

原理与Dexposed类似,这里我们不做详解,如果不清楚的童鞋,可以看我的另两篇文章:
http://blog.csdn.net/yzzst/article/details/47954479
http://blog.csdn.net/yzzst/article/details/47659987

如果你要问我,为什么alibaba内部团队要做两个差不多的东西?
我只能回答,如果你也在大公司干过,你应该知道有一种悲哀叫——KPI。


AndFix的Github地址:https://github.com/alibaba/AndFix

如何使用?
笔者翻译的官方文档,如下:


AndFix

AndFix是一个Android App的在线热补丁框架。使用此框架,我们能够在不重复发版的情况下,在线修改App中的Bug。AndFix就是 “Android Hot-Fix”的缩写。

就目前来说,AndFix支持Android 2.3到6.0版本,并且支持arm 与 X86系统架构的设备。完美支持Dalvik与ART的Runtime。

AndFix 的补丁文件是以 .apatch 结尾的文件。


AndFix原理

AndFix的原理很简单。就是针对项目中原有方法的替换取代工作:

而我们打一个在线的补丁包,也就有了如下的步骤逻辑:


整合项目使用

直接添加 AndFix aar 到项目中的 编译依赖库中。

maven 依赖:

<dependency><groupId>com.alipay.euler</groupId><artifactId>andfix</artifactId><version>0.3.0</version><type>aar</type>
</dependency>

或者是Gradle依赖

dependencies {compile 'com.alipay.euler:andfix:0.3.0@aar'
}

如何使用

1 . 初始化PatchManager:

patchManager = new PatchManager(context);
patchManager.init(appversion);//current version

2 . 载入补丁包
越早的载入补丁包越好,通常来说,我们一般都会在自定义的Application中的onCreate方法里面载入补丁包。即:

patchManager.loadPatch();

3 . 添加补丁包
新的补丁包,下载后调用addPatch方法添加补丁。这个补丁会立即生效。

patchManager.addPatch(path);//path of the patch file that be downloaded

ProGuard混淆设置

确保一些class文件在使用的时候不被proguard所混淆,当然,proguard的混淆配置如下所示:

  • 原生method
com.euler.cloudfix.CloudFix
  • annotation
com.euler.cloudfix.annotation.MethodReplace
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {native <methods>;
}

开发使用工具

别以为补丁就是我们直接开发一个apk就好了,制作补丁是需要专门的工具的。这里有一个工具,叫做 apkpatch的工具,用来制作AndFix的补丁。

地址:https://github.com/alibaba/AndFix/raw/master/tools/apkpatch.zip

如何使用该工具

生成.apatch 文件

 usage: apkpatch -f <new> -t <old> -o <output> -k <keystore> -p <***> -a <alias> -e <***>-a,--alias <alias>     alias.
 -e,--epassword <***>   entry password.
 -f,--from <loc>        new Apk file path.
 -k,--keystore <loc>    keystore path.
 -n,--name <name>       patch name.
 -o,--out <dir>         output dir.
 -p,--kpassword <***>   keystore password.
 -t,--to <loc>          old Apk file path.

merge .apatch 文件

 usage: apkpatch -m <apatch_path...> -k <keystore> -p <***> -a <alias> -e <***>-a,--alias <alias>     alias.
 -e,--epassword <***>   entry password.
 -k,--keystore <loc>    keystore path.
 -m,--merge <loc...>    path of .apatch files.
 -n,--name <name>       patch name.
 -o,--out <dir>         output dir.
 -p,--kpassword <***>   keystore password.

运行 sample

  1. import samples/AndFixDemo 到自己的IDE中,设置AndFixDemo 依赖于AndFix(library project or aar)。
  2. build项目,保存编译后的结果为1.apk,安装apk到设备中。
  3. 修改com.euler.test.A, 引用com.euler.test.Fix。
  4. build 项目, 保存为 2.apk.
  5. 使用apkpatch工具制作一个补丁。
  6. 重命名补丁文件为out.apatch,然后将文件拷贝到sd卡中。
  7. 运行 1.apk 查看logcat。

/*
* @author zhoushengtao(周圣韬)
* @since 2015年9月15日 下午 15:23:00
* @weixin stchou_zst
* @blog http://blog.csdn.net/yzzst
* @交流学习QQ群:341989536
* @私人QQ:445914891
/

Android不发版也能在线修Bug?——AndFix 框架相关推荐

  1. x-http-wrapper: 如何解决每次发版时,修改http相关代码造成的错误!(Android、iOS、h5)...

    其实是我做了个开源工具(^__^),拿出来给大家鉴赏下,欢迎大家提意见 项目:github.com/xuyt11/x-ht- 欢迎关注和star . 功能:这是一个http相关代码的创建工具. 现在我 ...

  2. 高仿人人android梦想版终极源码发送,人人Android客户端梦想版发布

    人人网梦想版for Android 5.0.1下载(人人网Android客户端) 人人网今天发布Android客户端"梦想版",新版更新的"私信"功能与微信等聊 ...

  3. 客户端单周发版下的多分支自动化管理与实践

    背景 目前,互联网产品呈现出高频优化迭代的趋势,需求方希望尽早地看到结果,并给予及时反馈,所以技术团队需要用"小步快跑"的姿势来做产品,尽早地交付新版本.基于以上背景,美团客户端研 ...

  4. 未找到beta版怎么解决_刚刚,谷歌正式发布Android 11 Beta版,带来多项重磅更新...

    作者 | 安卓开发者博客 译者 | 核子可乐 策划 | 小智 转发链接:https://mp.weixin.qq.com/s/gp2XZGe69KDMAtsOeu56YA 前言 今日,谷歌安卓开发者博 ...

  5. android酷狗界面,酷狗音乐Android 2.2版系统优化版界面曝光

    酷狗音乐Android 2.2版系统优化版界面曝光 2011-03-23 13:30:13  来源:cnbeta 扫码可以: 1.在手机上浏览 2.分享给微信好友或朋友圈 摘要: 酷狗音乐也针对And ...

  6. 官方剧透:1.11 发版前我们偷看了 Flink 中文社区发起人的聊天记录

    简介:自 2014 年正式开源, Flink 发展非常迅速,在 GitHub 上其访问量在 Apache 项目中位居前三.去年年底 Flink Forward Asia 2019 大会公布,仅仅 20 ...

  7. 新浪微博回应热搜被暂停更新一周;即刻 APP 下架一年后恢复上线;Android 11 Beta 版发布| 极客头条...

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极 ...

  8. 小米9卡刷Android 11开发版并安装系统证书抓包

    ROM 小米9 Android 11 开发版的官方 ROM只有卡刷包 https://xiaomirom.com/rom/mi-9-cepheus-china-fastboot-recovery-ro ...

  9. OPPO 全球首发 Android 13 正式版,适配率超 96%!

    今年5月12日, Android 13 在谷歌I/O大会正式亮相,新系统在隐私保护.功能便捷性等方面进行了重大升级,引发全球瞩目.OPPO 作为国内头部手机厂商之一,不仅首批推出 Android 13 ...

  10. 高仿人人android梦想版终极源码发送,人人Android客户端梦想版:一秒钟变微信

    人人网今天发布Android客户端"梦想版",新版更新的"私信"功能与微信等聊天工具同出一辙,还可以发送语音和大幅表情.其他界面也进行了大幅更新. 以下为人人网 ...

最新文章

  1. lnmp mysql 哪个好_lamp与lnmp的选择
  2. 量子信息之父辞世,开山论文写完14年才被发表,晚年去当建筑工人
  3. 3rd_party/flatbuffers/tmp/flatc: No such file or directory
  4. EF-InvalidOperation系列
  5. Nginx:proxy_pass、root、rewrite、alias 的使用详解
  6. Open 语法的使用
  7. koa-router 源码浅析
  8. 如何获得onblur中的值_使用带有onBlur的输入字段和来自Reactjs JSX中的状态块输入的值?...
  9. chrome使用脚本修改组策略_允许Chrome安装第三方网站的脚本以及扩展的方法
  10. VS2015 调试代码时写入位置时发生访问冲突
  11. 智乃的01串打乱(思维+暴力)
  12. error LNK2005: 已经在 app_launcher.obj 中定义
  13. paip.android APK安装方法大总结系统应用的安装
  14. php 如何设置登录访问,DedeCMS设置会员登录才能访问的方法
  15. 【MySQL】mysql中any,in,some,all的区别
  16. 【数据结构-栈】C语言实现顺序栈基本操作
  17. javaScript编码爱心表白
  18. 易语言 查询API之文本和字体函数
  19. Java多线程系列--【JUC集合05】- ConcurrentSkipListMap
  20. 互联网大数据中标签的类型

热门文章

  1. android 3d翻转动画 viewpage,利用ViewPager实现3D画廊效果及其图片加载优化
  2. CSS去掉border框的方法
  3. ios睡眠分析 卧床 睡眠_HealthKit睡眠分析
  4. ios 监测网页按钮_关于iOS加载WebView监控网页上的点击事件
  5. JS 实现右击菜单功能
  6. 数据可视化技术:python数据可视化工具库汇总(共21个)
  7. 掷骰子游戏设计(C++)
  8. 从pvlib入门光伏发电系统
  9. 普通人适合哪种O2O创业模式 O2O模式的应用价值是什么?
  10. Degree and Closeness Centrality