Android热修复框架之AndFix
2016-06-01 13:09
645 查看
AndFix
Github:https://github.com/alibaba/AndFixAndFix介绍
AndFix是一个Android App的在线热补丁框架。使用此框架,我们能够在不重复发版的情况下,在线修改App中的Bug。AndFix就是 “Android Hot-Fix”的缩写。就目前来说,AndFix支持Android 2.3到6.0版本,并且支持arm 与 X86系统架构的设备。完美支持Dalvik与ART的Runtime。
AndFix 的补丁文件是以 .apatch 结尾的文件。
AndFix是阿里巴巴开源项目。
Android上如何使用
1.在自定义Application中初始化,为了更早的修复应用中的bugpackage com.walid.testandfix; import android.app.Application; import android.os.Environment; import android.util.Log; import android.widget.Toast; import com.alipay.euler.andfix.patch.PatchManager; import java.io.File; import java.io.IOException; /** * Author: walid * Date : 2015/10/21 15:27 */ public class MainApplication extends Application { private static final String APATCH_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "apatch" + File.separator + "xiaobai.apatch"; private PatchManager patchManager; @Override public void onCreate() { super.onCreate(); // initialize patchManager = new PatchManager(this); //获取sp内的版本号,如果版本号不同则删除之前所有patch文件 //patchManager.removeAllPatch(); patchManager.init(String.valueOf(BuildConfig.VERSION_CODE)); // load patch patchManager.loadPatch(); try { patchManager.addPatch(APATCH_PATH); Toast.makeText(this, "apatch:" + APATCH_PATH, Toast.LENGTH_LONG).show(); } catch (IOException e) { Toast.makeText(this, String.valueOf(e), Toast.LENGTH_LONG).show(); } } }
2.如果有新的补丁需要修复,下载完成后,进行以下操作
//添加patch,只需指定patch的路径即可,补丁会立即生效 patchManager.addPatch(APATCH_PATH);
3.检测当apk版本升级,需要把之前patch文件的删除,需要以下操作
//删除所有已加载的patch文件 patchManager.removeAllPatch();
4、模拟old.apk中bug事件
package com.walid.testandfix; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toast.makeText(this, "Bug !!!!!", Toast.LENGTH_LONG).show(); } }
5、模拟new.apk中Fix事件
package com.walid.testandfix; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toast.makeText(this, "Fix !!!!!", Toast.LENGTH_LONG).show(); } }
patch文件的生成
使用工具:apkpatch-1.0.3 原理:根据两个apk包,生成一个差异文件,就是所谓的补丁文件即patch文件。命令 : 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 用户别名密码
执行完命令,就会在输出目录中输出.apatch文件:
xiaobai.apatch:就是patch文件,你可以将这个文件按照版本号推送到前端,前端下载完文件之后重启app,就可以实现热更新了。.apatch文件根目录内容:
META_INF文件下内容:
PATCH.MF文件内容:
注:Patch-Classes就是改动过的class.客户端请求服务器接口(api),服务器根据用户传递的数据分析是否有需要修复的bug。
如果有bug需要修复,就下载服务器指定的.apatch文件的链接,下载完后及时加载并修复,使用addpatch(path)方法,补丁会立即生效。
在Android Studio使用
dependencies { compile 'com.alipay.euler:andfix:0.3.1@aar' }
代码混淆(ProGuard)
-keep class * extends java.lang.annotation.Annotation -keepclasseswithmembernames class * { native <methods>; }
至此 : AndFix集成完毕,您的app可以进行热更新了。
相关文章推荐
- 歪谈AndroidManifest
- android获取网页数据的方法
- 你真的了解Instant Run吗?
- 提高Android studio流畅度
- 【前端笔记】android中bitmap和文件的大小
- AndroidStudio Run后不能更新程序
- Android中dp,px,sp等单位转换
- android:transformClassesWithDexForDebug svn更新后报错
- 快速下载 Android framework 源码
- [置顶] Android实现界面内容缓存
- Android Studio 安装教程 入门到精通
- android- 基础总结篇之一:Activity生命周期
- Android 屏幕适配方案(转载)
- Android实现简单截屏并保存为文件
- android百度地图纪要
- Android得到控件在屏幕中的坐标
- Android学习路线
- Android 开发环境安装 新版本Android Studio老版本ADT
- Android系统Intent跳转
- UNDERSTANDING ANDROID GRAPHICS INTERNALS – GRAPHICS BASICS(II)