MZCretin / AutoUpdateProject

App 内部更新 提供12种更新的样式 支持Android全系统版本 支持自定义UI 断点续传
1.06k stars 221 forks source link
appupdate sdk

AutoUpdateProject

全平台国际化话翻译解决方案

项目国际化翻译解决方案,支持Android、iOS、Flutter、前端Vue、后端PHP等等,点几下按钮就能实现翻译内容的自动抓取和翻译后文件的自动生成,适合各类场景下的国际化需求。详情请查看:https://github.com/MZCretin/Eva-Translate 欢迎star


想没想过做个自己的APP?

想没想过自己做个APP,自己做自己的产品,自己决定交互,自己制作ui,那么快来吧,我开源了段子乐APP的数据和接口,你完全可以自己diy一个你自己的产品了~,详情请查看:https://github.com/MZCretin/duanzile-open-api 欢迎star

系列

在工作之余,打算将一些常用的逻辑页面,模块,功能点做成library库,这样当有相似需求的时候,可以做到插拔式开发!现在系列中有以下内容

特点概述

新版本说明

博客地址

掘金-【需求解决系列之四】Android App在线自动更新Library(V2.0)

简书-【需求解决系列之四】Android App在线自动更新Library(V2.0)

Demo体验

Demo下载

扫描二维码下载:

效果预览

说明: 以下12个更新的样式的类型值从左到右从上到下一次为

TypeConfig.UI_THEME_ATypeConfig.UI_THEME_BTypeConfig.UI_THEME_CTypeConfig.UI_THEME_DTypeConfig.UI_THEME_ETypeConfig.UI_THEME_FTypeConfig.UI_THEME_GTypeConfig.UI_THEME_HTypeConfig.UI_THEME_ITypeConfig.UI_THEME_JTypeConfig.UI_THEME_KTypeConfig.UI_THEME_L

UI_THEME_AUI_THEME_BUI_THEME_CUI_THEME_DUI_THEME_EUI_THEME_FUI_THEME_GUI_THEME_HUI_THEME_IUI_THEME_JUI_THEME_KUI_THEME_L

使用方式

Step 1. Add the JitPack repository to your build file Add it in your root build.gradle at the end of repositories:

allprojects { repositories { ... maven { url 'https://jitpack.io' } } }

Step 2. Add the dependency

    dependencies { implementation 'com.github.MZCretin:AutoUpdateProject:latest_version' }

Step 3. Init it in BaseApplication or MainActivity before using it.And then register BaseApplication in AndroidManifest(Don't forget it).

        //如果你想使用okhttp作为下载的载体,那么你需要自己依赖okhttp,更新库不强制依赖okhttp!可以使用如下代码创建一个OkHttpClient 并在UpdateConfig中配置setCustomDownloadConnectionCreator start
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.connectTimeout(30_000, TimeUnit.SECONDS)
                .readTimeout(30_000, TimeUnit.SECONDS)
                .writeTimeout(30_000, TimeUnit.SECONDS)
                //如果你需要信任所有的证书,可解决根证书不被信任导致无法下载的问题 start
                .sslSocketFactory(SSLUtils.createSSLSocketFactory())
                .hostnameVerifier(new SSLUtils.TrustAllHostnameVerifier())
                //如果你需要信任所有的证书,可解决根证书不被信任导致无法下载的问题 end
                .retryOnConnectionFailure(true);
        //如果你想使用okhttp作为下载的载体,那么你需要自己依赖okhttp,更新库不强制依赖okhttp!可以使用如下代码创建一个OkHttpClient 并在UpdateConfig中配置setCustomDownloadConnectionCreator end

        //当你希望自己提供json数据给插件,让插件自己解析并实现更新
        UpdateConfig updateConfig = new UpdateConfig()
                        .setDebug(true)//是否是Debug模式
                        .setDataSourceType(TypeConfig.DATA_SOURCE_TYPE_JSON)//设置获取更新信息的方式为JSON方式
                        .setShowNotification(true)//配置更新的过程中是否在通知栏显示进度
                        .setNotificationIconRes(R.mipmap.download_icon)//配置通知栏显示的图标
                        .setUiThemeType(TypeConfig.UI_THEME_AUTO)//配置UI的样式,一种有12种样式可供选择
                        .setAutoDownloadBackground(false)//是否需要后台静默下载,如果设置为true,则调用checkUpdate方法之后会直接下载安装,不会弹出更新页面。当你选择UI样式为TypeConfig.UI_THEME_CUSTOM,静默安装失效,您需要在自定义的Activity中自主实现静默下载,使用这种方式的时候建议setShowNotification(false),这样基本上用户就会对下载无感知了
                        .setCustomActivityClass(CustomActivity.class)//如果你选择的UI样式为TypeConfig.UI_THEME_CUSTOM,那么你需要自定义一个Activity继承自RootActivity,并参照demo实现功能,在此处填写自定义Activity的class,否则不用设置
                        .setNeedFileMD5Check(false)//是否需要进行文件的MD5检验,如果开启需要提供文件本身正确的MD5校验码,DEMO中提供了获取文件MD5检验码的工具页面,也提供了加密工具类Md5Utils
                        .setCustomDownloadConnectionCreator(new OkHttp3Connection.Creator(builder))//如果你想使用okhttp作为下载的载体,可以使用如下代码创建一个OkHttpClient,并使用demo中提供的OkHttp3Connection构建一个ConnectionCreator传入,在这里可以配置信任所有的证书,可解决根证书不被信任导致无法下载apk的问题
                        .setModelClass(new UpdateModel());//这里设置JSON解析之后对应的Model 用于json解析
        AppUpdateUtils.init(this, updateConfig);//执行初始化

        //当你希望使用传入model的方式,让插件自己解析并实现更新
        UpdateConfig updateConfig = new UpdateConfig()
                .setDebug(true)//是否是Debug模式
                .setDataSourceType(TypeConfig.DATA_SOURCE_TYPE_MODEL)//设置获取更新信息的方式
                .setShowNotification(true)//配置更新的过程中是否在通知栏显示进度
                .setNotificationIconRes(R.mipmap.download_icon)//配置通知栏显示的图标
                .setUiThemeType(TypeConfig.UI_THEME_AUTO)//配置UI的样式,一种有12种样式可供选择
                .setAutoDownloadBackground(false)//是否需要后台静默下载,如果设置为true,则调用checkUpdate方法之后会直接下载安装,不会弹出更新页面。当你选择UI样式为TypeConfig.UI_THEME_CUSTOM,静默安装失效,您需要在自定义的Activity中自主实现静默下载,使用这种方式的时候建议setShowNotification(false),这样基本上用户就会对下载无感知了
                .setCustomActivityClass(CustomActivity.class)//如果你选择的UI样式为TypeConfig.UI_THEME_CUSTOM,那么你需要自定义一个Activity继承自RootActivity,并参照demo实现功能,在此处填写自定义Activity的class
                .setNeedFileMD5Check(false)//是否需要进行文件的MD5检验,如果开启需要提供文件本身正确的MD5校验码,DEMO中提供了获取文件MD5检验码的工具页面,也提供了加密工具类Md5Utils
                .setCustomDownloadConnectionCreator(new OkHttp3Connection.Creator(builder));//如果你想使用okhttp作为下载的载体,可以使用如下代码创建一个OkHttpClient,并使用demo中提供的OkHttp3Connection构建一个ConnectionCreator传入,在这里可以配置信任所有的证书,可解决根证书不被信任导致无法下载apk的问题
        AppUpdateUtils.init(this, updateConfig);

        //当你希望使用配置请求链接的方式,让插件自己解析并实现更新
        UpdateConfig updateConfig = new UpdateConfig()
                .setDebug(true)//是否是Debug模式
                .setBaseUrl("http://www.cretinzp.com/system/versioninfo")//当dataSourceType为DATA_SOURCE_TYPE_URL时,配置此接口用于获取更新信息
                .setMethodType(TypeConfig.METHOD_GET)//当dataSourceType为DATA_SOURCE_TYPE_URL时,设置请求的方法
                .setDataSourceType(TypeConfig.DATA_SOURCE_TYPE_URL)//设置获取更新信息的方式
                .setShowNotification(true)//配置更新的过程中是否在通知栏显示进度
                .setNotificationIconRes(R.mipmap.download_icon)//配置通知栏显示的图标
                .setUiThemeType(TypeConfig.UI_THEME_AUTO)//配置UI的样式,一种有12种样式可供选择
                .setRequestHeaders(null)//当dataSourceType为DATA_SOURCE_TYPE_URL时,设置请求的请求头
                .setRequestParams(null)//当dataSourceType为DATA_SOURCE_TYPE_URL时,设置请求的请求参数
                .setAutoDownloadBackground(false)//是否需要后台静默下载,如果设置为true,则调用checkUpdate方法之后会直接下载安装,不会弹出更新页面。当你选择UI样式为TypeConfig.UI_THEME_CUSTOM,静默安装失效,您需要在自定义的Activity中自主实现静默下载,使用这种方式的时候建议setShowNotification(false),这样基本上用户就会对下载无感知了
                .setCustomActivityClass(CustomActivity.class)//如果你选择的UI样式为TypeConfig.UI_THEME_CUSTOM,那么你需要自定义一个Activity继承自RootActivity,并参照demo实现功能,在此处填写自定义Activity的class
                .setNeedFileMD5Check(false)//是否需要进行文件的MD5检验,如果开启需要提供文件本身正确的MD5校验码,DEMO中提供了获取文件MD5检验码的工具页面,也提供了加密工具类Md5Utils
                .setCustomDownloadConnectionCreator(new OkHttp3Connection.Creator(builder))//如果你想使用okhttp作为下载的载体,可以使用如下代码创建一个OkHttpClient,并使用demo中提供的OkHttp3Connection构建一个ConnectionCreator传入,在这里可以配置信任所有的证书,可解决根证书不被信任导致无法下载apk的问题
                .setModelClass(new UpdateModel());
        AppUpdateUtils.init(this, updateConfig);

Step 4. Start using it wherever you want as below with 3 ways.

    //有三种方式实现app更新,您可选其中一种方式来进行,推荐使用第三种方式!
    //新增下载进度和MD5检测结果的回调监听 2019-10-22 18:51:19

    //第一种方式,使用JSON字符串,让sdk自主解析并实现功能
    String jsonData = "{\"versionCode\": 25,\"isForceUpdate\": 1,\"preBaselineCode\": 24,\"versionName\": \"v2.3.1\",\"downurl\": \"http://jokesimg.cretinzp.com/apk/app-release_231_jiagu_sign.apk\",\"updateLog\": \"1、优化细节和体验,更加稳定\n2、引入大量优质用户\r\n3、修复已知bug\n4、风格修改\",\"size\": \"31338250\",\"hasAffectCodes\": \"1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24\"}";
    AppUpdateUtils.getInstance()
                        .addMd5CheckListener(...)//添加MD5检查更新
                        .addAppDownloadListener(...)//添加文件下载监听
                        .checkUpdate(jsonData);

    //第二种方式,使用MODEL方式,组装好对应的MODEL,传入sdk中
    DownloadInfo info = new DownloadInfo().setApkUrl("http://jokesimg.cretinzp.com/apk/app-release_231_jiagu_sign.apk")
            .setFileSize(31338250)
            .setProdVersionCode(25)
            .setProdVersionName("2.3.1")
            .setMd5Check("68919BF998C29DA3F5BD2C0346281AC0")
            .setForceUpdateFlag(listModel.isForceUpdate() ? 1 : 0)
            .setUpdateLog("1、优化细节和体验,更加稳定\n2、引入大量优质用户\r\n3、修复已知bug\n4、风格修改");
    AppUpdateUtils.getInstance()
                        .addMd5CheckListener(...)//添加MD5检查更新
                        .addAppDownloadListener(...)//添加文件下载监听
                        .checkUpdate(info);

    //第三种方式,在初始化的时候配置接口地址,sdk自主请求+解析实现功能(推荐)
    AppUpdateUtils.getInstance()
                        .addMd5CheckListener(...)//添加MD5检查更新
                        .addAppDownloadListener(...)//添加文件下载监听
                        .checkUpdate();

使用注意点

有什么意见或者建议欢迎与我交流,觉得不错欢迎Star

使用过程中如果有什么问题或者建议,欢迎在issue中提出来或者直接联系我 mxnzp_life@163.com 嘿嘿!