您的位置:首页 > 移动开发 > Android开发

Android 热更新(阿里andfix)

2018-07-25 16:39 218 查看

主要有三种途径

一、QQ空间超级补丁技术(优先加载补丁内的class文件)

超级补丁技术基于DEX分包方案,使用了多DEX加载的原理,大致的过程就是:把BUG方法修复以后,放到一个单独的DEX里,插入到dexElements数组的最前面,让虚拟机去加载修复完后的方法。

目前,没有试用过,以后再说。

二、阿里andFix

优点:bug修复即时性。

补丁包采用差量技术,生成的PATCH体积小。

对应用无侵入,几乎无性能损耗。

缺点:不支持新增字段,以及修改<init>方法,也不支持对资源的替换。

由于厂商的自定义ROM,对少数机型暂不支持。(我的三星j3300就不支持)

首先 添加依赖

[code]compile 'com.alipay.euler:andfix:0.3.1@aar'

(1)minifest.xml权限

[code]<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

(2)application里加载补丁

[code]private static final String TAG = "euler";

private static final String APATCH_PATH = "/out.apatch";

static String DIR="apatch";
/**
* patch manager
*/
private PatchManager mPatchManager;

@Override
public void onCreate() {
super.onCreate();
// initialize
mPatchManager = new PatchManager(this);
String appversion=getPackageManager().getPackageInfo(getPackageName(),0).versionName;
mPatchManager.init(appversion);
mPatchManager.loadPatch();

try {
String patchFileString = Environment.getExternalStorageDirectory().getAbsolutePath() + APATCH_PATH;
File result = new File(patchFileString);
if(result.exists()){
mPatchManager.addPatch(patchFileString);
File f = new File(this.getFilesDir(),DIR + APATCH_PATH);
if (f.exists()) {
new File(patchFileString).delete();
                }
}
} catch (IOException e) {
Log.e(TAG,"addPatch-->"+e.getMessage());
}
}

(3)生成补丁文件,下载apkpatch-1.0.3,将密钥和修改bug前后的两个包(new-app,old-app)放进去,cmd-进入文件夹路径,输入以下命令,生成output文件夹,打开找到.apatch文件,重命名成out.apatch,发送到手机上,先杀死进程,重新打开就好了。

[code]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.

 

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: