热修复学习四:AndFix详解一


一、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

        output dir.

-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

        output dir.

-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架构技术脑图;查漏补缺,体系化深入学习提升

img

  • 一线互联网Android面试题含详解(初级到高级专题)

这些题目是今年群友去腾讯、百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。并且大多数都整理了答案,熟悉这些知识点会大大增加通过前两轮技术面试的几率

img

有Android开发3-5年基础,希望突破瓶颈,成为架构师的小伙伴,可以关注我
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
先把apatch文件push到手机上:

结尾

  • 腾讯T4级别Android架构技术脑图;查漏补缺,体系化深入学习提升

[外链图片转存中…(img-CDobyLei-1715340938459)]

  • 一线互联网Android面试题含详解(初级到高级专题)

这些题目是今年群友去腾讯、百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。并且大多数都整理了答案,熟悉这些知识点会大大增加通过前两轮技术面试的几率

[外链图片转存中…(img-tzWgEwLA-1715340938460)]

有Android开发3-5年基础,希望突破瓶颈,成为架构师的小伙伴,可以关注我
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 13
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值