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_replaceMethod
Dalvik中有本地的方法。
有关详细信息,在这里。
修复过程
积分
如何获得?
直接将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 '
}
如何使用?
- 初始化PatchManager,
patchManager = 新的 PatchManager(上下文);
patchManager 。的init(appversion); //当前版本
- 加载补丁,
patchManager 。loadPatch();
一般来说,您应该尽可能早地加载补丁,在应用程序的初始化阶段(如Application.onCreate()
)。
- 添加补丁,
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.
运行示例
- 将samplesI / AndFixDemo导入到您的IDE中,使用AndFix(库项目或aar)附加AndFixDemo依赖项。
- 构建项目,将包保存为1.apk,然后安装在设备/仿真器上。
- 修改com.euler.test.A,引用com.euler.test.Fix。
- 生成项目,将包保存为2.apk。
- 使用apkpatch工具制作补丁。
- 重命名补丁文件out.apatch,然后将其复制到SD卡。
- 运行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库可以在这里找到。