Android热修复方案—AndFix
来源:互联网 发布:网络服务商地址 编辑:程序博客网 时间:2024/05/22 05:38
1、概述
AndFix is a library that offer hot-fix for Android App.
AndFix是支付宝开源的一套热修复框架,使用简单,成功率高。
GitHub:https://github.com/alibaba/AndFix
(1)AndFix是在线修复错误的解决方案,而不是重新分发Android应用程序。它作为Android库分发。
(2)AndFix是“Android hot-fix“缩写。
(3)AndFix支持Android版本从2.3到7.0,既有ARM和X86架构,也支持Dalvik和ART运行运行环境,支持32位和64位。
(4)AndFix的补丁的压缩文件格式是.apatch。 它从您自己的服务器分发到客户端,以修复您的应用程序的错误。
修复过程:
2、用法介绍
(1)添加依赖
在build.gradle添加依赖:
dependencies { compile 'com.alipay.euler:andfix:0.5.0@aar'}
(2)初始化PatchManager
patchManager = new PatchManager(context);patchManager.init(appversion);//current version
(3)加载patch
patchManager.loadPatch();
你应该尽早加载patch,一般来说,在应用程序的初始化阶段(如,Application.onCreate())。
(4)添加patch
//path of the patch file that was downloadedpatchManager.addPatch(path);
当一个新的补丁文件被下载,它将通过addPatch方法立即生效。
(5)制作补丁工具
AndFix提供一个制作补丁工具,apkpatch。
用法:
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.
3、实战
介绍结束,代码写起来:
(1)在Application.onCreate()中初始化PatchManager
public class MainApplication extends Application { public static PatchManager mPatchManager; @Override public void onCreate() { super.onCreate(); // 初始化patch管理类 mPatchManager = new PatchManager(this); // 初始化patch版本 // String appVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName; // mPatchManager.init(appVersion); mPatchManager.init("1.0"); // 加载已经添加到PatchManager中的patch mPatchManager.loadPatch(); }}
(2)加载补丁
package com.chunsoft.testandfix;import android.app.DownloadManager;import android.content.Context;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import java.io.IOException;public class MainActivity extends AppCompatActivity { private static final String APATCH_PATH = "/hotfix.apatch"; private Button btn_show,btn_hotfix; private TextView tv_content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_show = (Button) findViewById(R.id.btn_show); btn_hotfix = (Button) findViewById(R.id.btn_hotfix); tv_content = (TextView) findViewById(R.id.tv_content); btn_show.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //下载补丁 DownloadManager.Request request = new DownloadManager.Request( Uri.parse("https://github.com/chunonesoft/BlogContent/raw/master/hotfix.apatch")); request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI); //设置通知栏标题 request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE); request.setTitle("下载"); request.setDescription("补丁正在下载"); request.setAllowedOverRoaming(false); //设置文件存放目录 request.setDestinationInExternalFilesDir(MainActivity.this, Environment.getExternalStorageDirectory().getAbsolutePath(), "hotfix.apatch"); DownloadManager downManager = (DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE); long id= downManager.enqueue(request); showContent(); } }); btn_hotfix.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String patchFileStr = Environment.getExternalStorageDirectory().getAbsolutePath() + APATCH_PATH; Log.e("--------------",patchFileStr); try { MainApplication.mPatchManager.addPatch(patchFileStr); Log.e("--------------","ok"); } catch (IOException e) { e.printStackTrace(); } } }); } //显示TextView内容 private void showContent() { tv_content.setText("before patch"); Toast.makeText(this,"before patch",Toast.LENGTH_SHORT).show(); }}
PatchManager的addPatch方法加载新补丁,项目中可以在下载补丁文件之后调用,这里为了演示就把补丁文件直接放在本地的SD卡中了,代码中patchFileStr就是补丁存放的位置,.apatch就是生成补丁文件的后缀名,fix就是补丁文件的名字。
(3)应用打包
我们先将以上应用打包,命名为AndFix_V1
修改MainActivity中的代码,打包成AndFix_V2
android studio打包步骤:build—>Generate Signed APK
(4)通过apkpatch生成.apatch补丁文件
使用官方工具apkpatch生成.apkpatch补丁文件:
命令生成补丁:
apkpatch.sh -f 新apk -t 旧apk -o 输出目录 -k app签名文件 -p 签名文件密码 -a 签名文件别名 -e 别名密码
修复后产生补丁:
在本程序中,通过链接下载补丁。
最终效果界面:
源码下载
- Android热修复方案—AndFix
- Android 热修复-AndFix
- Android热修复---AndFix
- Android 热修复 AndFix
- Android 热修复AndFix
- Android热修复框架——AndFix
- Android热修复实践应用—AndFix
- Android 热修复以及阿里AndFix方案使用
- Android 热修复之AndFix
- Android AndFix 热修复框架
- Android热修复之AndFix
- Android AndFix 热修复 使用
- Android AndFix 热修复框架
- Android热修复框架andfix
- Android 热修复 andfix demo
- Android AndFix 热修复框架
- android:AndFix热修复实现
- Android热修复之AndFix
- 如何提升你的男性吸引力?
- vim编辑器的按键操作
- Android各版本号和APIlevel对应表
- 开源软件License汇总
- 运用C语言基础语法完成大数加法(后续完善)
- Android热修复方案—AndFix
- java中的数据类型
- 使用spring的@autowired注解,无法实例化dao,service,controller等
- POJ 3619 Speed Reading G++
- 函数调用堆栈的汇编解析
- java反射分析
- Spring Web MVC框架(十) HTTP缓存
- 线程
- swift3.0 队列请求(上传图片)