一個(gè)簡(jiǎn)單好用的版本更新庫(kù)

描述

效果圖

1.jpg

2.jpg

3.jpg

4.jpg

5.jpg

6.jpg

功能介紹

  • 支持AndroidX
  • 支持后臺(tái)下載
  • 支持強(qiáng)制更新
  • 支持自定義下載過(guò)程
  • 支持 設(shè)備 >= Android M 動(dòng)態(tài)權(quán)限的申請(qǐng)
  • 支持通知欄進(jìn)度條展示(或者自定義顯示進(jìn)度)
  • 支持Android N
  • 支持Android O
  • 支持Android P
  • 支持Android Q
  • 支持中/英文雙語(yǔ)(國(guó)際化)
  • 支持自定義內(nèi)置對(duì)話框樣式
  • 支持取消下載(如果發(fā)送了通知欄消息,則會(huì)移除)
  • 支持下載完成 打開新版本后刪除舊安裝包文件
  • 使用HttpURLConnection下載,未集成其他第三方框架

Demo下載體驗(yàn)

點(diǎn)擊下載Demo進(jìn)行體驗(yàn)

DownloadManager:配置文檔

初始化使用DownloadManager.getInstance(this)

屬性 描述 默認(rèn)值 是否必須設(shè)置
context 上下文 null true
apkUrl apk的下載地址 null true
apkName apk下載好的名字 null true
downloadPath apk下載的位置 (2.7.0以上版本已過(guò)時(shí)) getExternalCacheDir() false
showNewerToast 是否提示用戶 "當(dāng)前已是最新版本" false false
smallIcon 通知欄的圖標(biāo)(資源id) -1 true
configuration 這個(gè)庫(kù)的額外配置 null false
apkVersionCode 更新apk的versionCode (如果設(shè)置了那么庫(kù)中將會(huì)進(jìn)行版本判斷下面的屬性也就需要設(shè)置了) Integer.MIN_VALUE false
apkVersionName 更新apk的versionName null false
apkDescription 更新描述 null false
apkSize 新版本的安裝包大?。▎挝籑) null false
apkMD5 新安裝包的md5(32位) null false

UpdateConfiguration:配置文檔

屬性 描述 默認(rèn)值
notifyId 通知欄消息id 1011
notificationChannel 適配Android O的渠道通知 詳情查閱源碼
httpManager 設(shè)置自己的下載過(guò)程 null
enableLog 是否需要日志輸出 true
onDownloadListener 下載過(guò)程的回調(diào) null
jumpInstallPage 下載完成是否自動(dòng)彈出安裝頁(yè)面 true
showNotification 是否顯示通知欄進(jìn)度(后臺(tái)下載提示) true
forcedUpgrade 是否強(qiáng)制升級(jí) false
showBgdToast 是否提示 "正在后臺(tái)下載新版本…" true
onButtonClickListener 按鈕點(diǎn)擊事件回調(diào) null
dialogImage 對(duì)話框背景圖片資源(圖片規(guī)范參考demo) -1
dialogButtonColor 對(duì)話框按鈕的顏色 -1
dialogButtonTextColor 對(duì)話框按鈕的文字顏色 -1
dialogProgressBarColor 對(duì)話框進(jìn)度條和文字顏色 -1

使用步驟

第一步: app/build.gradle進(jìn)行依賴

implementation 'com.azhon:appupdate:2.8.0'

  • 如果你使用的是AndroidX,請(qǐng)依賴appupdateX
implementation 'com.azhon:appupdateX:2.8.0'

第二步:兼容Android N 及以上版本,在app/build.gradle添加如下代碼

defaultConfig {

    //每個(gè)應(yīng)用擁有不同的authorities,防止相同的在同一個(gè)手機(jī)上無(wú)法同時(shí)安裝
    resValue "string", "authorities", applicationId
}

第三步:創(chuàng)建DownloadManager,更多用法請(qǐng)查看這里示例代碼

DownloadManager manager = DownloadManager.getInstance(this);
manager.setApkName("appupdate.apk")
        .setApkUrl("https://raw.githubusercontent.com/azhon/AppUpdate/master/apk/appupdate.apk")
        .setSmallIcon(R.mipmap.ic_launcher)
        .download();

如果需要顯示內(nèi)置的對(duì)話框那么你需要調(diào)用manager.setApkVersionCode()將新版本的versionCode填進(jìn)去

第四步:混淆打包,只需保持ActivityService不混淆

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Service

使用技巧

  • 框架內(nèi)部支持中/英文 國(guó)際化(其他語(yǔ)言只需要在對(duì)應(yīng)的string.xml中取相同的名字即可)
  • 查看版本庫(kù)中的Log只需要過(guò)濾AppUpdate開頭的Tag
  • 支持校驗(yàn)安裝包的MD5避免重復(fù)下載,只需要DownloadManager設(shè)置安裝包的MD5即可
  • 下載完成 打開新版本后刪除舊安裝包文件,實(shí)現(xiàn)思路請(qǐng)移步此處
//舊版本apk的文件保存地址
boolean b = ApkUtil.deleteOldApk(this, getExternalCacheDir().getPath() + "/appupdate.apk");

  • 溫馨提示:升級(jí)對(duì)話框中的內(nèi)容是可以上下滑動(dòng)的哦!
  • 如果需要實(shí)現(xiàn)自己一套下載過(guò)程,只需要繼承BaseHttpDownloadManager 并使用listener更新進(jìn)度
public class MyDownload extends BaseHttpDownloadManager {}

版本更新記錄

  • v2.8.0(2020/02/21)
    • [修復(fù)] LogUtil偶現(xiàn)空指針問(wèn)題
    • [優(yōu)化] FileProvider改為框架內(nèi)置,用戶無(wú)需手動(dòng)配置
    • [優(yōu)化] apkVersionCode的判斷
  • 更多更新記錄點(diǎn)此查看

下載源碼

點(diǎn)擊下載

開源

項(xiàng)目地址: https://github.com/azhon/AppUpdate

項(xiàng)目分類: Android

授權(quán)協(xié)議 : Apache-2.0

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。