Skip to content

NewBlankii/AppUpdate

 
 

Repository files navigation

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

目录

效果图

     

新添加的内置页面

功能介绍

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

Demo下载体验

点击下载Demo进行体验

使用步骤

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

implementation 'io.github.azhon:appupdate:4.2.10'
由于GooglePlay政策禁止应用内更新,所以可以通过多渠道的方式进处理
android {
    //...
    productFlavors {
        other {}
        googlePlay {}
    }
}

dependencies {
    otherImplementation 'io.github.azhon:appupdate:latest-version'
    googlePlayImplementation 'io.github.azhon:appupdate-no-op:latest-version'
}

第二步:创建DownloadManager,更多用法请查看这里示例代码

废除了旧的builder模式,下面旧方式不再支持

val manager = DownloadManager.Builder(this).run {
    apkUrl("your apk url")
    apkName("appupdate.apk")
    smallIcon(R.mipmap.ic_launcher)
    //If this parameter is set, it will automatically determine whether to show tip dialog
    apkVersionCode(2)
    apkVersionName('v4.2.2')
    apkSize("7.7MB")
    apkDescription("description...")
    //Optional parameters...
    build()
}
manager?.download()

崭新的使用方式

如果需要显示内置的对话框那么你需要在配置downloadmanager时指定viewType类型。

如果指定了apkVersionCode,将自动判断是否需要升级

如果需要自定义界面,在配置的时候将viewType指定为ViewType.None,这将不显示内置界面。

在配置的时候通过registerDownloadListener方法监听下载进度。

配置完成拿到manager后,通过调用manager.download()开始下载文件。

下面是其中一个downloadApp方法的定义,是个接收者函数,因此可以直接在activity或拿到activity的代码中使用

fun AppCompatActivity.downloadApp(config: DownloadManager.Config): DownloadManager

  • 使用方式
通过DownloadManager.config(application)方法构造一个manager,然后通过downloadApp方法完成配置如果指定viewtype为非ViewType.None,将显示内置界面

    
//配置一个downloadmanager
val manager = DownloadManager.config(application) {
    		//这里指定使用内置的不同更新界面,如果需要自己定制界面,指定为ViewType.None      
    		viewType = ViewType.Colorful
            apkUrl = url
            apkName = this@MainActivity.apkName
            smallIcon = R.mipmap.ic_launcher
            apkVersionCode = 2
            apkVersionName = "v4.2.1"
            apkSize = "7.7MB"
            apkDescription = getString(R.string.dialog_msg)
            //对于之前的更新页面的配置
            //新添加的内置更新页面不适用
            configDialog {
//              dialogImage=R.drawable.ic_dialog
//              dialogButtonColor=Color.parseColor("#E743DA")
//              dialogProgressBarColor=Color.parseColor("#E743DA")
                showNewerToast = true
                dialogButtonTextColor = Color.WHITE
            }
            forcedUpgrade = false
        }

//显示更新界面
val manager = downloadApp(manager!!)
  • 或者,更简单一些,直接配置并显示更新界面,还能拿到downloadmanager。如果使用了内置界面,其实是否拿到manager无关紧要。
直接通过downloadApp方法构造downloadmanager并显示更新界面
val manager=downloadApp {
            //。。。。。
     		//跟上面一样的配置
        }

第三步:混淆打包,只需保持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() {}

版本更新记录

赞赏

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

About

Android App update library. Android版本更新库,简单、轻量、可随意定制

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Kotlin 84.5%
  • Java 15.3%
  • Shell 0.2%