基于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 ...
随机推荐
- VS 格式化代码 Ctrl + K, Ctrl + F
- Python: PS 滤镜特效 -- Marble Filter
本文用 Python 实现 PS 滤镜特效,Marble Filter, 这种滤镜使图像产生不规则的扭曲,看起来像某种玻璃条纹, 具体的代码如下: import numpy as np import ...
- 51Nod 1006 最长公共子序列Lcs问题 模板题
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个 ...
- storm1.1运行时问题
java.lang.NoClassDefFoundError: org/apache/curator/shaded/com/google/common/cache/CacheBuilder 程序并没有 ...
- locate---查找文件
- 今日SGU 5.10
SGU 168 题意:从a矩阵求出b矩阵,规则直接看题目就行了,不好打字说明 收获:dp #include<bits/stdc++.h> #define de(x) cout<< ...
- CODEVS——T2744 养鱼喂妹纸
http://codevs.cn/problem/2744/ 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Descr ...
- apache wicket 7.X之HelloWorld
Wicket是什么 Wicket一个开发Java Web应用程序框架. 它使得开发web应用程序变得easy而轻松. Wicket利用一个POJO data beans组件使得它能够与不论什么持久层技 ...
- windows下硬盘安装debian
windows下硬盘安装debian 此方法在 windows8.1 + debian8.7.1 可用 配置系统安装镜像 1 在windows下格式化一个fat32的分区 2 把下载的debian-7 ...
- java中goto语句
goto是java中一个保留字,但在语言中并未使用它. goto语句起源于汇编语言的程序控制,是源码级上的跳跃,这使其招致了不好的声誉,若一个程序总是从一个地方跳转到另一个地方, 还有什么办法能识别程 ...