Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

VankaIn/UpdatePlugin

Repository files navigation

可任意定制的app更新组件。

引入方式: 加入jcenter依赖。

allprojects {
 repositories {
 jcenter()
 }
}
  • 在要使用的项目的build.gradle中。添加依赖:
dependencies {
 ...
 compile 'org.lzh.nonview.updateplugin:UpdatePlugin:0.5'
}

使用方式:

  • 首先。在使用前对其进行配置
// 建议在Application中进行配置。
// UpdateConfig为全局配置。当在其他页面中。使用UpdateBuilder进行检查更新时。
// 对于没传的参数,会默认使用UpdateConfig中的全局配置
UpdateConfig.getConfig()
 // url 与 checkEntity方法可任选一种填写,且至少必填一种。
 // 数据更新接口数据,此时默认为使用GET请求
 .url(url)
 // 同url方法。CheckEntity方法可填写url,params,method。可在此设置为post请求
 .checkEntity(checkEntity)
 // 必填:用于从数据更新接口获取的数据response中。解析出Update实例。以便框架内部处理
 .jsonParser(new UpdateParser() {
 @Override
 public Update parse(String response) {
 // 此处根据上面url接口返回的数据response进行update类组装。框架内部会使用此
 // 组装的update实例判断是否需要更新以做进一步工作
 return update;
 }
 })
  • 在要进行检查更新的地方,使用UpdateBuilder类进行检查
UpdateBuilder.create().check(MainActivity.this);

OK。最简单的用法就这么点。当然。既然是可任意配置,那么下面来说说怎么根据自己的需要来配置出属于自己的更新组件

配置分为全局配置与局部配置:

  • 全局配置在UpdateConfig类中。如上面的url,jsonParser就是全局配置的其中两个。
  • 局部配置在UpdateBuilder类中。UpdateBuilder类中集成了UpdateConfig类中的全部配置。当使用UpdateBuilder进行check更新的时候。当没对此builder进行对应的配置设置的时候。会自动使用UpdateConfig中的配置

下面来看看除了以上所说的url与jsonParser外都支持哪些配置。

ps:以下配置均为不必要配置。若不配置则使用框架内部默认配置

  • 配置检查更新时的回调。
checkCB(new UpdateCheckCB() {
 @Override
 public void hasUpdate(Update update) {
 // 有新版本APK更新的回调
 }
 @Override
 public void noUpdate() {
 // 没有新版本的回调
 }
 @Override
 public void onCheckError(int i, String s) {
 // 检查错误的回调
 }
 
 @Override 
 public void onUserCancel() {
 // 用于取消更新时的回调
 }
})
  • 新版本APK下载时的回调
downloadCB(new UpdateDownloadCB() {
 @Override
 public void onUpdateStart() {
 // 下载开始 
 }
 
 @Override
 public void onUpdateComplete(File file) {
 // 下载完成 
 }
 
 @Override
 public void onUpdateProgress(long current, long total) {
 // 下载进度 
 }
 
 @Override
 public void onUpdateError(int code, String errorMsg) {
 // 下载apk错误 
 }
})
checkWorker(new UpdateWorker() {
 @Override
 protected String check(String url) throws Exception {
 // 此处运行于子线程。在此进行更新接口访问 
 return null;
 }
})
  • 自定义版本检查
.updateChecker(new UpdateChecker() {
 @Override
 public boolean check(Update update) {
 // 对于部分应用。是应用内定义字段来做版本对比检测的。可以定制UpdateCheker,
 // 并在此对应用版本进行比对检测。返回true说明该update版本需要被更新。false不需要更新
 return false;
 }
 })
downloadWorker(new DownloadWorker() {
 @Override
 protected void download(String url, File file) throws Exception {
 // TODO: 2016年5月11日 此处运行于子线程,在此进行文件下载任务。
 // 对于自定义的下载任务。在下载期间需要调用此类的sendUpdateProgress进行下载进度传递
 }
})
.fileCreator(new ApkFileCreator() {
 @Override
 public File create(String versionName) {
 // versionName 为解析的Update实例中的update_url数据。在这里可自定义下载文件缓存路径及文件名。放置于File中
 return null;
 }
})
strategy(new UpdateStrategy() {
 @Override
 public boolean isShowUpdateDialog(Update update) {
 // 是否在检查到有新版本更新时展示Dialog。
 return false;
 }
 @Override
 public boolean isAutoInstall() {
 // 下载完成后,是否自动更新。若为false。则创建Dialog显示
 return false;
 }
 @Override
 public boolean isShowDownloadDialog() {
 // 在APK下载时。是否显示下载进度的Dialog
 return false;
 }
})
updateDialogCreator(new DialogCreator() {
 @Override
 public Dialog create(Update update, Activity activity, UpdateBuilder updateBuilder) {
 // 此处为检查出有新版本需要更新时的回调。运行于主线程,在此进行更新Dialog的创建 
 // 对于用户自定义的Dialog。用户可自行在此更新update中的数据对Dialog进行展示。
 // 在用户需要立即更新时。调用此类中的sendDownloadRequest(update,activity);
 // 在用户需要取消更新时。调用此类中的sendUserCancel();
 return dialog;
 }
})
.downloadDialogCreator(new DownloadCreator() {
 @Override
 public UpdateDownloadCB create(Update update, Activity activity) {
 // 此处为正在下载APK时的回调。运行于主线程。在此进行Dialog自定义与显示操作。
 // 需要在此创建并返回一个UpdateDownloadCB回调。用于对Dialog进行更新。
 return cb;
 }
})
installDialogCreator(new InstallCreator() {
 @Override
 public Dialog create(Update update, String s, Activity activity) {
 // 此处为下载APK完成后的回调。运行于主线程。在此创建Dialog
 // 在用户需要立即更新时。调用此类中的sentToInstall();
 // 在用户需要取消更新时。调用此类中的sendUserCancel();
 return dialog;
 }
})

最后举个例子来对更新策略做个说明:

public class MyApplication extends Application {
 private String apkFile = "http://apk.hiapk.com/web/api.do?qt=8051&id=721";
 @Override
 public void onCreate() {
 super.onCreate();
 // Application中对Config进行配置
 UpdateConfig.getConfig()
 .url("http://www.baidu.com")// 随便模拟的一个网络接口。
 .jsonParser(new UpdateParser() {
 @Override
 public Update parse(String response) {
 // 此处模拟一个Update对象,传入接口返回的原始数据进去保存。
 // 若用户需要自定义的时候。对于有额外参数。可从中获取并定制。
 Update update = new Update(response);
 // 此apk包的更新时间
 update.setUpdateTime(System.currentTimeMillis());
 // 此apk包的下载地址
 update.setUpdateUrl(apkFile);
 // 此apk包的版本号
 update.setVersionCode(2);
 // 此apk包的版本名称
 update.setVersionName("2.0");
 // 此apk包的更新内容
 update.setUpdateContent("测试更新");
 // 此apk包是否为强制更新
 update.setForced(true);
 // 是否忽略此次版本更新
 update.setIgnore(false);
 return update;
 }
 })
 // 此参数可不配置。配置在此作为全局的更新接口回调通知
 .checkCB(new EmptyCheckCB() {
 @Override
 public void onCheckError(int code, String errorMsg) {
 Toast.makeText(MyApplication.this, "更新失败:code:" + code + ",errorMsg:" + errorMsg, Toast.LENGTH_SHORT).show();
 }
 @Override
 public void onUserCancel() {
 Toast.makeText(MyApplication.this, "用户取消更新", Toast.LENGTH_SHORT).show();
 }
 @Override
 public void noUpdate() {
 Toast.makeText(MyApplication.this, "无更新", Toast.LENGTH_SHORT).show();
 }
 })
 }
}

接下来在需要进行更新的Activity中进行更新检查

UpdateBuilder.create().check(MainActivity.this);

此处使用默认的更新策略:WIFI下自动更新。流量环境下提示再下载提示更新:

default_strategy

再使用自定义策略:

UpdateBuilder.create()
 .strategy(new UpdateStrategy() {
 @Override
 public boolean isShowUpdateDialog(Update update) {
 // 有新更新直接展示
 return true;
 }
 @Override
 public boolean isAutoInstall() {
 return false;
 }
 @Override
 public boolean isShowDownloadDialog() {
 // 展示下载进度
 return true;
 }
 })
 .check(MainActivity.this);

default_all_dialog_show.gif

再来一个。直接下载完成后。自动弹出安装页面

UpdateBuilder.create()
 .strategy(new UpdateStrategy() {
 @Override
 public boolean isShowUpdateDialog(Update update) {
 return false;
 }
 @Override
 public boolean isAutoInstall() {
 return true;
 }
 @Override
 public boolean isShowDownloadDialog() {
 return false;
 }
 })
 .check(MainActivity.this);

default_auto_install.gif

Update:

  • 0.5 对检查更新接口添加post请求

  • 0.4

修复部分bug。
修复内存泄漏问题。
添加自定义版本检测接口
增加了框架的健壮性。对同时调用多次更新请求做出限制。避免因此引起的崩溃
  • 0.3
对默认的下载任务添加断点下载

###新创建一个QQ群以做交流.欢迎各位加入交流分享:108895031

About

可任意定制的app更新组件。

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 100.0%

AltStyle によって変換されたページ (->オリジナル) /