一、AndFix的基本介绍
=============
官方介绍:alibaba/AndFix
以后学习任何新技术,优先去官网查看文档,然后再考虑去看博客文章。
二、AndFix执行流程及核心原理
=================
见官方介绍
三、使用AndFix完成线上bug修复
===================
1、集成阶段
a、gradle中添加AndFix依赖
compile ‘com.alipay.euler:andfix:0.5.0@aar’
b、在代码中完成AndFix的初始化
封装AndFixPatchManager
/**
-
Created by GuanSong
-
Description:管理AndFix所有的api
-
on 2019/8/2.
*/
public class AndFixPatchManager {
private static AndFixPatchManager mInstance = null;
private static PatchManager mPatchManager = null;
private AndFixPatchManager() {
}
public static AndFixPatchManager getInstance() {
if (mInstance == null) {
synchronized (AndFixPatchManager.class) {
if (mInstance == null) {
mInstance = new AndFixPatchManager();
}
}
}
return mInstance;
}
//初始化AndFix方法
public void initPatch(Context context) {
mPatchManager = new PatchManager(context);
mPatchManager.init(Utils.getVersionName(context));
mPatchManager.loadPatch();
}
//加载我们的patch文件
public void addPatch(String path) {
try {
if (mPatchManager != null) {
mPatchManager.addPatch(path);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class Utils {
/**
-
获取应用程序versionname
-
@param context
-
@return
*/
public static String getVersionName(Context context) {
String versionName = “1.0.0”;
try {
PackageManager pm = context.getPackageManager();
PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0);
versionName = pi.versionName;
} catch (Exception e) {
e.printStackTrace();
}
return versionName;
}
}
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
//完成andFix模块的初始化
initAndFix();
}
private void initAndFix() {
AndFixPatchManager.getInstance().initPatch(this);
}
}
2、准备阶段
-
build一个有bug的old apk并安装到手机
-
分析问题解决bug后,build一个new apk
app的build.gradle文件中:
signingConfigs{
//签名打包
release {
storeFile file(“sumok2.jks”)
storePassword “123456”
keyAlias “sumok2”
keyPassword “123456”
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’
signingConfig signingConfigs.release
}
}
然后输入命令行:
gradlew assembleRelease
就可以顺利打包生成一个apk
3、patch生成阶段
apkpatch命令及参数详解
安卓热修复,android打补丁,不用发版本就能实时的解决一些线上版本的bug
进入控制台:先输入 命令:dir 显示所有文件
再输入:apkpatch.bat 这个是在Windows平台下使用的命令
可以看到有两个命令:
usage: apkpatch -f -t -o -k -p <> -a -e <>
usage: apkpatch -m <apatch_path…> -k -p <> -a -e <>
第一个命令 usage: apkpatch -f 是用来生成一个patch文件
第二个命令usage: apkpatch -m 是用来将多个patch文件合并成一个
下面我们来生成一个apatch文件:
usage: apkpatch -f -t -o -k -p <> -a -e <>
-a,–alias alias.
-e,–epassword <***> entry password.
-f,–from new Apk file path.
-k,–keystore keystore path.
-n,–name patch name.
-o,–out
-p,–kpassword <***> keystore password.
-t,–to old Apk file path.
usage: apkpatch -m <apatch_path…> -k -p <> -a -e <>
-a,–alias alias.
-e,–epassword <***> entry password.
-k,–keystore keystore path.
-m,–merge <loc…> path of .apatch files.
-n,–name patch name.
-o,–out
-p,–kpassword <***> keystore password.
以上有对每个字段或参数的作用的解释
我们在控制台输入以下命令:
需要注意的是,在该文件中要先生成新的apk然后拷贝进去,才会出现此正确结果,否则会报错
命令:
apkpatch.bat -f new.apk -t old.apk -o output/ -k sumok2.jks -p 123456 -a sumok2 -e 123456
add modified Method:V printLog() in Class:Lcom/gs/sumok2/utils/Utils;
从这句话 可以看到我们改动了哪些地方
接下来我们看output文件夹:
已经生成了我们需要的apatch文件,这个名字太长了,我们可以给其重命名
使用apkpatch命令生成apatch包
patch安装阶段
-
将apatch文件通过adb push到手机(或者用QQ传送给手机)
-
使用已经安装的应用load我们的apatch文件
-
load成功后验证我们的bug是否修复
先把apatch文件push到手机上:
结尾
- 腾讯T4级别Android架构技术脑图;查漏补缺,体系化深入学习提升
- 一线互联网Android面试题含详解(初级到高级专题)
这些题目是今年群友去腾讯、百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。并且大多数都整理了答案,熟悉这些知识点会大大增加通过前两轮技术面试的几率
有Android开发3-5年基础,希望突破瓶颈,成为架构师的小伙伴,可以关注我
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
先把apatch文件push到手机上:
结尾
- 腾讯T4级别Android架构技术脑图;查漏补缺,体系化深入学习提升
[外链图片转存中…(img-CDobyLei-1715340938459)]
- 一线互联网Android面试题含详解(初级到高级专题)
这些题目是今年群友去腾讯、百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。并且大多数都整理了答案,熟悉这些知识点会大大增加通过前两轮技术面试的几率
[外链图片转存中…(img-tzWgEwLA-1715340938460)]
有Android开发3-5年基础,希望突破瓶颈,成为架构师的小伙伴,可以关注我
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!