文章目录

  • 写在前面
  • 示例
  • 功能介绍
  • 用法
  • 实现
  • 版本更新提示框
  • 下载
  • 安装
  • 短期内更新计划
  • 感谢


写在前面

Github上优秀的版本更新框架很多,推荐大家去阅读去使用,我就从中受益良多。

有这么多优秀的版本更新框架了,我为什么还要造轮子呢?

有这么几方面考虑:

1、这些优秀的版本更新框架,基本都规定了版本更新接口的交互细节,包括提交的参数、返回的数据及其格式等。
这就要求server端的接口要随着app端选用的版本更新框架的不同而调整,这就不大合适了。
2、写这个库的初衷是要用于公司内部的几个app,便于app端统一风格,server端统一接口,还是自己造的轮子更方便定制和改版了。
3、想要尽量精简库的体积,尽量去除无用代码。

github源码地址:https://github.com/ZuoHailong/AppUpdate (文后附的还有链接)

示例

Android12的Passpoint更新 android update_github

Android12的Passpoint更新 android update_github_02

Android12的Passpoint更新 android update_AppUpdate_03

功能介绍

  • 支持指向apk文件的 url 形式的版本更新
  • 支持指向接口、接口返回二进制文件流的 url 形式的版本更新
  • 支持断点下载
  • 采用 Service + AsyncTask 方式下载
  • 提供界面友好的版本更新提示弹窗,可自定义其主题样式
  • 兼容Android 6.0,更新库自动获取写权限,用户拒绝后可再次请求
  • 兼容Android 7.0,支持FileProvider
  • 兼容Android 8.0,应用安装无障碍
  • 实现国际化(支持中文和英文)

用法

具体的 gradle 依赖、API 用法等,github上有详述,请移步:
https://github.com/ZuoHailong/AppUpdate

注意:使用者需自行访问自己项目的版本更新接口,获取版本更新内容、新版本名、新版本下载链接等,然后才能调用此库实现版本更新。此库提供的功能主要是弹框、下载、安装等。

实现

版本更新提示框

AppUpdateManager 是此库的入口,在其中采用 Builder 模式对版本更新进行初始化,并调起版本更新框。支持 “建议更新” 或 “必须更新” 。

此库提供的所有API都集中在 AppUpdateManager.Builder 中。

代码很浅显,这里就不贴了,想要看的访问 Github 好了。

下载

  • 下载采用的方式是 Service + AsyncTask,做了断点下载的支持;
  • 应用的下载支持常见的直接指向文件的以 “.apk” 结尾的url的形式
  • 应用的下载还支持接口直接返回文件流的形式。
    需要注意的是,这种方式,文件大小是必须设置的,是否支持断点下载则是由server端小伙伴决定的,并需要在builder时进行设置:
    builder.updateForce(boolean isForce)
  • 兼容了 Android 6.0,可自动获取 “存储写入” 权限,用户拒绝的话,会在用户下次点击 “立即更新” 时再次申请权限。除非必要,使用者不需要再关心 “存储写入” 的权限问题;
  • AsyncTask中使用了 okHttp 库进行下载,目前用的是 okHttp 的最新版 4.0.0 。后面也许会考虑移除 okHttp 库,使用自己的代码进行下载,以便进一步缩减此库体积。

注:这一块的代码,有受益于郭霖大神的书《第一行代码(第2版)》。

安装

安装的重点是要做 Android 7.0 和 Android 8.0 的兼容,也就是在 7.0 上要处理 FileProvider 的问题,在 8.0 上要处理 “安装未知来源应用” 权限的问题,即:

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission
        android:name="android.permission.INSTALL_PACKAGES"
				tools:ignore="ProtectedPermissions" />

短期内更新计划

  • 建议更新模式下,在更新提示框中显示下载进度,且app不可用的处理方式似乎不大合适,改为 “ 更新提示框消失,在通知栏中显示下载进度,不影响app使用,下载完成后自动调起安装页面 ” 会更加友好一些;
  • okHttp 库的引用移除,用自己的代码实现 apk 的断点下载。

项目源码在 github 上,并提供了 demo 供测试使用:https://github.com/ZuoHailong/AppUpdate