一個簡單、輕量、可隨意定製的Android版本更新庫 ?

阿鍾發表於2018-11-30

寫在前面

框架內部支援中/英文(其他語言只需要在對應的string.xml中取相同的名字即可)

內部對話方塊背景圖片、按鈕支援自定義了

檢視版本中的Log只需要過濾AppUpdate開頭的Tag

重點: 如果沒有設定downloadPath則預設為getExternalCacheDir()目錄,同時不會申請[儲存]許可權!

Github專案地址

目錄

編譯問題

  • 因為適配了Android O的通知欄,所以依賴的v7包版本比較高appcompat-v7:26.1.0
  • 使用的gradle版本為gradle-4.1-all,所以建議使用Android Studio 3.0及以上的版本開啟此專案

效果圖

一個簡單、輕量、可隨意定製的Android版本更新庫 ?一個簡單、輕量、可隨意定製的Android版本更新庫 ? 一個簡單、輕量、可隨意定製的Android版本更新庫 ?一個簡單、輕量、可隨意定製的Android版本更新庫 ? 一個簡單、輕量、可隨意定製的Android版本更新庫 ?一個簡單、輕量、可隨意定製的Android版本更新庫 ?

功能介紹

  • 支援斷點下載
  • 支援後臺下載
  • 支援自定義下載過程
  • 支援 裝置 >= Android M 動態許可權的申請
  • 支援通知欄進度條展示(或者自定義顯示進度)
  • 支援Android N
  • 支援Android O
  • 支援中/英文雙語
  • 支援自定內建對話方塊的樣式
  • 使用HttpURLConnection下載,未整合其他第三方框架

更加詳細的文件參閱此處《AppUpdate API文件》

DownloadManager:配置文件

初始化使用DownloadManager.getInstance(this)

屬性 描述 預設值 是否必須設定
context 上下文 null true
apkUrl apk的下載地址 null true
apkName apk下載好的名字 null true
downloadPath apk下載的位置 getExternalCacheDir() false
showNewerToast 是否提示使用者 "當前已是最新版本" false false
smallIcon 通知欄的圖示(資源id) -1 true
configuration 這個庫的額外配置 null false
apkVersionCode 更新apk的versionCode
(如果設定了那麼庫中將會進行版本判斷
下面的屬性也就需要設定了)
1 false
apkVersionName 更新apk的versionName null false
apkDescription 更新描述 null false
apkSize 新版本的安裝包大小(單位M) null false
authorities 相容Android N uri授權 應用包名 false

UpdateConfiguration:配置文件

屬性 描述 預設值
notifyId 通知欄訊息id 1011
notificationChannel 適配Android O的渠道通知 詳情查閱原始碼
httpManager 設定自己的下載過程 null
breakpointDownload 是否需要支援斷點下載 true
enableLog 是否需要日誌輸出 true
onDownloadListener 下載過程的回撥 null
jumpInstallPage 下載完成是否自動彈出安裝頁面 true
showNotification 是否顯示通知欄進度(後臺下載提示) true
forcedUpgrade 是否強制升級 false
onButtonClickListener 按鈕點選事件回撥 null
dialogImage 對話方塊背景圖片資源(圖片規範參考demo) -1
dialogButtonColor 對話方塊按鈕的顏色 -1
dialogButtonTextColor 對話方塊按鈕的文字顏色 -1

所有版本:點選檢視

使用步驟

第一步: app/build.gradle進行依賴

implementation 'com.azhon:appupdate:1.7.3'
複製程式碼

第二步:建立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)
        //可設定,可不設定
        .setConfiguration(configuration)
        .download();
複製程式碼

第三步:相容Android N 及以上版本,在你應用的Manifest.xml新增如下程式碼

<--! android:authorities="${applicationId}" 
這個值必須與DownloadManager中的authorities一致(不設定則為應用包名)-->

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths_public" />
</provider>
複製程式碼

第四步:資原始檔res/xml/file_paths_public.xml內容

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path
        name="app_update_external"
        path="/" />
    <external-cache-path
        name="app_update_cache"
        path="/" />
</paths>
複製程式碼
  • 相容Android O及以上版本,需要設定NotificationChannel(通知渠道);庫中已經寫好可以前往查閱NotificationUtil.java
  • 溫馨提示:升級對話方塊中的內容是可以上下滑動的哦?!
  • 如果需要實現自己一套下載過程,只需要繼承BaseHttpDownloadManager 並使用listener更新進度
public class MyDownload extends BaseHttpDownloadManager {}
複製程式碼

Demo下載體驗

點選下載Demo進行體驗

版本更新記錄

  • v1.7.3
    • 當下載地址返回http code 200且content-length = -1時,使用全量下載
    • 優化下載引數檢查將throw new exception改成return

更多更新記錄點此檢視

結語

  • 歡迎大家加入《通往Android的神奇之旅》群號碼:555974449
  • 如果大家在使用的過程中有什麼問題,歡迎提Issues告知。
  • 如果大家有什麼好的建議或者需求,也可以提Issues或者傳送郵件至:958460248@qq.com

相關文章