浅谈 安卓增量更新

本文介绍了安卓应用增量更新的基本概念及实现过程。增量更新通过比较旧版本与新版本的差异来生成补丁包,利用BsDiff开源项目实现。文中详细展示了拆包与合并的具体步骤,包括相关代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

浅谈 安卓增量更新

  1. 增量更新跟热修复是两码事,目前很多app貌似已经看不到增量更新这东西了。说实在的,挺好用,但是bug也不少,拆包简单,并包问题就可能各种各样了。
  2. 增量更新,blog上面很多文章了,其实再写一遍也没多大意义,就留着自己平时巩固下知识好了。

  • 增量更新步骤:
  • 拆分->原理就是根据旧版本apk以及新版本apk,进行算法比较差别,生成一个补丁包(命名随意吧),主要依赖BsDiff开源项目,记得依赖的是Bzip2,常规的拆分需要在服务器上面做操作,所以这里要依赖服务器做拆包,需要保存所有的版本号,进行版本对比拆分,进而生成补丁包。
    拆包过程中,建议参考源码bsdiff.cpp源文件
  • 合并、有了拆包,那么必须要有合并包的操作,这里都是对BsDiff进行开源的使用而已,不过多解释
  • 建议在AS上面进行CMAKE开发。效率感觉比较快,而且现在也知道jni的debug模式了
  • -

拆包与并包的相关代码`
//合并
JNIEXPORT void JNICALL Java_com_dongnaoedu_appupdate_utils_BsPatch_patch
(JNIEnv *env, jclass jcls, jstring oldfile_jstr, jstring newfile_jstr,
jstring patchfile_jstr) {
int argc = 4;
char oldfile = (char ) (*env)->GetStringUTFChars(env, oldfile_jstr, NULL);
char newfile = (char ) (*env)->GetStringUTFChars(env, newfile_jstr, NULL);
char patchfile = (char ) (*env)->GetStringUTFChars(env, patchfile_jstr, NULL);

//参数(第一个参数无效)
char *argv[4];
argv[0] = "bspatch";
argv[1] = oldfile;
argv[2] = newfile;
argv[3] = patchfile;

bspatch_main(argc, argv);//这里主要是算法合并

(*env)->ReleaseStringUTFChars(env, oldfile_jstr, oldfile);
(*env)->ReleaseStringUTFChars(env, newfile_jstr, newfile);
(*env)->ReleaseStringUTFChars(env, patchfile_jstr, patchfile);

}
//拆分
JNIEXPORT jint JNICALL Java_com_dongnaoedu_appupdate_utils_BsPatch_generateDiffApk
(JNIEnv *env, jclass type, jstring oldPath_,
jstring newPath_, jstring patchPath_) {
int argc = 4;
char *argv[argc];
argv[0] = (char *) “bspatch”;
argv[1] = (char *) (*env)->GetStringUTFChars(env, oldPath_, 0);
argv[2] = (char *) (*env)->GetStringUTFChars(env, newPath_, 0);
argv[3] = (char *) (*env)->GetStringUTFChars(env, patchPath_, 0);

jint result = generateDiffApk(argc, argv);//算法拆分

(*env)->ReleaseStringUTFChars(env, oldPath_, argv[1]);
(*env)->ReleaseStringUTFChars(env, newPath_, argv[2]);
(*env)->ReleaseStringUTFChars(env, patchPath_, argv[3]);
return result;

}`

  • 好像没有写什么,因为增量更新本身依赖开源进行二次开发。技术还是多去尝试。才能知道其中一二。才会有所提高吧,讲真,难度在服务端。客户端只是做并包
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值