Android AndFix(热修复)

https://github.com/alibaba/AndFix

AndFix

下载 构建状态 软件许可证

小胶质

AndFix是一个解决在线错误,而不是重新分配Android应用程序的解决方案。它是作为Android库分发的

Andfix是“的缩写固醇热- 修复 ”。

AndFix支持从2.3到7.0的Android版本,包括ARM和X86架构,Dalvik和ART运行时,都是32位和64位。

AndFix的补丁的压缩文件格式是.apatch它从你自己的服务器发送到客户端来修复你的应用程序的错误。

原理

AndFix的实现原理是方法体的替换,

图片

方法替换

AndFix判断这些方法应该被java自定义注释所替代,并通过挂钩来替换它。AndFix art_replaceMethod在ART或dalvik_replaceMethodDalvik中有本地的方法

有关详细信息,在这里

修复过程

图片

积分

如何获得?

直接将AndFix aar添加到您的项目中作为编译库。

对于你的maven依赖,

< dependency >
  	< groupId > com.alipay.euler </ groupId >
  	< artifactId >和fix </ artifactId >
  	< version > 0.5.0 </ version >
  	< type > aar </ type >
</ dependency >

对于你的gradle依赖,

依赖{
	编译' com.alipay.euler:andfix:0.5.0@aar ' 
}

如何使用?

  1. 初始化PatchManager,
patchManager =  新的 PatchManager(上下文);
patchManager 的init(appversion); //当前版本
  1. 加载补丁,
patchManager loadPatch();

一般来说,您应该尽可能早地加载补丁,在应用程序的初始化阶段(如Application.onCreate())。

  1. 添加补丁,
patchManager addPatch(路径); //下载的补丁文件路径

当一个新的补丁文件被下载后,它将立即生效addPatch

开发工具

AndFix提供了一个称为apkpatch的修补工具

如何获得?

apkpatch工具可以在这里找到

如何使用?

  • 准备两个android包,一个是在线包,另一个是你通过编码修复bug后的包。

  • .apatch通过提供两个包来生成文件,

usage: apkpatch -f <new> -t <old> -o <output> -k <keystore> -p <***> -a <alias> -e <***>
 -a,--alias <alias>     keystore entry alias.
 -e,--epassword <***>   keystore entry password.
 -f,--from <loc>        new Apk file path.
 -k,--keystore <loc>    keystore path.
 -n,--name <name>       patch name.
 -o,--out <dir>         output dir.
 -p,--kpassword <***>   keystore password.
 -t,--to <loc>          old Apk file path.

现在你得到应用程序的救星,补丁文件。然后你需要以某种方式派遣它到你的客户端,推或拉。

有时候,你的团队成员可能会修复对方的错误,而不是只产生一个.apatch对于这种情况,你可以.apatch使用这个工具合并文件,

usage: apkpatch -m <apatch_path...> -o <output> -k <keystore> -p <***> -a <alias> -e <***>
 -a,--alias <alias>     keystore entry alias.
 -e,--epassword <***>   keystore entry password.
 -k,--keystore <loc>    keystore path.
 -m,--merge <loc...>    path of .apatch files.
 -n,--name <name>       patch name.
 -o,--out <dir>         output dir.
 -p,--kpassword <***>   keystore password.

运行示例

  1. 将samplesI / AndFixDemo导入到您的IDE中,使用AndFix(库项目或aar)附加AndFixDemo依赖项。
  2. 构建项目,将包保存为1.apk,然后安装在设备/仿真器上。
  3. 修改com.euler.test.A,引用com.euler.test.Fix。
  4. 生成项目,将包保存为2.apk。
  5. 使用apkpatch工具制作补丁。
  6. 重命名补丁文件out.apatch,然后将其复制到SD卡。
  7. 运行1.apk并查看日志。

注意

ProGuard的

如果启用ProGuard,则必须保存mapping.txt,以便新版本的build可以使用“-applymapping”

有必要保持下面的课程,

  • 本地方法

    com.alipay.euler.andfix.AndFix

  • 注解

    com.alipay.euler.andfix.annotation.MethodReplace

为确保在运行混淆和静态分析工具(如ProGuard)后可以找到这些类,请将以下配置添加到ProGuard配置文件中。

-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
    native <methods>;
}

自修改代码

如果你使用它,比如Bangcle要生成补丁文件,你最好使用原始apk。

安全

以下是重要的,但是不在AndFix的范围之内。

  • 验证补丁文件的签名
  • 验证优化文件的指纹

API文档

javadoc库可以在这里找到


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值