AppUpdate

Project Url: azhon/AppUpdate
Introduction: 一个 Android 版本更新的库、A Android version update library 🚀
More: Author   ReportBugs   
Tags:

本库核心逻辑(必读):

1、当调用了apkVersionCode()设置了最新的 VersionCode,则内部会自动判断是否显示对话框、下载和安装

  • 适配 Android 13 通知运行权限,且当设置showNotification(true)时,点击对话框的升级按钮会申请通知栏权限,无论是否同意都将会继续下载
  • 当设置强制更新forcedUpgrade(true)时,显示的对话框会显示下载进度条

    2、当没有调用apkVersionCode(),就可以把它当成一个下载器,内部只会进行下载和安装

    3、由于 Android 10 限制后台应用启动 Activity,所以下载完成会发送一个通知至通知栏(忽略 showNotification 的值,需要允许发送通知)

    4、更多用法请点此查看

相关文档链接

扫码加入 QQ 群(群号:828385813)

  • 或者添加加微信:hb958460248(备注 AppUpdate)

img src="https://github.com/azhon/AppUpdate/blob/main/img/qq_group.png"

目录

效果图

     

功能介绍

  • [x] 支持 Java、Kotlin
  • [x] 支持 AndroidX
  • [x] 支持后台下载
  • [x] 支持强制更新
  • [x] 支持自定义下载过程
  • [x] 支持 Android4.1 及以上版本
  • [x] 支持通知栏进度条展示,适配到 Android 13
  • [x] 支持中文/繁体/英文语言(国际化)
  • [x] 支持自定义内置对话框样式
  • [x] 支持取消下载(如果发送了通知栏消息,则会移除)
  • [x] 支持下载完成,打开新版本后删除旧安装包文件
  • [x] 不需要申请存储权限
  • [x] 使用 HttpURLConnection 下载,未集成其他第三方框架

Demo 下载体验

点击下载 Demo 进行体验

使用步骤

第一步:app/build.gradle添加依赖

implementation 'io.github.azhon:appupdate:4.3.2'
由于 GooglePlay 政策禁止应用内更新,所以可以通过多渠道的方式进处理 - GooglePlay 政策 - 本库提供了一个没有任何实现的版本点击查看详细内容 groovy android { //... productFlavors { other {} googlePlay {} } } dependencies { otherImplementation 'io.github.azhon:appupdate:latest-version' googlePlayImplementation 'io.github.azhon:appupdate-no-op:latest-version' }

第二步:创建DownloadManager

Kotlin java val manager = DownloadManager.Builder(this).run { apkUrl("your apk url") apkName("appupdate.apk") smallIcon(R.mipmap.ic_launcher) //设置了此参数,那么内部会自动判断是否需要显示更新对话框,否则需要自己判断是否需要更新 apkVersionCode(2) //同时下面三个参数也必须要设置 apkVersionName('v4.2.2') apkSize("7.7MB") apkDescription("更新描述信息(取服务端返回数据)") //省略一些非必须参数... build() } manager?.download()
Java java DownloadManager manager = new DownloadManager.Builder(this) .apkUrl("your apk url") .apkName("appupdate.apk") .smallIcon(R.mipmap.ic_launcher) //设置了此参数,那么内部会自动判断是否需要显示更新对话框,否则需要自己判断是否需要更新 .apkVersionCode(2) //同时下面三个参数也必须要设置 .apkVersionName("v4.2.2") .apkSize("7.7MB") .apkDescription("更新描述信息(取服务端返回数据)") //省略一些非必须参数... .build(); manager.download();

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

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

使用技巧

  • 框架内部支持国际化(其他语言只需要在对应的string.xml中取相同的名字即可)
  • 如果你需要修改框架内部的一些文字,你只需要在string.xml中取相同的名字即可以覆盖框架内设定的
  • 查看版本库中的 Log 只需要过滤AppUpdate开头的 Tag
  • 支持校验安装包的 MD5 避免重复下载,只需要Builder设置安装包的 MD5 即可
  • 下载完成 打开新版本后删除旧安装包文件
//旧版本 apk 的文件保存地址
val result = ApkUtil.deleteOldApk(this, "${externalCacheDir?.path}/appupdate.apk")
  • 温馨提示:升级对话框中的内容是可以上下滑动的哦!
  • 如果需要实现自己一套下载过程,只需要继承BaseHttpDownloadManager
class MyDownload : BaseHttpDownloadManager() {}

版本更新记录

赞赏

如果这个库有帮助到你并且你很想支持库的后续开发和维护,那么你可以扫描下方二维码随意打赏我,我将不胜感激赞赏列表

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools