首先了解热修复是什么东西??

就我自己简单的理解:就是不须要又一次打包 公布到市场 然后再让用户又一次下载就能够把一些小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/article/details/47173013

可是我如今仅仅先搞定了一种 ,andfix。

。。以后再慢慢来

首先AndroidStudio的导入路径:compile
'com.alipay.euler:andfix:0.3.1@aar'

在程序的入口处初始化PatchManager 一般在BaseApp里面进行初始化:

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"); //载入已经有了的路径
mPatchManager.loadPatch(); try {
String patchFileString = Environment.getExternalStorageDirectory()
.getAbsolutePath() + APATCH_PATH;
//加入新的路径
mPatchManager.addPatch(patchFileString); //复制且载入补丁成功后,删除下载的补丁
File f = new File(this.getFilesDir(), DIR + APATCH_PATH);
if (f.exists()) {
new File(patchFileString).delete();
}
} catch (IOException e) {
Log.e(TAG, "", e);
} } }

对了 ,记得一定要在清单文件中面注冊哦 ~ 不要粗心

补丁文件保存的路径就是mPatchManager.addPatch("");的路径。然后假设须要更新应该会给一个补丁下载的地址 把补丁保存到你设置好的这个路径里面,又一次启动程序就能够把补丁载入进去了,每次载入补丁后 把补丁进行删除。防止每次进程序都会去载入补丁。

然后重点是补丁的生成,,在这一步有点有失误。。希望可以给你们一点提醒

生成path文件的工具就是apkpatch-1.0.3 详细的下载地址 https://github.com/alibaba/AndFix 能够在这里面找到

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

然后就是生成补丁文件

先进入到apkpatch所在的目录  假设输入apkpatch显演示样例如以下 是对的

然后能够把你要合并的两个apk 和你的密钥库文件都放到里面来 方便 命令的输入

命令
: apkpatch.bat-fnew.apk-t
old.apk-o
output1 -k
debug.keystore-p
android -a
androiddebugkey -e
android

-f<new.apk>
:新版本号

-t<old.apk>
: 旧版本号

-o<output>
: 输出文件夹

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

-p<password>:
keystore的password

-a<alias>:
keystore 用户别名

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

然后要注意的是 andfix 不能改动成员变量 也不能改动布局文件

在你打包的时候 两个apk包必须都是用相同的打包方式 debug 或者release 假设两个不相同的话,会报错 。由于两次生成的buildConfig是不同的,改动了成员变量然后就会报错,产生不了补丁文件。

如图所看到的 是成功的。

当你补丁文件产生成功后。把他移至你在程序入口定义的addPath()路径里面,第二次启动程序后就会改动你改动过的内容。

记得混淆代码:

-optimizationpasses 5                                                           # 指定代码的压缩级别
-dontusemixedcaseclassnames # 是否使用大写和小写混合
-dontskipnonpubliclibraryclasses # 是否混淆第三方jar
-dontpreverify # 混淆时是否做预校验
-verbose # 混淆时是否记录日志
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆时所採用的算法 #重要,別忘了這些。不混淆andfix包,不混淆native方法
-dontwarn android.annotation
-dontwarn com.alipay.euler.**
-keep class com.alipay.euler.** {*;}
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
native <methods>;
}

基于AndFix的热修复 成功后简单的总结总结错失的更多相关文章

  1. 《android基于andFix的热修复方案》思路篇

    1:需求背景 项目上线之后,发现BUG需要修复(比如安卓兼容性等测试难以发现的问题),频繁的更新影响用户体验 2:方案要求 静默下载,耗费流量少,打完补丁后立刻生效,不用重启apk 3:解决思路 3. ...

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

    有篇文章说的比较简洁,大家可以参考下:AndFix使用说明 下面说说实际使用中遇到的问题 1:如何继承到gradle项目中 dependencies { compile 'com.alipay.eul ...

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

    作为阿里巴巴开源的 Android 应用热修复工具——AndFix,帮助 Anroid 开发者修复应用的线上问题.Andfix 是 “Android hot-fix” 的缩写. 1.什么是AndFix ...

  4. AndFix热修复 —— 实战与源码解析

    当你的应用发布后第二天却发现一个重要的bug要修复,头疼的同时你可能想着赶紧修复重新打个包发布出去,让用户收到自动更新重新下载.但是万事皆有可能,万一隔一天又发现一个急需修复的bug呢?难道再次发布打 ...

  5. 安卓热修复之AndFIX

    我致力于最新的前沿安卓技术分析和使用教学,不打算将很多很深的东西,因为有多少人愿意沉下你的心境去学习难点?我一般只会简单提及.文字错漏在所难免还希望同学们喜欢 热修复介绍 热修复是什么? 如果你一个项 ...

  6. Android热修复之AndFix使用教程

    AndFix的github地址 AndFix 全称Android hot-fix,是alibaba的Android热修复框架,支持Android 2.3到6.0的版本,支持arm与X86系统架构,支持 ...

  7. 关于iOS热修复(HotPatch)技术的使用总结

    苹果做了非常多的努力来建造和维持一个健康并且干净的应用环境.其中对现在的现状起到很大作用的部分就是苹果APP STORE,它是被一个十分周密的对所有提交的应用进行检查的审批程序所保护的.尽管这个程序是 ...

  8. 热修复 RocooFix篇(一)

    吐槽之前先放一张大帅图. (md 这张图貌似有点小 不纠结这个了==) 有时候项目刚刚上线或者迭代 测试或者在线上使用测出一个bug来 真让人蛋疼 不得不重新改bug测试 打包混淆上线感觉就向find ...

  9. 阿里Sophix热修复

    阿里巴巴对Android热修复技术已经进行了长达多年的探索. 最开始,是手淘基于Xposed进行了改进,产生了针对Android Dalvik虚拟机运行时的Java Method Hook技术,Dex ...

随机推荐

  1. CentOS6.4安装Docker

    首先,须要安装EPEL仓库 # wget http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm # rpm -ivh e ...

  2. powershell《语音报警系统》

    用powershell实现:“倩女幽魂姥姥”版<语音报警系统> ------[第一章 前言]------ win7,及以上版本中,是自带语音库的,系统自带一套女声中文库,一套女声英文库.用 ...

  3. vue 引入第三方字体包

    1.创建 style_css 文件夹,在当前文件夹下 新建 index.css  和  引入字体包. 2. 在build 目录下,设置 webpack.base.cong.js ,  在module ...

  4. Linux获取进程中变量

    列出所有进程 #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> ...

  5. #学习笔记#——JavaScript 数组部分编程(七)

    24.柯里化 首先想解释一下,“柯里化”的意思, [在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结 ...

  6. CF 843 A. Sorting by Subsequences

    A. Sorting by Subsequences You are given a sequence a1, a2, ..., an consisting of different integers ...

  7. arping---发送arp请求到一个相邻主机

    arping命令是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包,通过ping命令检查设备上的硬件地址.能够测试一个ip地址是否是在网络上已经被使用,并能够获取更多设备信息.功能 ...

  8. 小的时候.by小雷

    小的时候,总是有很多想法.   想去做,却做不成.   因为,自己小,被父母约束着,被学校圈着,被老师教育着. 想买个小霸王游戏机,没钱.在父辈的眼中,"游戏" ,游戏室,电脑游戏 ...

  9. hdu 1233 还是畅通project (克鲁斯卡尔裸题)

    还是畅通project                                              Time Limit: 4000/2000 MS (Java/Others)    M ...

  10. if 的理解

    1. if 实现集合的划分 比如著名的 Prim 算法(最小生成树),从某一确定的点出发,每次新加入的点,都是在已访问过的结点(u∈U)和未访问过(v∈V−U)的结点之间的边.这里的未被访问(V−U) ...