Andorid|UpdateAppUtils软件快速更新框架的使用方法

实现效果

效果图

添加依赖

repositories {
   jcenter()
}

根据自己使用的APP的框架选用不同的包引入:

dependencies {
    // For developers using AndroidX in their applications
    implementation 'com.teprinciple:updateapputilsx:2.3.0'
 
    // For developers using the Android Support Library
    implementation 'com.teprinciple:updateapputils:2.3.0'
}

声明权限

AndroidManifest.xml文件中声明所需要的动态权限:

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>

初始化

这三个变量可通过服务器实现从数据库中获取,本文只是写死了地址还没有实现服务端功能…

首先需要定义三个全局变量,也可以选择直接写到方法里:

    //APK的地址
    private String apkUrl = "此处填写APK地址";
    //更新弹窗标题
    private String updateTitle = "发现新版本";
    //更新弹窗简介
    private String updateContent = "1、...\n2、...\n3、更多功能等你探索";

Activity中的*onCreate()*方法中初始化框架:

		//初始化
        UpdateAppUtils.init(this);

实现功能

可以写进一个方法来调用也可直接写在Activity中的*onCreate()*方法中实现:

    public void UpdateApp(){

        //更新配置信息
        UpdateConfig updateConfig = new UpdateConfig();
        //检查Wifi状态
        updateConfig.setCheckWifi(true);
        //开启MD5校验
        updateConfig.setNeedCheckMd5(true);
        //开启下载进度条
        updateConfig.setAlwaysShowDownLoadDialog(true);
        //关闭通知栏进度条
        updateConfig.setShowNotification(false);
        //关闭下载提示框
        updateConfig.setShowDownloadingToast(false);

        //UI配置信息
        UiConfig uiConfig = new UiConfig();
        uiConfig.setUiType(UiType.PLENTIFUL);

        //功能Api
        UpdateAppUtils
                .getInstance()
                .apkUrl(apkUrl)
                .updateTitle(updateTitle)
                .updateContent(updateContent)
                .uiConfig(uiConfig)
                .updateConfig(updateConfig)
                .setMd5CheckResultListener(new Md5CheckResultListener() {
                    @Override
                    public void onResult(boolean result) {
                        if(result == false) {
                            Toast.makeText(MainActivity.this, "Md5检验未通过,请晚些再更新!", Toast.LENGTH_SHORT).show();
                        }
                    }
                })
                .update();
    }

框架其余Api说明:

1、UpdateAppUtils Api

api说明默认值必须设置
funapkUrl(apkUrl:String)更新包服务器urlnulltrue
funupdate()UpdateAppUtils入口-true
funupdateTitle(title:String)更新标题版本更新啦!false
funupdateContent(content:String)更新内容发现新版本,立即更新false
funupdateConfig(config:UpdateConfig)更新配置查看源码false
funuiConfig(uiConfig:UiConfig)更新弹窗UI配置查看源码false
funsetUpdateDownloadListener()下载过程监听nullfalse
funsetMd5CheckResultListener()md5校验结果回调nullfalse
funsetOnInitUiListener()初始化更新弹窗UI回调nullfalse
fundeleteInstalledApk()删除已安装的apk-false
funsetCancelBtnClickListener()暂不更新按钮点击监听-false
funsetUpdateBtnClickListener()立即更新按钮点击监听-false

2、UpdateConfig:更新配置说明

属性说明默认值
isDebug是否输出【UpdateAppUtils】为Tag的日志true
force是否强制更新,强制时无取消按钮false
apkSavePathapk下载存放位置包名目录
apkSaveNameapk保存文件名项目名
downloadBy下载方式DownLoadBy.APP
needCheckMd5是否需要校验apk签名md5false
checkWifi检查是否wififalse
isShowNotification是否显示通知栏进度true
notifyImgRes通知栏图标项目icon
serverVersionName服务器上apk版本名
serverVersionCode服务器上apk版本号
alwaysShow是否每次显示更新弹窗(非强更)true
thisTimeShow本次是否显示更新弹窗(非强更)false
alwaysShowDownLoadDialog是否需要显示更新下载进度弹窗(非强更)false
showDownloadingToast开始下载时是否显示Toasttrue

3、UiConfig:更新弹窗Ui配置说明

属性说明默认值
uiTypeui模板UiType.SIMPLE
customLayoutId自定义布局idfalse
updateLogoImgRes更新弹窗logo图片资源id-
titleTextSize标题字体大小16sp
titleTextColor标题字体颜色-
contentTextSize内容字体大小14sp
contentTextColor内容字体颜色-
updateBtnBgColor更新按钮背景颜色-
updateBtnBgRes更新按钮背景资源id-
updateBtnTextColor更新按钮字体颜色-
updateBtnTextSize更新按钮文字大小14sp
updateBtnText更新按钮文案立即更新
cancelBtnBgColor取消按钮背景颜色-
cancelBtnBgRes取消按钮背景资源id-
cancelBtnTextColor取消按钮文字颜色-
cancelBtnTextSize取消按钮文字大小14sp
cancelBtnText取消按钮文案暂不更新
downloadingToastText开始下载时的Toast提示文字更新下载中…
downloadingBtnText下载中下载按钮以及通知栏标题前缀,进度自动拼接在后面下载中
downloadFailText下载出错时,下载按钮及通知栏标题下载出错,点击重试

所有代码

注释已经写的很详细了,其余就不做赘述了,以下是全部代码:

package com.example.updatedemo;

import androidx.appcompat.app.AppCompatActivity;
import constant.UiType;
import listener.Md5CheckResultListener;
import model.UiConfig;
import model.UpdateConfig;
import update.UpdateAppUtils;

import android.os.Bundle;
import android.widget.Toast;

import org.jetbrains.annotations.NotNull;

/**
 *
 * @author 纸鱼
 * @since 2022-11-07 22:50
 *
 */
public class MainActivity extends AppCompatActivity {

    //APK的地址
    private String apkUrl = "此处填写APK地址";
    //更新弹窗标题
    private String updateTitle = "发现新版本";
    //更新弹窗简介
    private String updateContent = "1、...\n2、...\n3、更多功能等你探索";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化
        UpdateAppUtils.init(this);

        UpdateApp();

    }

    public void UpdateApp(){

        //更新配置信息
        UpdateConfig updateConfig = new UpdateConfig();
        //检查Wifi状态
        updateConfig.setCheckWifi(true);
        //开启签名文件MD5校验
        updateConfig.setNeedCheckMd5(true);
        //开启下载进度条
        updateConfig.setAlwaysShowDownLoadDialog(true);
        //关闭通知栏进度条
        updateConfig.setShowNotification(false);
        //关闭下载提示框
        updateConfig.setShowDownloadingToast(false);

        //UI配置信息
        UiConfig uiConfig = new UiConfig();
        uiConfig.setUiType(UiType.PLENTIFUL);

        //功能Api
        UpdateAppUtils
                .getInstance()
                .apkUrl(apkUrl)
                .updateTitle(updateTitle)
                .updateContent(updateContent)
                .uiConfig(uiConfig)
                .updateConfig(updateConfig)
                .setMd5CheckResultListener(new Md5CheckResultListener() {
                    @Override
                    public void onResult(boolean result) {
                        if(result == false) {
                            Toast.makeText(MainActivity.this, "Md5检验未通过,请晚些再更新!", Toast.LENGTH_SHORT).show();
                        }
                    }
                })
                .update();
    }
}

结语

作者给的Api表格里的功能以及UI样式很全,可根据需要自行定制,如果对UI风格不满意可以去作者的GitHub上看自定义UI的教程。
UpdateAppUtils框架GitHub地址:https://github.com/teprinciple/UpdateAppUtils

框架内部支持中/英文(其他语言只需要在对应的string.xml中取相同的名字即可)内部对话框背景图片、按钮支持自定义了查看版本中的Log只需要过滤AppUpdate开头的Tag重点: 如果没有设置downloadPath则默认为getExternalCacheDir()目录,同时不会申请[存储]权限!目录编译问题效果图功能介绍DownloadManagerUpdateConfiguration使用步骤Demo下载体验版本更新记录结语编译问题因为适配了Android O的通知栏,所以依赖的v7包版本比较高appcompat-v7:26.1.0使用的gradle版本为gradle-4.1-all,所以建议使用Android Studio 3.0及以上的版本打开此项目效果图     功能介绍 支持断点下载 支持后台下载 支持自定义下载过程 支持 设备 >= Android M 动态权限的申请 支持通知栏进度条展示(或者自定义显示进度) 支持Android N 支持Android O 支持中/英文双语 支持自定内置对话框的样式 使用HttpURLConnection下载,未集成其他第三方框架更加详细的文档参阅此处《AppUpdate API文档》DownloadManager:配置文档初始化使用DownloadManager.getInstance(this)属性描述默认值是否必须设置context上下文nulltrueapkUrlapk的下载地址nulltrueapkNameapk下载好的名字nulltruedownloadPathapk下载的位置getExternalCacheDir()falseshowNewerToast是否提示用户 "当前已是最新版本"falsefalsesmallIcon通知栏的图标(资源id)-1trueconfiguration这个库的额外配置nullfalseapkVersionCode更新apk的versionCode (如果设置了那么库中将会进行版本判断下面的属性也就需要设置了)1falseapkVersionName更新apk的versionNamenullfalseapkDescription更新描述nullfalseapkSize新版本的安装包大小(单位M)nullfalseauthorities兼容Android N uri授权应用包名falseUpdateConfiguration:配置文档属性描述默认值notifyId通知栏消息id1011notificationChannel适配Android O的渠道通知详情查阅源码httpManager设置自己的下载过程nullbreakpointDownload是否需要支持断点下载trueenableLog是否需要日志输出trueonDownloadListener下载过程的回调nulljumpInstallPage下载完成是否自动弹出安装页面trueshowNotification是否显示通知栏进度(后台下载提示)trueforcedUpgrade是否强制升级falseonButtonClickListener按钮点击事件回调nulldialogImage对话框背景图片资源(图片规范参考demo)-1dialogButtonColor对话框按钮的颜色-1dialogButtonTextColor对话框按钮的文字颜色-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 {}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值