{"id":20844864,"url":"https://github.com/mzcretin/autoupdateproject","last_synced_at":"2025-05-16T07:07:53.175Z","repository":{"id":18638944,"uuid":"84809523","full_name":"MZCretin/AutoUpdateProject","owner":"MZCretin","description":"App 内部更新 提供12种更新的样式 支持Android全系统版本 支持自定义UI 断点续传","archived":false,"fork":false,"pushed_at":"2024-01-11T01:45:41.000Z","size":20487,"stargazers_count":1091,"open_issues_count":10,"forks_count":226,"subscribers_count":30,"default_branch":"master","last_synced_at":"2025-04-08T17:17:38.707Z","etag":null,"topics":["appupdate","sdk"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MZCretin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"custom":["https://github.com/MZCretin/CretinDocs/blob/master/%E6%8D%90%E8%B5%A0.md"]}},"created_at":"2017-03-13T09:44:34.000Z","updated_at":"2025-04-01T13:10:46.000Z","dependencies_parsed_at":"2024-11-18T02:11:33.089Z","dependency_job_id":"f8b7fe1c-b05f-4e44-8b45-e3b5e7c174ed","html_url":"https://github.com/MZCretin/AutoUpdateProject","commit_stats":null,"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MZCretin%2FAutoUpdateProject","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MZCretin%2FAutoUpdateProject/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MZCretin%2FAutoUpdateProject/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MZCretin%2FAutoUpdateProject/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MZCretin","download_url":"https://codeload.github.com/MZCretin/AutoUpdateProject/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254485064,"owners_count":22078767,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["appupdate","sdk"],"created_at":"2024-11-18T02:11:16.485Z","updated_at":"2025-05-16T07:07:48.166Z","avatar_url":"https://github.com/MZCretin.png","language":"Java","funding_links":["https://github.com/MZCretin/CretinDocs/blob/master/%E6%8D%90%E8%B5%A0.md"],"categories":[],"sub_categories":[],"readme":"# AutoUpdateProject\n\n[![](https://jitpack.io/v/MZCretin/AutoUpdateProject.svg)](https://jitpack.io/#MZCretin/AutoUpdateProject)\n\n### 全平台国际化话翻译解决方案\n项目国际化翻译解决方案，支持Android、iOS、Flutter、前端Vue、后端PHP等等，点几下按钮就能实现翻译内容的自动抓取和翻译后文件的自动生成，适合各类场景下的国际化需求。详情请查看：https://github.com/MZCretin/Eva-Translate 欢迎star\n\n--------\n\n### 想没想过做个自己的APP？\n\n想没想过自己做个APP，自己做自己的产品，自己决定交互，自己制作ui，那么快来吧，我开源了段子乐APP的数据和接口，你完全可以自己diy一个你自己的产品了~，详情请查看：https://github.com/MZCretin/duanzile-open-api 欢迎star\n\n\n### 系列\n\n在工作之余，打算将一些常用的逻辑页面，模块，功能点做成library库，这样当有相似需求的时候，可以做到插拔式开发！现在系列中有以下内容\n\n+ [App内部自动更新-AutoUpdateProject](https://github.com/MZCretin/AutoUpdateProject)\n+ [选择城市-CitySelect](https://github.com/MZCretin/CitySelect)\n+ [扫描二维码条形码控件-ScanCode](https://github.com/MZCretin/ScanCode)\n+ [一键打开WebView件-WebViewUtils](https://github.com/MZCretin/WebViewUtils)\n+ [简约动态权限申请库-FanPermission](https://github.com/MZCretin/FanPermission)\n+ [弹出自定义支付密码输入框-InputPswDemo](https://github.com/MZCretin/InputPswDemo)\n\n### 特点概述\n\n+ **最大亮点，提供**12**种更新的样式，总有一个是你喜欢的类型！**\n+ **支持三种设置更新信息的方式，您可以直接传model，传json数据，或者直接配置请求链接，sdk会自主请求并发起app的更新，满足多方需求！**\n+ **文件下载支持断点续传，下载错误拥有重试机制；相同版本的apk只会下载一次，防止重复下载！**\n+ **使用接口方式获取数据时支持设置请求头，支持POST和GET请求方式，更灵活。**\n+ **调用者可以自定义UI实现更新功能。**\n+ **已适配Android全系统版本**\n+ **提供强制更新，不更新则无法使用APP，同时可以根据后台返回受影响的版本号，可控制多个版本同时被强制更新。**\n+ **通知栏图片自定义**\n+ **新增文件MD5校验，防止安装文件被恶意替换（2019-10-22 18:48:39添加）**\n+ **新增静默下载更新的方式，实现进入App直接后台下载，下载完成后弹出安装页面（静默安装需要Root权限，而且体验很不好，不做支持）（2019-10-25 18:09:05添加）。**\n+ **支持https下载apk**\n\n### 新版本说明\n+ 2022年04月22日15:24:14更新版本，版本号为：v2.0.5\n    + 将APK存储在内容部文件夹\n    + 全Android系统版本兼容\n    + 修复了已知bug\n    + 移除无用代码\n\n+ 2019-11-08 18:13:56更新版本，版本号为：v2.0.4\n    + 修复静默下载时网络环境为数据网络的时候无法下载的问题\n    + 修复其他问题,[#22](https://github.com/MZCretin/AutoUpdateProject/issues/22)\n\n+ 2019-11-04 12:38:12更新版本，版本号为：v2.0.3\n    + 新增配置DownloadConnection的入口，可切换文件下载器的内核\n    + 提供了配置Okhttp3作为下载器的demo，在demo中提供了OkHttp3Connection的实现，并提供信任所有证书的工具类SSLUtils，可解决https根证书不被信任导致无法下载的问题\n\n+ 2019-10-25 18:09:05更新新版，版本号为：v2.0.2\n    + 新增静默下载更新的方式\n    + 新增获取是否有新版本更新的事件回调\n    + 优化下载状态中的文案显示逻辑，点击Demo右上角第五个item体验\n    + 修复多次调用checkUpdate多次弹窗的bug\n\n+ 2019-10-22 18:53:42更新新版，版本号为：v2.0.1\n    + 新版新增文件的MD5校验\n    + 新版新增对文件下载进度的监听\n    + 新版新增对文件MD5校验结果的回调\n    + DEMO中提供了获取文件MD5检验码的工具页面，也提供了加密工具类Md5Utils\n\n### 博客地址\n\n[掘金-【需求解决系列之四】Android App在线自动更新Library（V2.0）](https://juejin.im/post/5da491535188255a31329231)\n\n[简书-【需求解决系列之四】Android App在线自动更新Library（V2.0）](https://www.jianshu.com/p/9322785ffabf)\n\n### Demo体验\n\n[Demo下载](https://raw.githubusercontent.com/MZCretin/AutoUpdateProject/master/pic/demo.apk)\n\n扫描二维码下载：\n\u003cimg src=\"./pic/erweima.png\"/\u003e\n\n### 效果预览\n\n**说明： 以下12个更新的样式的类型值从左到右从上到下一次为** \n\n**TypeConfig.UI_THEME_A**、**TypeConfig.UI_THEME_B**、**TypeConfig.UI_THEME_C**、**TypeConfig.UI_THEME_D**、**TypeConfig.UI_THEME_E**、**TypeConfig.UI_THEME_F**、**TypeConfig.UI_THEME_G**、**TypeConfig.UI_THEME_H**、**TypeConfig.UI_THEME_I**、**TypeConfig.UI_THEME_J**、**TypeConfig.UI_THEME_K**、**TypeConfig.UI_THEME_L**\n\n\u003cdiv align=center \u003e\u003cimg width=\"50%\" height=\"100%\" src=\"./pic/type01.png\"  alt=\"UI_THEME_A\"/\u003e\u003cimg width=\"50%\" height=\"100%\" src=\"./pic/type02.png\" alt=\"UI_THEME_B\"/\u003e\u003cimg width=\"50%\" height=\"100%\" src=\"./pic/type03.png\" alt=\"UI_THEME_C\"/\u003e\u003cimg width=\"50%\" height=\"100%\" src=\"./pic/type04.png\" alt=\"UI_THEME_D\"/\u003e\u003cimg width=\"50%\" height=\"100%\" src=\"./pic/type05.png\" alt=\"UI_THEME_E\"/\u003e\u003cimg width=\"50%\" height=\"100%\" src=\"./pic/type06.png\" alt=\"UI_THEME_F\"/\u003e\u003cimg width=\"50%\" height=\"100%\" src=\"./pic/type07.png\" alt=\"UI_THEME_G\"/\u003e\u003cimg width=\"50%\" height=\"100%\" src=\"./pic/type08.png\" alt=\"UI_THEME_H\"/\u003e\u003cimg width=\"50%\" height=\"100%\" src=\"./pic/type09.png\" alt=\"UI_THEME_I\"/\u003e\u003cimg width=\"50%\" height=\"100%\" src=\"./pic/type10.png\" alt=\"UI_THEME_J\"/\u003e\u003cimg width=\"50%\" height=\"100%\" src=\"./pic/type11.png\" alt=\"UI_THEME_K\"/\u003e\u003cimg width=\"50%\" height=\"100%\" src=\"./pic/type12.png\" alt=\"UI_THEME_L\"/\u003e\u003c/div\u003e\n\n\n### 使用方式\n\n**Step 1.** Add the JitPack repository to your build file Add it in your root build.gradle at the end of repositories: \n\n```gradle\nallprojects { repositories { ... maven { url 'https://jitpack.io' } } }\n```\n\n**Step 2.** Add the dependency\n```gradle\n    dependencies { implementation 'com.github.MZCretin:AutoUpdateProject:latest_version' }\n```\n\n**Step 3.** Init it in BaseApplication or MainActivity before using it.And then register BaseApplication in AndroidManifest(Don't forget it).\n\n```java\n        //如果你想使用okhttp作为下载的载体，那么你需要自己依赖okhttp，更新库不强制依赖okhttp！可以使用如下代码创建一个OkHttpClient 并在UpdateConfig中配置setCustomDownloadConnectionCreator start\n        OkHttpClient.Builder builder = new OkHttpClient.Builder();\n        builder.connectTimeout(30_000, TimeUnit.SECONDS)\n                .readTimeout(30_000, TimeUnit.SECONDS)\n                .writeTimeout(30_000, TimeUnit.SECONDS)\n                //如果你需要信任所有的证书，可解决根证书不被信任导致无法下载的问题 start\n                .sslSocketFactory(SSLUtils.createSSLSocketFactory())\n                .hostnameVerifier(new SSLUtils.TrustAllHostnameVerifier())\n                //如果你需要信任所有的证书，可解决根证书不被信任导致无法下载的问题 end\n                .retryOnConnectionFailure(true);\n        //如果你想使用okhttp作为下载的载体，那么你需要自己依赖okhttp，更新库不强制依赖okhttp！可以使用如下代码创建一个OkHttpClient 并在UpdateConfig中配置setCustomDownloadConnectionCreator end\n\n        //当你希望自己提供json数据给插件，让插件自己解析并实现更新\n        UpdateConfig updateConfig = new UpdateConfig()\n                        .setDebug(true)//是否是Debug模式\n                        .setDataSourceType(TypeConfig.DATA_SOURCE_TYPE_JSON)//设置获取更新信息的方式为JSON方式\n                        .setShowNotification(true)//配置更新的过程中是否在通知栏显示进度\n                        .setNotificationIconRes(R.mipmap.download_icon)//配置通知栏显示的图标\n                        .setUiThemeType(TypeConfig.UI_THEME_AUTO)//配置UI的样式，一种有12种样式可供选择\n                        .setAutoDownloadBackground(false)//是否需要后台静默下载，如果设置为true，则调用checkUpdate方法之后会直接下载安装，不会弹出更新页面。当你选择UI样式为TypeConfig.UI_THEME_CUSTOM，静默安装失效，您需要在自定义的Activity中自主实现静默下载，使用这种方式的时候建议setShowNotification(false)，这样基本上用户就会对下载无感知了\n                        .setCustomActivityClass(CustomActivity.class)//如果你选择的UI样式为TypeConfig.UI_THEME_CUSTOM，那么你需要自定义一个Activity继承自RootActivity，并参照demo实现功能，在此处填写自定义Activity的class，否则不用设置\n                        .setNeedFileMD5Check(false)//是否需要进行文件的MD5检验，如果开启需要提供文件本身正确的MD5校验码，DEMO中提供了获取文件MD5检验码的工具页面，也提供了加密工具类Md5Utils\n                        .setCustomDownloadConnectionCreator(new OkHttp3Connection.Creator(builder))//如果你想使用okhttp作为下载的载体，可以使用如下代码创建一个OkHttpClient，并使用demo中提供的OkHttp3Connection构建一个ConnectionCreator传入，在这里可以配置信任所有的证书，可解决根证书不被信任导致无法下载apk的问题\n                        .setModelClass(new UpdateModel());//这里设置JSON解析之后对应的Model 用于json解析\n        AppUpdateUtils.init(this, updateConfig);//执行初始化\n\n        //当你希望使用传入model的方式，让插件自己解析并实现更新\n        UpdateConfig updateConfig = new UpdateConfig()\n                .setDebug(true)//是否是Debug模式\n                .setDataSourceType(TypeConfig.DATA_SOURCE_TYPE_MODEL)//设置获取更新信息的方式\n                .setShowNotification(true)//配置更新的过程中是否在通知栏显示进度\n                .setNotificationIconRes(R.mipmap.download_icon)//配置通知栏显示的图标\n                .setUiThemeType(TypeConfig.UI_THEME_AUTO)//配置UI的样式，一种有12种样式可供选择\n                .setAutoDownloadBackground(false)//是否需要后台静默下载，如果设置为true，则调用checkUpdate方法之后会直接下载安装，不会弹出更新页面。当你选择UI样式为TypeConfig.UI_THEME_CUSTOM，静默安装失效，您需要在自定义的Activity中自主实现静默下载，使用这种方式的时候建议setShowNotification(false)，这样基本上用户就会对下载无感知了\n                .setCustomActivityClass(CustomActivity.class)//如果你选择的UI样式为TypeConfig.UI_THEME_CUSTOM，那么你需要自定义一个Activity继承自RootActivity，并参照demo实现功能，在此处填写自定义Activity的class\n                .setNeedFileMD5Check(false)//是否需要进行文件的MD5检验，如果开启需要提供文件本身正确的MD5校验码，DEMO中提供了获取文件MD5检验码的工具页面，也提供了加密工具类Md5Utils\n                .setCustomDownloadConnectionCreator(new OkHttp3Connection.Creator(builder));//如果你想使用okhttp作为下载的载体，可以使用如下代码创建一个OkHttpClient，并使用demo中提供的OkHttp3Connection构建一个ConnectionCreator传入，在这里可以配置信任所有的证书，可解决根证书不被信任导致无法下载apk的问题\n        AppUpdateUtils.init(this, updateConfig);\n\n        //当你希望使用配置请求链接的方式，让插件自己解析并实现更新\n        UpdateConfig updateConfig = new UpdateConfig()\n                .setDebug(true)//是否是Debug模式\n                .setBaseUrl(\"http://www.cretinzp.com/system/versioninfo\")//当dataSourceType为DATA_SOURCE_TYPE_URL时，配置此接口用于获取更新信息\n                .setMethodType(TypeConfig.METHOD_GET)//当dataSourceType为DATA_SOURCE_TYPE_URL时，设置请求的方法\n                .setDataSourceType(TypeConfig.DATA_SOURCE_TYPE_URL)//设置获取更新信息的方式\n                .setShowNotification(true)//配置更新的过程中是否在通知栏显示进度\n                .setNotificationIconRes(R.mipmap.download_icon)//配置通知栏显示的图标\n                .setUiThemeType(TypeConfig.UI_THEME_AUTO)//配置UI的样式，一种有12种样式可供选择\n                .setRequestHeaders(null)//当dataSourceType为DATA_SOURCE_TYPE_URL时，设置请求的请求头\n                .setRequestParams(null)//当dataSourceType为DATA_SOURCE_TYPE_URL时，设置请求的请求参数\n                .setAutoDownloadBackground(false)//是否需要后台静默下载，如果设置为true，则调用checkUpdate方法之后会直接下载安装，不会弹出更新页面。当你选择UI样式为TypeConfig.UI_THEME_CUSTOM，静默安装失效，您需要在自定义的Activity中自主实现静默下载，使用这种方式的时候建议setShowNotification(false)，这样基本上用户就会对下载无感知了\n                .setCustomActivityClass(CustomActivity.class)//如果你选择的UI样式为TypeConfig.UI_THEME_CUSTOM，那么你需要自定义一个Activity继承自RootActivity，并参照demo实现功能，在此处填写自定义Activity的class\n                .setNeedFileMD5Check(false)//是否需要进行文件的MD5检验，如果开启需要提供文件本身正确的MD5校验码，DEMO中提供了获取文件MD5检验码的工具页面，也提供了加密工具类Md5Utils\n                .setCustomDownloadConnectionCreator(new OkHttp3Connection.Creator(builder))//如果你想使用okhttp作为下载的载体，可以使用如下代码创建一个OkHttpClient，并使用demo中提供的OkHttp3Connection构建一个ConnectionCreator传入，在这里可以配置信任所有的证书，可解决根证书不被信任导致无法下载apk的问题\n                .setModelClass(new UpdateModel());\n        AppUpdateUtils.init(this, updateConfig);\n\n```\n\n**Step 4.** Start using it wherever you want as below with 3 ways.\n\n```java\n    //有三种方式实现app更新，您可选其中一种方式来进行，推荐使用第三种方式！\n    //新增下载进度和MD5检测结果的回调监听 2019-10-22 18:51:19\n\n    //第一种方式，使用JSON字符串，让sdk自主解析并实现功能\n    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\\\"}\";\n    AppUpdateUtils.getInstance()\n                        .addMd5CheckListener(...)//添加MD5检查更新\n                        .addAppDownloadListener(...)//添加文件下载监听\n                        .checkUpdate(jsonData);\n\n    //第二种方式，使用MODEL方式，组装好对应的MODEL，传入sdk中\n    DownloadInfo info = new DownloadInfo().setApkUrl(\"http://jokesimg.cretinzp.com/apk/app-release_231_jiagu_sign.apk\")\n            .setFileSize(31338250)\n            .setProdVersionCode(25)\n            .setProdVersionName(\"2.3.1\")\n            .setMd5Check(\"68919BF998C29DA3F5BD2C0346281AC0\")\n            .setForceUpdateFlag(listModel.isForceUpdate() ? 1 : 0)\n            .setUpdateLog(\"1、优化细节和体验，更加稳定\\n2、引入大量优质用户\\r\\n3、修复已知bug\\n4、风格修改\");\n    AppUpdateUtils.getInstance()\n                        .addMd5CheckListener(...)//添加MD5检查更新\n                        .addAppDownloadListener(...)//添加文件下载监听\n                        .checkUpdate(info);\n\n    //第三种方式，在初始化的时候配置接口地址，sdk自主请求+解析实现功能（推荐）\n    AppUpdateUtils.getInstance()\n                        .addMd5CheckListener(...)//添加MD5检查更新\n                        .addAppDownloadListener(...)//添加文件下载监听\n                        .checkUpdate();\n\n```\n\n### 使用注意点\n\n+ 最简单快捷的方式就是使用传入MODEL的形式，因为这种方式需要的配置最少，但是你需要自己处理请求，并保证最终调用checkUpdate(model)的时候是在主线程。\n+ 在使用传入json这种方式的时候，你需要同样保证调用checkUpdate(json)的时候在主线程，并且你需要在初始化的时候配置json对应的model【setModelClass(new UpdateModel())】，并保证这个model实现了LibraryUpdateEntity接口。\n+ 在使用配置接口地址的方式的时候，您需要设置一个请求链接地址！当然，如果是需要的话，您需要设置请求方式，设置请求头和请求参数；并且你需要在初始化的时候配置请求成功之后返回的数据所对应的model【setModelClass(new UpdateModel())】，并保证这个model实现了LibraryUpdateEntity接口。\n+ 如果你需要自定义UI，请自定义一个普通的Activity就可以了，这个Activity需要继承RootActivity，这样你就拥有了自动更新的能力；另外建议给这个自定义的Activity添加一个主题@style/DialogActivityTheme，这样他就能以对话框的形式展示，据我们的UI说这样会好看点。\n\n#### 有什么意见或者建议欢迎与我交流，觉得不错欢迎Star\n\n使用过程中如果有什么问题或者建议，欢迎在issue中提出来或者直接联系我 mxnzp_life@163.com 嘿嘿！\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmzcretin%2Fautoupdateproject","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmzcretin%2Fautoupdateproject","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmzcretin%2Fautoupdateproject/lists"}