因为有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
如对本文有疑问, 点击进行留言回复!!
android -- ndk (stack corruption detected)
Android Span富文本图文混排 - ImageSpan(图文垂直居中)
Element DateTimePicker日期时间选择器的使用示例
【Appium踩坑】小米手机,启动报错:exited with code 255 writing to settings requires:android.permission.WRITE_SECUR
android 拍照 预览图与 照片分辨率(可视区域)不一致
[PAT顶级]1025 Keep at Most 100 Characters (35分)
网友评论