一个简单、轻量的Android版本更新库、内置了一个漂亮的更新对话框

版权声明:本文出自阿钟的博客,转载请注明出处: https://blog.csdn.net/a_zhon/article/details/79215433

写在前面

Travis Travis Travis Travis Travis

框架内部支持中/英文

内部对话框背景图片、按钮支持自定义了

查看版本中的Log只需要过滤AppUpdate开头的Tag

重点: 如果没有设置downloadPath则默认为getExternalCacheDir()目录,同时不会申请[存储]权限!

目录

编译问题

  • 因为适配了Android O的通知栏,所以依赖的v7包版本比较高appcompat-v7:26.1.0
  • 使用的gradle版本为gradle-4.1-all,所以建议使用Android Studio 3.0及以上的版本打开此项目

效果图

 
 
 

功能介绍

  • 支持断点下载
  • 支持后台下载
  • 支持自定义下载过程
  • 支持 设备 >= Android M 动态权限的申请
  • 支持通知栏进度条展示(或者自定义显示进度)
  • 支持Android N
  • 支持Android O
  • 支持中/英文双语
  • 支持自定内置对话框的样式

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进行依赖,最新的版本号前往Github查看

    implementation 'com.azhon:appupdate:onGithub'
    
  • 所有版本:点击查看

  • 简单用法:创建DownloadManager,更多用法请查看这里示例代码

DownloadManager manager = DownloadManager.getInstance(this);
manager.setApkName("appupdate.apk")
        .setApkUrl("https://raw.githubusercontent.com/azhon/AppUpdate/master/apk/appupdate.apk")
        .setDownloadPath(Environment.getExternalStorageDirectory() + "/AppUpdate")
        .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.0

    • 优化Log日志输出,所有Log的Tag以AppUpdate开头
    • 优化使用getExternalCacheDir()目录时,不申请[存储]权限
    • 对话框背景图片支持自定义了
    • 支持中/英文双语
  • v1.5.6

    • 新增Android N uri authorities授权设置
  • v1.5.5

    • 解决部分下载地址无法获取到文件大小问题
  • v1.5.3

    • 修复权限申请返回结果数组为空的情况
  • v1.5.2

    • 添加对话框按钮点击事件监听
    • 启动下载服务时增加了通知栏开关状态检查,结果以打印日志的形式反馈
  • v1.5.1

    • 修复部分手机频繁更新通知栏造成通知栏卡顿问题
  • v1.5.0

    • 添加强制更新逻辑
  • v1.4.0

    • 修复在Android O设备上更新进度手机一直震动问题
  • v1.2.0

    • 添加是否提示用户 “当前已是最新版本” 的布尔值
    • 修复部分手机请求权限时抛出:Only fullscreen opaque activities can request orientation

结语

  • 如果大家在使用的过程中有什么问题,欢迎提Issues告知。
  • 如果大家有什么好的建议或者需求,也可以提Issues或者发送邮件至:958460248@qq.com
阅读更多

扫码向博主提问

Code-Porter

博客专家

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • Android
  • ReactNativ
  • 微信小程序
去开通我的Chat快问

没有更多推荐了,返回首页