美文网首页
Android 热更新

Android 热更新

作者: ryanxun | 来源:发表于2020-12-17 13:56 被阅读0次
    嘿,今天的你过的还好吗,今天分享一下实现app在线更新

    这么复杂的东西造轮子指定不是我的性格,先讲怎么用,然后再说原理.这个在网上找了好久,忽然发现这个简单实现方式,一行代码
    而且这个实现也挺全的支持MD5加密

    基本礼仪,先把人家的Github贴出来,支持Kotlin哦

    https://github.com/teprinciple/UpdateAppUtils

    //引包
    implementation 'com.teprinciple:updateapputilsx:2.3.0'
    

    根据示例,我仿照了一下,把路径之类的写死了

        private String apkUrl = "http://118.24.148.250:8080/yk/update_signed.apk";
        private String updateTitle = "发现新版本V2.0.0";
        private String updateContent = "1、Kotlin重构版\n2、支持自定义UI\n3、增加md5校验\n4、更多功能等你探索";
    

    这样网址信息版本就都有了

    然后需要根据官网,去实例化他的UpdateConfig;

    UpdateConfig updateConfig = new UpdateConfig();
    

    实例化UpdateConfig之后就可以配置一下他的文件
    官方给了几个基本属性,可以根据自己需要来设置

    isDebug  // 是否是调试模式,调试模式会输出日志
    alwaysShow  // 非强制更新时,是否每次都显示弹窗,用VersionName来判断
    thisTimeShow   // 非强制更新时,指定本次显示弹窗
    alwaysShowDownLoadDialog  // 非强制更新时,也显示下载进度dialog
    force  // 是否强制更新
    apkSavePath  // apk下载存放位置
    apkSaveName  // apk 保存名(默认是app的名字)
    downloadBy  // 下载方式:默认app下载
    checkWifi  // 是否检查是否wifi
    isShowNotification  // 是否在通知栏显示
    notifyImgRes  // 通知栏图标
    needCheckMd5  // 是否需要进行md5校验,仅app下载方式有效
    showDownloadingToast  // 是否需要显示 【更新下载中】文案
    serverVersionName  // 服务器上版本名
    serverVersionCode  // 服务器上版本号
    

    配置完需要的属性后,该研究一下ui了
    官方也是很给力的给了几个ui实例,去实现UiConfig方法就行

    UiConfig uiConfig = new UiConfig();
    

    方法我们有了,看看他的内部

    // ui类型,默认简洁版
    uiType  //SIMPLE简洁版;PLENTIFUL丰富版;CUSTOM自定义
    // 自定义UI 布局id
    customLayoutId
     // 更新弹窗中的logo
    updateLogoImgRes
     // 标题相关设置
    titleTextSize
    titleTextColor
     // 更新内容相关设置
    contentTextSize
    contentTextColor
    // 更新按钮相关设置
    updateBtnBgColor
    updateBtnBgRes
    updateBtnTextColor
    updateBtnTextSize
    updateBtnText
    // 取消按钮相关设置
    cancelBtnBgColor
    cancelBtnBgRes
    cancelBtnTextColor
    cancelBtnTextSize
    cancelBtnText
     // 开始下载时的Toast提示文字
    downloadingToastText
    // 下载中 下载按钮以及通知栏标题前缀,进度自动拼接在后面
    downloadingBtnText
    // 下载出错时,下载按钮及通知栏标题
    downloadFailText
    

    ui这块我觉得丰富版nei个挺不错的.我也就没尝试自定义.

    最后看看主要实现UpdateAppUtils方法

     /**
         * 设置apk下载地址
         */
    apkUrl
    /**
         * 设置更新标题
         */
    updateTitle
    /**
         * 设置更新内容
         */
    updateContent
    /**
         * 设置更新配置
         */
    updateConfig
    /**
         * 设置UI配置
         */
    uiConfig
    /**
         * 设置下载监听
         */
    setUpdateDownloadListener
    /**
         * 设置md5校验结果监听
         */
    setMd5CheckResultListener
    /**
         * 设置初始化UI监听
         */
    setOnInitUiListener
    /**
         * 设置 “暂不更新” 按钮点击事件
         */
    setCancelBtnClickListener
     /**
         * 设置 “立即更新” 按钮点击事件
         */
    setUpdateBtnClickListener
    /**
         * 检查更新
         */
    update
    /**
         * 获取单例对象
         */
    getInstance
    /**
         * 初始化,非必须。解决部分手机 通过UpdateFileProvider 获取不到context情况使用
         * * @param context 提供全局context。
         */
    init
    

    至此结束,可以简单实现,把代码贴出

    package cn.ryanliu.updateapp;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    
    import org.jetbrains.annotations.NotNull;
    
    import constant.UiType;
    import listener.Md5CheckResultListener;
    import listener.UpdateDownloadListener;
    import model.UiConfig;
    import model.UpdateConfig;
    import update.UpdateAppUtils;
    
    public class MainActivity extends AppCompatActivity {
    
        private String apkUrl = "http://118.24.148.250:8080/yk/update_signed.apk";
        private String updateTitle = "发现新版本V2.0.0";
        private String updateContent = "1、Kotlin重构版\n2、支持自定义UI\n3、增加md5校验\n4、更多功能等你探索";
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            UpdateConfig updateConfig = new UpdateConfig();
            updateConfig.setCheckWifi(true);
            updateConfig.setNeedCheckMd5(true);
            updateConfig.setNotifyImgRes(R.drawable.ic_launcher_background);
    
            UiConfig uiConfig = new UiConfig();
            uiConfig.setUiType(UiType.PLENTIFUL);
    
            UpdateAppUtils
                    .getInstance()
                    .apkUrl(apkUrl)
                    .updateTitle(updateTitle)
                    .updateContent(updateContent)
                    .uiConfig(uiConfig)
                    .updateConfig(updateConfig)
                    .setMd5CheckResultListener(new Md5CheckResultListener() {
                        @Override
                        public void onResult(boolean result) {
    
                        }
                    })
                    .setUpdateDownloadListener(new UpdateDownloadListener() {
                        @Override
                        public void onStart() {
    
                        }
    
                        @Override
                        public void onDownload(int progress) {
    
                        }
    
                        @Override
                        public void onFinish() {
    
                        }
    
                        @Override
                        public void onError(@NotNull Throwable e) {
    
                        }
                    })
                    .update();
        }
    }
    

    分析一下原理,个人觉得很明白理解
    首先就是根据参数看一下是否需要更新
    判断如果需要更新就去服务器上下载最新的apk
    最后把新得apk安装上就ok了

    没更新动态或者频繁更新动态的时候都是在认真生活

    相关文章

      网友评论

          本文标题:Android 热更新

          本文链接:https://www.haomeiwen.com/subject/zmzagktx.html