Android热更新AndFix
2017-06-26 12:24
162 查看
Android hot-fix,是alibaba的一个开源Android热修复框架,支持Android 2.版本从2.3到7.0,包括ARM和X86架构,Dalvik和ART运行时,都是32位和64位。github地址
2,在Application里面初始化
3.打补丁包。
官方提供的工具下载后解压
使用命令生成.apatch补丁文件,先cmd进入该目录下
执行以下命令:
命令模板:
apkpatch.bat -f 新apk -t 旧apk -o 输出目录 -k app签名文件 -p 签名文件密码 -a 签名文件别名 -e 别名密码
点.apatch文件就是补丁
原理:
AndFix核心在于在native层做方法主体的替换
流程:
无法添加新类和新的字段
使用加固前的apk制作补丁,但是补丁文件很容易被反编译,也就是修改过的类源码容易泄露。
使用加固平台可能会使热补丁功能失效(我也没试)
addPatch(path)一次补丁后,.apatch文件会copy到getFilesDir目录下的/apatch文件夹中,在下次补丁更新时,会检测补丁是否已经添加在apatch文件夹下,已存在就不会复制加载sdcard的.apatch补丁。
AndFix不支持布局资源等的修改
removeAllPatch()或者修改appversion;
使用方法
1,gradle添加依赖dependencies { compile 'com.alipay.euler:andfix:0.5.0@aar' }
2,在Application里面初始化
private void initAndFix() { String appversion = "1"; patchManager = new PatchManager(context); //每次appversion变更都会导致所有补丁被删除,如果appversion没有改变,则会加载已经保存的所有补丁。 patchManager.init(appversion);//current version patchManager.loadPatch(); try { String path = activity.getExternalFilesDir(null)+"/fix.apatch"; Log.i("热修复补丁path="+path); //添加补丁patch路径即可,补丁会立即生效 patchManager.addPatch(path); } catch (IOException e) { e.printStackTrace(); } }
3.打补丁包。
官方提供的工具下载后解压
使用命令生成.apatch补丁文件,先cmd进入该目录下
执行以下命令:
命令模板:
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 用户别名密码 示例: apkpatch.bat -f newAPK\new.apk -t oldAPK\old.apk -o output -k key_release -p 111111 -a qckissName -e 111111
patchManager.init(appversion);
public void init(String appVersion) { if(!this.mPatchDir.exists() && !this.mPatchDir.mkdirs()) { Log.e("PatchManager", "patch dir create error."); } else if(!this.mPatchDir.isDirectory()) { this.mPatchDir.delete(); } else { SharedPreferences sp = this.mContext.getSharedPreferences("_andfix_", 0); String ver = sp.getString("version", (String)null); if(ver != null && ver.equalsIgnoreCase(appVersion)) { this.initPatchs(); } else { this.cleanPatch(); sp.edit().putString("version", appVersion).commit(); } }
原理:
AndFix核心在于在native层做方法主体的替换
流程:
注意事项:
不支持YunOS国产系统cpu构架无法添加新类和新的字段
使用加固前的apk制作补丁,但是补丁文件很容易被反编译,也就是修改过的类源码容易泄露。
使用加固平台可能会使热补丁功能失效(我也没试)
addPatch(path)一次补丁后,.apatch文件会copy到getFilesDir目录下的/apatch文件夹中,在下次补丁更新时,会检测补丁是否已经添加在apatch文件夹下,已存在就不会复制加载sdcard的.apatch补丁。
AndFix不支持布局资源等的修改
removeAllPatch()或者修改appversion;
public void addPatch(String path) throws IOException { File src = new File(path); File dest = new File(this.mPatchDir, src.getName()); if(!src.exists()) { throw new FileNotFoundException(path); } else if(dest.exists()) {//检测补丁是否已经添加 Log.d("PatchManager", "patch [" + path + "] has be loaded."); } else { FileUtil.copyFile(src, dest); Patch patch = this.addPatch(dest); if(patch != null) { this.loadPatch(patch);//加载补丁 } } }
相关文章推荐
- Android开发,热更新的实现与探讨(AndFix)
- Android热更新之AndFix就是个大坑
- Android热更新之重温Andfix
- Android热更新方案之阿里AndFix 原理以及源码解析
- Android在线热更新hot fix - AndFix试用
- Android热补丁之AndFix原理解析
- JAndFix: 基于Java实现的Android实时热修复方案
- Android AndFix 热修复框架
- Android热修复框架之AndFix
- Android 热修复 AndFix
- Android热补丁技术,ClassLoader、dexposed、Andfix、smart app updates补丁技术收集整理
- Android热修复实践应用--AndFix
- AndFix(Android热升级解决方案)使用心得
- android导入项目,出现Fix Gradle wrapper and re-import project问题以及相关问题的解决
- Android最详细的Alibaba-AndFix 热修复框架的使用
- Android热修复:Andfix和Hotfix,两种方案的比较与实现
- Android热修复实践应用--AndFix
- Android AndFix热更新
- Android 热修复插件之AndFix
- Android在线修复bug框架AndFix调研