AndFix
全称Android hot-fix,是alibaba的Android热修复框架,支持Android 2.3到6.0的版本,支持arm与X86系统架构,支持Dalvik和ART Runtime。
原理
AndFix的原理就是方法的替换,把有bug的方法替换成补丁文件中的方法。
使用教程
1. 添加依赖和混淆dependencies { compile 'com.alipay.euler:andfix:0.4.0@aar'}
混淆:
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
native <methods>;
}
2. 在Application.onCreate()中初始化PatchManager
public class AndFixApplication extends Application {
public static PatchManager mPatchManager;
@Override
public void onCreate() {
super.onCreate();
// 初始化patch管理类
mPatchManager = new PatchManager(this);
// 初始化patch版本
mPatchManager.init("1.0");
// String appVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
// mPatchManager.init(appVersion);
// 加载已经添加到PatchManager中的patch
mPatchManager.loadPatch();
}
}
3. 找个地方加载补丁
private static final String APATCH_PATH = "/fix.apatch"; // 补丁文件名
private void update() {
String patchFileStr = Environment.getExternalStorageDirectory().getAbsolutePath() + APATCH_PATH;
try {
AndFixApplication.mPatchManager.addPatch(patchFileStr);
} catch (IOException e) {
e.printStackTrace();
}
}
PatchManager的addPatch方法加载新补丁,项目中可以在下载补丁文件之后调用
6. 使用官方提供的工具apkpatch生成.apatch补丁文件
将两个apk文件和该app的签名文件放入到该目录中
加入签名文件和apk.png
使用命令生成.apatch补丁文件,先cmd进入该目录
进人apkpatch目录.png
使用命令生成补丁
生成补丁文件.png
上图所示则表示补丁包生成完成
apkpatch.bat -f andfix_v2.0.apk -t andfix_v1.0.apk -o output -k AndFixKey.jks -p andfix -a andfix -e andfix
apkpatch.bat -f 新apk -t 旧apk -o 输出目录 -k app签名文件 -p 签名文件密码 -a 签名文件别名 -e 别名密码
- -f <new.apk> :新apk
- -t <old.apk> : 旧apk
- -o <output> : 输出目录(补丁文件的存放目录)
- -k <keystore>: 打包所用的keystore
- -p <password>: keystore的密码
- -a <alias>: keystore 用户别名
- -e <alias password>: keystore 用户别名密码
生成的output文件:
生成的output文件.png
apatch补丁文件.png
将生成的.apatch补丁文件改成代码中写死的fix.apatch