描述
效果圖
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
6.jpg
功能介紹
- 支持AndroidX
- 支持后臺下載
- 支持強制更新
- 支持自定義下載過程
- 支持 設(shè)備 >= Android M 動態(tài)權(quán)限的申請
- 支持通知欄進度條展示(或者自定義顯示進度)
- 支持Android N
- 支持Android O
- 支持Android P
- 支持Android Q
- 支持中/英文雙語(國際化)
- 支持自定義內(nèi)置對話框樣式
- 支持取消下載(如果發(fā)送了通知欄消息繁涂,則會移除)
- 支持下載完成 打開新版本后刪除舊安裝包文件
- 使用HttpURLConnection下載,未集成其他第三方框架
Demo下載體驗
DownloadManager:配置文檔
初始化使用
DownloadManager.getInstance(this)
屬性 | 描述 | 默認(rèn)值 | 是否必須設(shè)置 |
---|---|---|---|
context | 上下文 | null | true |
apkUrl | apk的下載地址 | null | true |
apkName | apk下載好的名字 | null | true |
downloadPath | apk下載的位置 (2.7.0以上版本已過時) | getExternalCacheDir() | false |
showNewerToast | 是否提示用戶 "當(dāng)前已是最新版本" | false | false |
smallIcon | 通知欄的圖標(biāo)(資源id) | -1 | true |
configuration | 這個庫的額外配置 | null | false |
apkVersionCode | 更新apk的versionCode (如果設(shè)置了那么庫中將會進行版本判斷下面的屬性也就需要設(shè)置了) | Integer.MIN_VALUE | false |
apkVersionName | 更新apk的versionName | null | false |
apkDescription | 更新描述 | null | false |
apkSize | 新版本的安裝包大衅链酢(單位M) | null | false |
apkMD5 | 新安裝包的md5(32位) | null | false |
UpdateConfiguration:配置文檔
屬性 | 描述 | 默認(rèn)值 |
---|---|---|
notifyId | 通知欄消息id | 1011 |
notificationChannel | 適配Android O的渠道通知 | 詳情查閱源碼 |
httpManager | 設(shè)置自己的下載過程 | null |
enableLog | 是否需要日志輸出 | true |
onDownloadListener | 下載過程的回調(diào) | null |
jumpInstallPage | 下載完成是否自動彈出安裝頁面 | true |
showNotification | 是否顯示通知欄進度(后臺下載提示) | true |
forcedUpgrade | 是否強制升級 | false |
showBgdToast | 是否提示 "正在后臺下載新版本…" | true |
onButtonClickListener | 按鈕點擊事件回調(diào) | null |
dialogImage | 對話框背景圖片資源(圖片規(guī)范參考demo) | -1 |
dialogButtonColor | 對話框按鈕的顏色 | -1 |
dialogButtonTextColor | 對話框按鈕的文字顏色 | -1 |
dialogProgressBarColor | 對話框進度條和文字顏色 | -1 |
使用步驟
第一步: app/build.gradle
進行依賴
implementation 'com.azhon:appupdate:2.8.0'
- 如果你使用的是
AndroidX
疮丛,請依賴appupdateX
implementation 'com.azhon:appupdateX:2.8.0'
第二步:兼容Android N 及以上版本酿雪,在app/build.gradle
添加如下代碼
defaultConfig {
//每個應(yīng)用擁有不同的authorities暑椰,防止相同的在同一個手機上無法同時安裝
resValue "string", "authorities", applicationId
}
第三步:創(chuàng)建DownloadManager
见咒,更多用法請查看這里示例代碼
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)置的對話框那么你需要調(diào)用manager.setApkVersionCode()
將新版本的versionCode填進去
第四步:混淆打包洽议,只需保持Activity
宗收、Service
不混淆
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Service
使用技巧
- 框架內(nèi)部支持中/英文 國際化(其他語言只需要在對應(yīng)的
string.xml
中取相同的名字即可) - 查看版本庫中的Log只需要過濾
AppUpdate
開頭的Tag - 支持校驗安裝包的MD5避免重復(fù)下載,只需要
DownloadManager
設(shè)置安裝包的MD5即可 - 下載完成 打開新版本后刪除舊安裝包文件亚兄,實現(xiàn)思路請移步此處
//舊版本apk的文件保存地址
boolean b = ApkUtil.deleteOldApk(this, getExternalCacheDir().getPath() + "/appupdate.apk");
- 溫馨提示:升級對話框中的內(nèi)容是可以上下滑動的哦混稽!
- 如果需要實現(xiàn)自己一套下載過程,只需要繼承
BaseHttpDownloadManager
并使用listener更新進度
public class MyDownload extends BaseHttpDownloadManager {}
版本更新記錄
- v2.8.0(2020/02/21)
- [修復(fù)] LogUtil偶現(xiàn)空指針問題
- [優(yōu)化] FileProvider改為框架內(nèi)置审胚,用戶無需手動配置
- [優(yōu)化] apkVersionCode的判斷
- 更多更新記錄點此查看
下載源碼
開源
項目地址: https://github.com/azhon/AppUpdate
項目分類: Android
授權(quán)協(xié)議 : Apache-2.0