日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android最新框架,XUpdate 一个轻量级、高可用性的Android版本更新框架

發布時間:2023/12/15 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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版本更新框架的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。