当前位置: 移动技术网 > 移动技术>移动开发>Android > Android 增量更新

Android 增量更新

2020年07月27日  | 移动技术网移动技术  | 我要评论

@Android 增量更新

简述

因为有Android apk 增量更新的项目,以前对此一窍不通,踩了不少坑,记录下来,希望可以给像我这样的纯“萌新”有点帮助。
首先介绍一下增量更新,在以前更新一个软件需要将一个软件的完整的安装包都下载下来,然后卸载原先的软件,安装新的安装包就可以了,但是这样会浪费大量的流量,下载也比较费时,因此后面出来了增量跟新的概念,简而言之,将新更新的包和原有包的差距找出来,然后只下载这个“差距”,在手机上再将包合成就可以了。

生成差分包

首先是获取apk,这个可以豌豆荚官网上获取到最新的安装包,和较旧的安装包。
生成差分包,可以直接再服务器上直接生成

sudo apk install bsdiff
bsdiff old.apk new.apk update.patch

将差分包导入手机

首先找到adb.exe,这个是我的目录,如果不知道自己的SDK安装在哪,建议安装一个Everything来查找。
在这里插入图片描述
然后添加环境变量
在这里插入图片描述
在这里插入图片描述
然后打开cmd , 输入adb就可以看到是否成功。紧接着使用下面的命令就可以将数据导入手机,这时候可以在Android中找到相应的安装包,先直接在手机上将旧的软件安装。

adb push file /sdcard/

但是在这地方会出现问题, 我从豌豆荚中获取的apk包只能在api30的安卓虚拟机上安装成功,其他的即使是api29都会失败,因此我是使用自己随便写了个app,然后使用Android studio 来生成apk
在这里插入图片描述
在这里插入图片描述

在客户端合成

经过上面的步骤,我们在手机应该已经有了旧的软件以及差分包。
这时候就需要将旧包和差分包合成新包然后安装就可以了。

        val pkm:PackageManager = packageManager
        val appInfo = pkm.getApplicationInfo("com.example.myapplication", 0)
        var oldPath = appInfo.sourceDir

上面代码可以获取到旧的软件的安装包,而那个安装包的名称,可以通过下面的命令获取,一定要保证软件在运行,而不是在后台。

合成包的操作如下所示

1. 在project的build.gradle添加如下代码(如下图)
allprojects {
    repositories {
        maven { url "https://jitpack.io" }
    }
}


2. 在Module的build.gradle添加依赖(如下图)
compile 'com.github.jiyouliang2:SmartUpdateDemo:1.0.1'


3.添加权限
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
4.代码中使用
 PatchUtil.patch(旧版本, 新版本, 差分包);
adb shell dumpsys window w |findstr \/ |findstr name=

这个是用来安装apk, 至于为什么要这样,建议大家看一下这个:
Android7后代码安装apk

doAsync {
            val intent = Intent()
            intent.action = "android.intent.action.VIEW"
            intent.addCategory("android.intent.category.DEFAULT")
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);


            val uri = FileProvider.getUriForFile(this@MainActivity,    "com.example.smartupdate.fileProvider", newpath);
            intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.setDataAndType(uri, "application/vnd.android.package-archive");

            startActivity(intent);

        }

需要注意的点

对于安装的app一定要打开这个软件这个选项,因为不经常使用安卓手机,就这个选项浪费了我一个周六!!!,如果不打开这个选项,每一次都是报错:There is a problem parsing the package
在这里插入图片描述

后续

具体代码,这两天完善下上传GitHub。

本文地址:https://blog.csdn.net/weixin_43699230/article/details/107598552

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网