android最新框架,XUpdate 一个轻量级、高可用性的Android版本更新框架
XUpdate
一個輕量級、高可用性的Android版本更新框架。趕緊點擊使用說明文檔,體驗一下吧!
特點
支持post和get兩種版本檢查方式,支持自定義網絡請求。
支持設置只在wifi下進行版本更新。
支持靜默下載、自動版本更新。
提供界面友好的版本更新提示彈窗,可自定義其主題樣式。
支持自定義版本更新檢查器、版本更新解析器、版本更新提示器、版本更新下載器、版本更新安裝、出錯處理。
支持MD5文件校驗、版本忽略、版本強制更新等功能。
支持自定義請求API接口。
組成結構
本框架借鑒了AppUpdate中的部分思想和UI界面,將版本更新中的各部分環節抽離出來,形成了如下幾個部分:
版本更新檢查器IUpdateChecker:檢查是否有最新版本。
版本更新解析器IUpdateParser:解析服務端返回的數據結果。
版本更新提示器IUpdatePrompter:展示最新的版本信息。
版本更新下載器IUpdateDownloader:下載最新的版本APK安裝包。
網絡請求服務接口IUpdateHttpService:定義了進行網絡請求的相關接口。
除此之外,還有兩個監聽器:
版本更新失敗的監聽器OnUpdateFailureListener。
版本更新apk安裝的監聽器OnInstallListener。
1、演示(請star支持)
默認版本更新
update_1.png
強制版本更新
update_2.png
自定義提示彈窗主題
update_3.png
使用系統彈窗提示
update_4.png
Demo下載
download.png
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.0.0'
}
2.2、初始化XUpdate
在Application進行初始化配置:
XUpdate.get()
.isWifiOnly(true) //默認設置只在wifi下檢查版本更新
.isGet(true) //默認設置使用get請求檢查版本
.isAutoMode(false) //默認設置非自動模式,可根據具體使用配置
.param("VersionCode", UpdateUtils.getVersionCode(this)) //設置默認公共請求參數
.param("AppKey", getPackageName())
// .debug(true)
.setOnUpdateFailureListener(new OnUpdateFailureListener() { //設置版本更新出錯的監聽
@Override
public void onFailure(UpdateError error) {
ToastUtils.toast(error.toString());
}
})
.setIUpdateHttpService(new OKHttpUpdateHttpService()) //這個必須設置!實現網絡請求功能。
.init(this); //這個必須初始化
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文件被替換
mSize
long
0
下載文件的大小【單位:KB】
mIsShowNotification
boolean
false
是否在通知欄上顯示下載進度
3、版本更新
3.1、默認版本更新
直接調用如下代碼即可完成版本更新操作:
XUpdate.newBuild(getActivity())
.updateUrl(mUpdateUrl)
.update();
需要注意的是,使用默認版本更新,請求服務器返回的json格式應包括如下內容:
{
"Code": 0,
"Msg": "",
"UpdateStatus": 1,
"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是否完整,每次都會重新下載。
}
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) {
showUpdatePrompt(updateEntity, updateProxy);
}
/**
* 顯示自定義提示
*
* @param updateEntity
* @param updateProxy
*/
private void showUpdatePrompt(final @NonNull UpdateEntity updateEntity, final @NonNull IUpdateProxy updateProxy) {
String updateInfo = UpdateUtils.getDisplayUpdateInfo(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.** { *; }
特別感謝
總結
以上是生活随笔為你收集整理的android最新框架,XUpdate 一个轻量级、高可用性的Android版本更新框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c 11 主要的新语言特性,关于c ++
- 下一篇: android 自定义菜单开发,Andr