基于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/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的热修复 成功后简单的总结总结错失的更多相关文章
- 《android基于andFix的热修复方案》思路篇
1:需求背景 项目上线之后,发现BUG需要修复(比如安卓兼容性等测试难以发现的问题),频繁的更新影响用户体验 2:方案要求 静默下载,耗费流量少,打完补丁后立刻生效,不用重启apk 3:解决思路 3. ...
- 《android基于andFix的热修复方案》实战篇
有篇文章说的比较简洁,大家可以参考下:AndFix使用说明 下面说说实际使用中遇到的问题 1:如何继承到gradle项目中 dependencies { compile 'com.alipay.eul ...
- AndFix Bug 热修复框架原理及源码解析
作为阿里巴巴开源的 Android 应用热修复工具——AndFix,帮助 Anroid 开发者修复应用的线上问题.Andfix 是 “Android hot-fix” 的缩写. 1.什么是AndFix ...
- AndFix热修复 —— 实战与源码解析
当你的应用发布后第二天却发现一个重要的bug要修复,头疼的同时你可能想着赶紧修复重新打个包发布出去,让用户收到自动更新重新下载.但是万事皆有可能,万一隔一天又发现一个急需修复的bug呢?难道再次发布打 ...
- 安卓热修复之AndFIX
我致力于最新的前沿安卓技术分析和使用教学,不打算将很多很深的东西,因为有多少人愿意沉下你的心境去学习难点?我一般只会简单提及.文字错漏在所难免还希望同学们喜欢 热修复介绍 热修复是什么? 如果你一个项 ...
- Android热修复之AndFix使用教程
AndFix的github地址 AndFix 全称Android hot-fix,是alibaba的Android热修复框架,支持Android 2.3到6.0的版本,支持arm与X86系统架构,支持 ...
- 关于iOS热修复(HotPatch)技术的使用总结
苹果做了非常多的努力来建造和维持一个健康并且干净的应用环境.其中对现在的现状起到很大作用的部分就是苹果APP STORE,它是被一个十分周密的对所有提交的应用进行检查的审批程序所保护的.尽管这个程序是 ...
- 热修复 RocooFix篇(一)
吐槽之前先放一张大帅图. (md 这张图貌似有点小 不纠结这个了==) 有时候项目刚刚上线或者迭代 测试或者在线上使用测出一个bug来 真让人蛋疼 不得不重新改bug测试 打包混淆上线感觉就向find ...
- 阿里Sophix热修复
阿里巴巴对Android热修复技术已经进行了长达多年的探索. 最开始,是手淘基于Xposed进行了改进,产生了针对Android Dalvik虚拟机运行时的Java Method Hook技术,Dex ...
随机推荐
- POJ 2104 K-th Number 静态主席树(裸
题目链接:点击打开链接 题意: 给定n长的序列.q个询问 以下n个数字给出序列 每一个询问[l, r] k ,输出该区间中第k大的数 先建一个n个节点的空树.然后每次从后往前新建一棵树,依附原来的空树 ...
- ASP.Net简单的交互案例
控制器 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syste ...
- nginx最新配置
#user nobody;worker_processes 1; #error_log logs/error.log;#error_log logs/error.log notice;#er ...
- PHP 获取完整URL地址
/** * 获取当前完整URL * @return string */ function get_url() { $sys_protocal = isset($_SERVER['SERVER_PORT ...
- 微信小程序从零开始开发步骤(七)引入外部js 文件
上一章讲到小程序页面的四种常见的跳转的方法,这一章写如何引入一个外部的js文件,既utils文件夹的用处,其实步骤很简单: 1:准备好外部想要引入的外部文件,命名为util.js,并且填充固定的文件内 ...
- 【Codeforces Round #426 (Div. 2) A】The Useless Toy
[Link]:http://codeforces.com/contest/834/problem/A [Description] [Solution] 开个大小为4的常量字符数组; +n然后余4,-n ...
- 洛谷 P2021 faebdc玩扑克
P2021 faebdc玩扑克 题目背景 faebdc和zky在玩一个小游戏 题目描述 zky有n个扑克牌,编号从1到n,zky把它排成一个序列,每次把最上方的扑克牌放在牌堆底,然后把下一张扑克牌拿出 ...
- Android开发数据库之第三方ORM框架(GreenDao)
移动APP追求追求功能实现的同一时候,用户体验很重要.開始APP的同一时候.要时刻的切换开发人员的角色,如你开发的时候.是 站在APP的开发角色,处于生产者的位置:当你測试的时候.你应该把自己放在用户 ...
- 【翻译自mos文章】OGG的集成捕捉模式支持Oracle database标准版么?
OGG的集成捕捉模式支持Oracle database标准版么? 来源于: Does OGG 11.2.1 Integrated Capture Work with Oracle Database S ...
- 内存泄漏与指针悬挂&野指针介绍
内存泄漏概念:内存泄漏时指动态申请的内存空间没有正常释放,但是也不能继续使用的情况. 例如: char *ch1; ch1 = new char('A'); char = *ch2 = new cha ...