版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/darling_R/article/details/61925743
转载请注明出处:http://blog.csdn.net/darling_R/article/details/61925743
AndFix是一个Android App的在线热补丁框架。使用此框架,我们能够在不重复发版的情况下,在线修改App中的Bug。AndFix就是 “Android Hot-Fix”的缩写。
就目前来说,AndFix支持Android 2.3到6.0版本,并且支持arm 与 X86系统架构的设备。完美支持Dalvik与ART的Runtime。
AndFix 的补丁文件是以 .apatch 结尾的文件。
AndFix是阿里巴巴开源项目。
1,在build.gradle文件添加依赖
dependencies {
compile 'com.alipay.euler:andfix:0.3.1@aar'
}
2。在application中做一些初始化操作
public class BaseApplication extends Application {
public PatchManager mPatchManager;
@Override
public void onCreate() {
super.onCreate();
initPatch();
downPatch();
}
private void initPatch() {
// 初始化patch管理类
mPatchManager = new PatchManager(this);
// 初始化patch版本
mPatchManager.init("1.0");
// 加载已经添加到PatchManager中的patch
mPatchManager.loadPatch();
//删除所有已加载的patch文件
mPatchManager.removeAllPatch();
}
/**
* 下载补丁文件
*/
private void downPatch() {
String target = Environment.getExternalStorageDirectory().getAbsolutePath() + "/patch.apatch";
Log.e("monkey", "target--> " + target);
HttpUtils httpUtils = new HttpUtils();//为了简便使用了xUtils下载文件
String url = "http://xxx/patch.apatch";//下载地址
httpUtils.download(url, target, false, true, new RequestCallBack<File>() {
@Override
public void onSuccess(ResponseInfo<File> responseInfo) {
String path = responseInfo.result.getAbsolutePath();
Log.e("monkey", "下载成功--> " + path);
try {
//添加patch,只需指定patch的路径即可,补丁会立即生效
mPatchManager.addPatch(path);
initData();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(HttpException e, String s) {
Log.e("monkey", "下载失败-->");
}
});
}
private void initData() {
List<String> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(i + "");
}
Toast.makeText(BaseApplication.this, list.get(list.size()), Toast.LENGTH_SHORT).show();//故意写成数组越界bug
}
3。将项目(此时是有bug的)打包,命名为oldapk;
4。修改项目bug
5。将修改后的项目打包,命名为newapk;
6。下载官方提供的工具apkpatch
7,执行命令行
命令 : apkpatch.bat -f new.apk -t old.apk -o output1 -k debug.keystore -p android -a androiddebugkey -e android
-f <new.apk> :新版本
-t <old.apk> : 旧版本
-o <output> : 输出目录
-k <keystore>: 打包所用的keystore
-p <password>: keystore的密码
-a <alias>: keystore 用户别名
-e <alias password>: keystore 用户别名密码
8。会在-o后面的路径中生成指定的文件夹,将里面的xxx.apatch文件放到服务器上修改名称为patch.apatch,这样用户在用使用old.apk的时候会下载这个补丁文件,并立即生效