-
2019-11-08 15:43:40
XUpdate
项目地址:xuexiangjys/XUpdate
简介: 🚀一个轻量级、高可用性的 Android 版本更新框架
标签:
一个轻量级、高可用性的 Android 版本更新框架。赶紧点击使用说明文档,体验一下吧!
在提 issue 前,请先阅读【提问的智慧】,并严格按照issue 模板进行填写,节约大家的时间。
在使用前,请一定要仔细阅读使用说明文档,重要的事情说三遍!!!
在使用前,请一定要仔细阅读使用说明文档,重要的事情说三遍!!!
在使用前,请一定要仔细阅读使用说明文档,重要的事情说三遍!!!
关于我
X 系列库快速集成
为了方便大家快速集成 X 系列框架库,我提供了一个空壳模版供大家参考使用: https://github.com/xuexiangjys/TemplateAppProject
特征
-
支持 post 和 get 两种版本检查方式,支持自定义网络请求。
-
支持设置只在 wifi 下进行版本更新。
-
支持静默下载(后台更新)、自动版本更新。
-
提供界面友好的版本更新提示弹窗,可自定义其主题样式。
-
支持自定义版本更新检查器、版本更新解析器、版本更新提示器、版本更新下载器、版本更新安装、出错处理。
-
支持 MD5 文件校验、版本忽略、版本强制更新等功能。
-
支持自定义文件校验方法【默认是 MD5 校验】。
-
支持自定义请求 API 接口。
-
兼容 Android6.0、7.0、8.0 和 9.0。
-
支持中文和英文两种语言显示(国际化)
组成结构
本框架借鉴了AppUpdate中的部分思想和 UI 界面,将版本更新中的各部分环节抽离出来,形成了如下几个部分:
-
版本更新检查器
IUpdateChecker
:检查是否有最新版本。 -
版本更新解析器
IUpdateParser
:解析服务端返回的数据结果。 -
版本更新提示器
IUpdatePrompter
:展示最新的版本信息。 -
版本更新下载器
IUpdateDownloader
:下载最新的版本 APK 安装包。 -
网络请求服务接口
IUpdateHttpService
:定义了进行网络请求的相关接口。
除此之外,还有两个监听器:
-
版本更新失败的监听器
OnUpdateFailureListener
。 -
版本更新 apk 安装的监听器
OnInstallListener
。
更新调度核心:
- 版本更新业务代理
IUpdateProxy
:负责版本更新的流程控制,调用 update 开始进行版本更新流程。
更新流程
调用 update 之后的流程:
IUpdateProxy/XUpdate --- (update) ---> IUpdateChecker --->(请求服务器,获取最新版本信息)---> IUpdateParser ---> (解析服务器返回的数据,并构建 UpdateEntity 版本更新实体)---> IUpdateProxy ---> (如无最新版本,直接结束,否则进行下面流程) ---自动模式---> IUpdateDownloader ---> (下载最新的应用 apk) ---> 安装应用 ---非自动模式---> IUpdatePrompter ---> 给出版本更新的提示 ---> 用户点击更新 ---> IUpdateDownloader ---> (下载最新的应用 apk) ---> 跳转到应用安装界面 ---> 用户点击(取消或忽略) ---> 结束
1、演示(请 star 支持)
- 默认版本更新
- 强制版本更新
- 自定义提示弹窗主题
- 使用系统弹窗提示
Demo 更新后台服务
由于 github 最近访问比较慢,如果需要更好地体验 XUpdate,你可以点击自己搭建一个简易的版本更新服务。
Demo 下载
2、快速集成指南
目前支持主流开发工具 AndroidStudio 的使用,直接配置 build.gradle,增加依赖即可.
2.1、Android Studio 导入方法,添加 Gradle 依赖
1.先在项目根目录的 build.gradle 的 repositories 添加:
allprojects { repositories { ... maven { url "https://jitpack.io" } } }
2.然后在 dependencies 添加:
dependencies { ... implementation 'com.github.xuexiangjys:XUpdate:1.1.1' }
2.2、初始化 XUpdate
在 Application 进行初始化配置:
XUpdate.get() .debug(true) .isWifiOnly(true) //默认设置只在 wifi 下检查版本更新 .isGet(true) //默认设置使用 get 请求检查版本 .isAutoMode(false) //默认设置非自动模式,可根据具体使用配置 .param("versionCode", UpdateUtils.getVersionCode(this)) //设置默认公共请求参数 .param("appKey", getPackageName()) .setOnUpdateFailureListener(new OnUpdateFailureListener() { //设置版本更新出错的监听 @Override public void onFailure(UpdateError error) { if (error.getCode() != CHECK_NO_NEW_VERSION) { //对不同错误进行处理 ToastUtils.toast(error.toString()); } } }) .supportSilentInstall(true) //设置是否支持静默安装,默认是 true .setIUpdateHttpService(new OKHttpUpdateHttpService()) //这个必须设置!实现网络请求功能。 .init(this); //这个必须初始化
【注意】:如果出现任何问题,可开启 debug 模式来追踪问题。如果你还需要将日志记录在磁盘上,可实现以下接口
XUpdate.get().setILogger(new ILogger() { @Override public void log(int priority, String tag, String message, Throwable t) { //实现日志记录功能 } });
2.3、版本更新实体信息
(1) UpdateEntity 字段属性
字段名 类型 默认值 备注 mHasUpdate boolean false 是否有新版本 mIsForce boolean false 是否强制安装:不安装无法使用 app mIsIgnorable boolean false 是否可忽略该版本 mVersionCode int 0 最新版本 code mVersionName String unknown_version 最新版本名称 mUpdateContent String "" 更新内容 mDownloadEntity DownloadEntity / 下载信息实体 mIsSilent boolean false 是否静默下载:有新版本时不提示直接下载 mIsAutoInstall boolean true 是否下载完成后自动安装 (2) DownloadEntity 字段属性
字段名 类型 默认值 备注 mDownloadUrl String "" 下载地址 mCacheDir String "" 文件下载的目录 mMd5 String "" 下载文件的加密校验值(默认使用 md5 加密),用于校验,防止下载的 apk 文件被替换(最新演示 demo 中有计算校验值的工具) mSize long 0 下载文件的大小【单位:KB】 mIsShowNotification boolean false 是否在通知栏上显示下载进度 2.4、文件加密校验方式
本框架默认使用的文件加密校验方法是 MD5 加密方式,当然如果你不想使用 MD5 加密,你也可以自定义文件加密器
IFileEncryptor
,以下是 MD5 文件加密器的实现供参考:/** * 默认的文件加密计算使用的是 MD5 加密 * * @author xuexiang * @since 2019-09-06 14:21 */ public class DefaultFileEncryptor implements IFileEncryptor { /** * 加密文件 * * @param file * @return */ @Override public String encryptFile(File file) { return Md5Utils.getFileMD5(file); } /** * 检验文件是否有效(加密是否一致) * * @param encrypt 加密值, 如果 encrypt 为空,直接认为是有效的 * @param file 需要校验的文件 * @return 文件是否有效 */ @Override public boolean isFileValid(String encrypt, File file) { return TextUtils.isEmpty(encrypt) || encrypt.equalsIgnoreCase(encryptFile(file)); } }
最后再调用
XUpdate.get().setIFileEncryptor
方法设置即可生效。
3、版本更新
3.1、默认版本更新
直接调用如下代码即可完成版本更新操作:
XUpdate.newBuild(getActivity()) .updateUrl(mUpdateUrl) .update();
需要注意的是,使用默认版本更新,请求服务器返回的 json 格式应包括如下内容:
{ "Code": 0, //0 代表请求成功,非 0 代表失败 "Msg": "", //请求出错的信息 "UpdateStatus": 1, //0 代表不更新,1 代表有版本更新,不需要强制升级,2 代表有版本更新,需要强制升级 "VersionCode": 3, "VersionName": "1.0.2", "ModifyContent": "1、优化 api 接口。\r\n2、添加使用 demo 演示。\r\n3、新增自定义更新服务 API 接口。\r\n4、优化更新提示界面。", "DownloadUrl": "https://raw.githubusercontent.com/xuexiangjys/XUpdate/master/apk/xupdate_demo_1.0.2.apk", "ApkSize": 2048 "ApkMd5": "..." //md5 值没有的话,就无法保证 apk 是否完整,每次都会重新下载。框架默认使用的是 md5 加密。 }
3.2、自动版本更新
自动版本更新:自动检查版本 + 自动下载 apk + 自动安装 apk(静默安装)。 只需要设置
isAutoMode(true)
,不过如果设备没有 root 权限的话,是无法做到完全的自动更新(因为静默安装需要 root 权限)。XUpdate.newBuild(getActivity()) .updateUrl(mUpdateUrl) .isAutoMode(true) //如果需要完全无人干预,自动更新,需要 root 权限【静默安装需要】 .update();
3.3、强制版本更新
就是用户不更新的话,程序将无法正常使用。只需要服务端返回
UpdateStatus
字段为 2 即可。当然如果你自定义请求返回 api 的话,只需要设置
UpdateEntity
的mIsForce
字段为 true 即可。3.4、自定义版本更新提示弹窗的主题
可设置弹窗的标题背景和按钮颜色。
- themeColor: 设置主题颜色(升级/安装按钮的背景色)
- topResId: 弹窗的标题背景的资源图片
XUpdate.newBuild(getActivity()) .updateUrl(mUpdateUrl) .themeColor(ResUtils.getColor(R.color.update_theme_color)) .topResId(R.mipmap.bg_update_top) .update();
3.5、自定义版本更新解析器
实现 IUpdateParser 接口即可实现解析器的自定义。
XUpdate.newBuild(getActivity()) .updateUrl(mUpdateUrl3) .updateParser(new CustomUpdateParser()) //设置自定义的版本更新解析器 .update(); public class CustomUpdateParser implements IUpdateParser { @Override public UpdateEntity parseJson(String json) throws Exception { CustomResult result = JsonUtil.fromJson(json, CustomResult.class); if (result != null) { return new UpdateEntity() .setHasUpdate(result.hasUpdate) .setIsIgnorable(result.isIgnorable) .setVersionCode(result.versionCode) .setVersionName(result.versionName) .setUpdateContent(result.updateLog) .setDownloadUrl(result.apkUrl) .setSize(result.apkSize); } return null; } }
3.6、自定义版本更新检查器+版本更新解析器+版本更新提示器
-
实现
IUpdateChecker
接口即可实现检查器的自定义。 -
实现
IUpdateParser
接口即可实现解析器的自定义。 -
实现
IUpdatePrompter
接口即可实现提示器的自定义。
XUpdate.newBuild(getActivity()) .updateUrl(mUpdateUrl3) .updateChecker(new DefaultUpdateChecker() { @Override public void onBeforeCheck() { super.onBeforeCheck(); CProgressDialogUtils.showProgressDialog(getActivity(), "查询中..."); } @Override public void onAfterCheck() { super.onAfterCheck(); CProgressDialogUtils.cancelProgressDialog(getActivity()); } }) .updateParser(new CustomUpdateParser()) .updatePrompter(new CustomUpdatePrompter(getActivity())) .update(); public class CustomUpdatePrompter implements IUpdatePrompter { private Context mContext; public CustomUpdatePrompter(Context context) { mContext = context; } @Override public void showPrompt(@NonNull UpdateEntity updateEntity, @NonNull IUpdateProxy updateProxy, @NonNull PromptEntity promptEntity) { showUpdatePrompt(updateEntity, updateProxy); } /** * 显示自定义提示 * * @param updateEntity * @param updateProxy */ private void showUpdatePrompt(final @NonNull UpdateEntity updateEntity, final @NonNull IUpdateProxy updateProxy) { String updateInfo = UpdateUtils.getDisplayUpdateInfo(mContext, updateEntity); new AlertDialog.Builder(mContext) .setTitle(String.format("是否升级到%s 版本?", updateEntity.getVersionName())) .setMessage(updateInfo) .setPositiveButton("升级", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { updateProxy.startDownload(updateEntity, new OnFileDownloadListener() { @Override public void onStart() { HProgressDialogUtils.showHorizontalProgressDialog(mContext, "下载进度", false); } @Override public void onProgress(float progress, long total) { HProgressDialogUtils.setProgress(Math.round(progress * 100)); } @Override public boolean onCompleted(File file) { HProgressDialogUtils.cancel(); return true; } @Override public void onError(Throwable throwable) { HProgressDialogUtils.cancel(); } }); } }) .setNegativeButton("暂不升级", null) .setCancelable(false) .create() .show(); }
3.7、只使用 XUpdate 的下载器功能进行 apk 的下载
XUpdate.newBuild(getActivity()) .apkCacheDir(PathUtils.getExtDownloadsPath()) //设置下载缓存的根目录 .build() .download(mDownloadUrl, new OnFileDownloadListener() { //设置下载的地址和下载的监听 @Override public void onStart() { HProgressDialogUtils.showHorizontalProgressDialog(getContext(), "下载进度", false); } @Override public void onProgress(float progress, long total) { HProgressDialogUtils.setProgress(Math.round(progress * 100)); } @Override public boolean onCompleted(File file) { HProgressDialogUtils.cancel(); ToastUtils.toast("apk 下载完毕,文件路径:" + file.getPath()); return false; } @Override public void onError(Throwable throwable) { HProgressDialogUtils.cancel(); } });
3.8、只使用 XUpdate 的 APK 安装的功能
_XUpdate.startInstallApk(getContext(), FileUtils.getFileByPath(PathUtils.getFilePathByUri(getContext(), data.getData()))); //填写文件所在的路径
如果你的 apk 安装与众不同,你可以实现自己的 apk 安装器。你只需要实现 OnInstallListener 接口,并通过
XUpdate.setOnInstallListener
进行设置即可生效。混淆配置
-keep class com.xuexiang.xupdate.entity.** { *; }
更多相关内容 -
-
安卓(10)框架_框架.apk
2020-05-29 16:03:52安卓(10)框架_框架.apk -
Cocos3.10框架项目升级安卓编译版本至Android29
2021-01-21 19:40:43项目是网狐旗舰版架构,默认安卓编译版本是Android-19, 如果运行在Android9.0及以上的设备就会提示“此应用专为旧版本打造的提示”,所以需要将工程里面的AndroidManifest.xml文件中编译目标版本升级。为了之后方便... -
EasySocket-master安卓android聊天快速开发框架官方最新github版本
2021-06-28 15:44:13EasySocket-master安卓android聊天快速开发框架官方最新github版本 -
百度大牛深度剖析Android10大框架
2018-12-14 09:13:38百度大牛深度剖析Android10大框架 -
android10大开源框架.txt
2020-01-03 14:31:25android开源10大框架讲解视频 glide okhttp retrofit -
VersionUpdate:Android版本自动升级框架
2021-06-18 07:54:07android版本自动升级框架 先看效果 使用 package com.ydl.versionupdate ; import android.app.Activity ; import android.content.Context ; import android.os.Bundle ; import android.view.Menu ; import ... -
Android 常见的图片加载框架详细介绍
2021-01-20 10:37:29Android 常见的图片加载框架 图片加载涉及到图片的缓存、图片的处理、图片的显示等。而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题。很多软件厂家的通用... -
Android快速搭建MVVM框架
2021-01-03 18:13:33上面是从一个开源项目中了解到的框架结构,以最简洁的方式搭建一个app的基础框架。 框架的几个特点是: 通过Jetpack的Navigation构建单Activity多Fragment结构,我们知道Activity是属于比较重的组件,而Fragment是... -
启示:适用于Android的轻量级MVVM框架。一个轻量级的安卓MVVM框架
2021-02-04 21:00:32开源地址: : 优势 ...提示:这两个依赖库在Android Studio新建的项目里几乎都包含,也就是几乎0依赖。 引入成本低 侵入性低:不需要修改任何现有代码 无缝嵌入:可间接当做查看使用,无论之前使用MV -
夜神模拟器5.1.1安卓模拟器Xposed框架
2021-01-03 23:06:484.42安卓模拟器Xposed框架链接: https://pan.baidu.com/s/1depSSHCy0KYcFZzkPH7aZQ 密码: vmyr 5.11安卓模拟器Xposed框架链接:() https://pan.baidu.com/s/1erZD4gMk1MQdVklnrmSuLg 密码: s4j4 夜神模拟器默认... -
Android注解框架对比分析
2020-08-31 12:24:51主要为大家详细对比分析了Android注解框架,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
六款值得推荐的android(安卓)开源框架简介
2020-09-04 10:28:34同事整理的android(安卓)开源框架,个个都堪称经典。32 个赞! -
MIUI10谷歌框架的安装包.zip
2019-06-18 21:09:20MIUI10谷歌框架的安装包,压缩包包含四个apk安装包,顺序安装就可以正常使用。 -
Android视频编辑框架
2018-04-07 14:50:24该文件主要利用封装的ffmepg框架来处理Android视频的个性操作,可以为视频添加背景因为、添加logo、文字,也还可以将视频的背景音频分离出来,可以将视频与图片合并,对时间进行剪切的视频编辑操作。 -
【安卓/android】Xposed框架2.4-3.0全部版本
2021-04-15 01:07:25【安卓/android】Xposed框架2.4-3.0全部版本 -
AndroidDEMO:android快速开发框架 基础版本
2021-06-03 17:47:09android快速开发框架 基础版本 项目地址: 主要有以下模块: (1) 自动注入框架(只需要继承框架内的application既可) (2) 图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性) (3) 网络请求模块(继承了... -
安卓图片选择框架
2018-03-17 00:09:59安卓最火的图片选择框架,使用方便快捷,支持图片单选、多选等参数,引入简单 -
android应用下载安装apk升级版本实现demo适配Android10
2020-04-30 15:36:44这个demo实现了android开发应用内下载安装apk升级版本的功能,非常简便轻量集成,完全原生代码即可实现,无需第三方框架。。。 -
Android代码-快速开发安卓框架
2019-08-06 00:18:51一个快速开发的安卓(Android)开发框架.本质思想是快速的开发出易维护,易懂的高效率运行的App框架. 目前市面上有不少的开发框架,这些开发框架大大加速了Android的开发速度,让人们大呼过瘾。其实,一款好的框架就该... -
Android mvvm 框架,最流行的mvvm demo
2021-09-23 14:36:07Android mvvm 框架,最流行的mvvm demo 无bug -
25个实用酷炫的Android开源UI框架
2020-08-27 18:09:01本文为大家分享了25个实用酷炫的Android开源UI框架,灵活运用这些UI框架可在日常工作中节省不少时间 -
Android 一款安卓弹框封装框架
2018-11-30 14:45:17一款安卓弹框框架的封装,适配各种格式和数据 -
安卓开发框架工具类相关-Android快速开发系列10个常用工具类.rar
2019-07-29 16:19:04Android快速开发系列 10个常用工具类.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。 -
Android MVVM 开发框架
2017-04-28 15:55:20Android MVVM 开发框架 具体详见 http://blog.csdn.net/q610098308/article/details/70903010 -
Android框架解密
2018-04-29 16:38:02废话不多说,想了解Andriod框架的,请下载这本书,让你能更多的了解|Andriod。 -
Android自动升级框架
2014-07-21 10:18:37Android自动升级框架,这是我自己写的,直接把jar包添加进工程即可使用,超简单,超实用! -
Android 动态权限 申请 检测处理框架
2019-07-30 18:35:32只需一个方法,便可以实现权限的授权,不同版本的兼容,以及回调的正确处理了。 对原有项目尽可能小的改动,方便已有项目的接入。使用方法示例如下: /*需要动态请求相机权限*/ GPermisson.with(mContext).... -
安卓10 google安装包
2020-03-23 02:43:30安卓10谷歌服务安装包