有谁使用过阿里巴巴的AndFix框架,android 图片框架热修复

当前位置: &>&&>& >
Android热修复之AndFix使用教程
AndFix的github地址
全称Android hot-fix,是alibaba的Android热修复框架,支持Android 2.3到6.0的版本,支持arm与X86系统架构,支持Dalvik和ART Runtime。
AndFix的原理就是方法的替换,把有bug的方法替换成补丁文件中的方法。
原理-替换方法.png
1. 添加依赖dependencies {
compile 'com.alipay.euler:andfix:0.4.0@aar'}
2. 在Application.onCreate()中初始化PatchManager
public class AndFixApplication extends Application {
public static PatchManager mPatchM
public void onCreate() {
super.onCreate();
// 初始化patch管理类
mPatchManager = new PatchManager(this);
// 初始化patch版本
mPatchManager.init("1.0");
String appVersion = getPaageManager().getPaageInfo(getPackageName(), 0).versionN
mPatchManager.init(appVersion);
// 加载已经添加到PatchManager中的patch
mPatchManager.loadPatch();
3. 找个地方加载补丁,我们这里为了演示,点击按钮进行加载补丁
findViewById(R.id.main_btn).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
private static final String APATCH_PATH = "/fix.apatch"; // 补丁文件名
private void update() {
String patchFileStr = Environment.getExternalStorageDirectory().getAbsolutePath() + APATCH_PATH;
AndFixApplication.mPatchManager.addPatch(patchFileStr);
} catch (IOException e) {
e.printStackTrace();
PatchManager的addPatch方法加载新补丁,项目中可以在下载补丁文件之后调用,这里为了演示就把补丁文件放在本地的SD卡中了,代码中patchFileStr就是补丁存放的位置,.apatch就是生成补丁文件的后缀名,fix就是补丁文件的名字,这里我们将其名字写死。我们看一下打补丁之前MainActivity的所有代码
public class MainActivity extends AppCompatActivity {
private static final String APATCH_PATH = "/fix.apatch"; // 补丁文件名
private TextView mainTv;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainTv = (TextView) findViewById(R.id.main_tv);
mainTv.setText("点击Toast");
mainTv.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showToast();
findViewById(R.id.main_btn).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
private void showToast() {
Toast.makeText(this, "打补丁之前", Toast.LENGTH_LONG).show();
* 动态更新,加载补丁文件
* @author zehua_chen
* create at
private void update() {
String patchFileStr = Environment.getExternalStorageDirectory().getAbsolutePath() + APATCH_PATH;
AndFixApplication.mPatchManager.addPatch(patchFileStr);
} catch (IOException e) {
e.printStackTrace();
4. 我们将以上应用打包,我们命名为andfix_v1.0
andfix_v1.0.png
5. 修改MainActivity中的代码,打包成andfix_v2.0
private void showToast() {
Toast.makeText(this, "打补丁之后", Toast.LENGTH_LONG).show();
mainTv.setText("加载了补丁之后");
上面代码可知,我们只修改TextView的文字和TextView点击之后的Toast内容,然后打包
andfix_v2.0.png
6. 使用官方提供的工具apkpatch生成.apatch补丁文件点击上面的链接下载apkpatch之后解压
apkpatch.png
将两个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
改名成fix.apatch.png
7.运行andfix_v1.0查看修复之前的效果,把补丁文件push到sd卡目录下, 点击Button更新按钮加载补丁文件,再看其效果,到这里我们就完成了AndFix的热修复了
打开File Explorer.png
push fix.apatch文件到sd卡中.png
运行andfix_v1.0没有点击动态更新按钮,点击TextView
打补丁之前.jpg
点击动态更新Button之后再Toast,我们发现Tost的内容变了,但是TextView的内容没换
动态更新再Toast.jpg
退出之后我们重新进入该应用就会发现TextView的内容也变化了。
打补丁之后,退出再重新进入.jpg
延伸阅读:
(责任编辑:美朵)
每日重点推荐
夏医生是自己多年老同事的儿子,国外学成归来做事业,老同事担心儿子诊所刚开,门厅罗雀伤了自尊,便偷偷塞钱给李梅,求她装病去“捧场”。
一周热点文章
在线阅读专题

我要回帖

更多关于 android框架怎么使用 的文章

 

随机推荐