{"id":18565068,"url":"https://github.com/jenly1314/appupdater","last_synced_at":"2025-05-14T23:02:09.385Z","repository":{"id":38239798,"uuid":"139133158","full_name":"jenly1314/AppUpdater","owner":"jenly1314","description":"🚀 AppUpdater一个专注于App更新，一键傻瓜式集成App版本升级的轻量开源库。(集成步骤超简单)","archived":false,"fork":false,"pushed_at":"2025-05-14T15:55:27.000Z","size":51567,"stargazers_count":919,"open_issues_count":1,"forks_count":132,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-05-14T23:01:44.716Z","etag":null,"topics":["android","apk","app-dialog","app-update","app-updater","appupdate","appupdater","dialog","dialogfragment","download","update","update-checker","updater","version","version-update"],"latest_commit_sha":null,"homepage":"https://jenly1314.github.io/AppUpdater/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jenly1314.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2018-06-29T09:58:03.000Z","updated_at":"2025-05-14T15:55:31.000Z","dependencies_parsed_at":"2024-08-20T17:51:07.653Z","dependency_job_id":"cc5589a0-ea8d-4bf6-9818-9d4afdf7af00","html_url":"https://github.com/jenly1314/AppUpdater","commit_stats":null,"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenly1314%2FAppUpdater","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenly1314%2FAppUpdater/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenly1314%2FAppUpdater/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenly1314%2FAppUpdater/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jenly1314","download_url":"https://codeload.github.com/jenly1314/AppUpdater/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254243354,"owners_count":22038045,"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":["android","apk","app-dialog","app-update","app-updater","appupdate","appupdater","dialog","dialogfragment","download","update","update-checker","updater","version","version-update"],"created_at":"2024-11-06T22:17:35.140Z","updated_at":"2025-05-14T23:02:09.351Z","avatar_url":"https://github.com/jenly1314.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AppUpdater\n\n![Image](app/src/main/ic_launcher-web.png)\n\n[![MavenCentral](https://img.shields.io/maven-central/v/com.github.jenly1314.AppUpdater/app-updater?logo=sonatype)](https://repo1.maven.org/maven2/com/github/jenly1314/AppUpdater)\n[![JitPack](https://img.shields.io/jitpack/v/github/jenly1314/AppUpdater?logo=jitpack)](https://jitpack.io/#jenly1314/AppUpdater)\n[![CI](https://img.shields.io/github/actions/workflow/status/jenly1314/AppUpdater/build.yml?logo=github)](https://github.com/jenly1314/AppUpdater/actions/workflows/build.yml)\n[![Download](https://img.shields.io/badge/download-APK-brightgreen?logo=github)](https://raw.githubusercontent.com/jenly1314/AppUpdater/master/app/release/app-release.apk)\n[![API](https://img.shields.io/badge/API-15%2B-brightgreen?logo=android)](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)\n[![License](https://img.shields.io/github/license/jenly1314/AppUpdater?logo=open-source-initiative)](https://opensource.org/licenses/mit)\n\n\nAppUpdater for Android 是一个专注于App更新，一键傻瓜式集成App版本升级的轻量开源库。\n\n\u003e 无需担心各种细节的处理和适配问题；包括但不仅限于：通知栏适配、重复下载、文件访问授权、App安装等问题；这些 **AppUpdater** 都已帮您处理好。\n\n* **AppUpdater** 核心库主要包括 **app-updater** 和 **app-dialog** 。\n\n\u003e **app-updater** 主要负责后台下载更新App，无需担心下载时各种配置相关的细节，一键傻瓜式升级。\n\n\u003e **app-dialog** 主要是提供常用的Dialog和DialogFragment，简化弹框提示的实现，布局样式可随意定制。\n\n* 下载更新和弹框提示之所以分开是因为这本来就是两个功能。二者完全独立，可以在解耦同时减少侵入性。\n\n\u003e 如果你只需要单纯的 App下载更新功能，仅依赖 **app-updater** 即可；\n\u003e 如果你在需要App下载更新功能的同时，还需要有对话框来进行交互； 那么 **app-updater** + **app-dialog** 二者配合使用，谁用谁知道。\n\n\n## 功能介绍\n- ✅ 专注于App更新一键傻瓜式升级\n- ✅ 够轻量，体积小\n- ✅ 支持监听下载和自定义下载流程\n- ✅ 支持下载失败时，可重新下载\n- ✅ 支持文件MD5校验，避免重复下载\n- ✅ 支持通知栏提示内容和流程全部可配置\n- ✅ 支持取消下载\n- ✅ 支持使用HttpsURLConnection或OkHttpClient进行下载\n- ✅ 支持Android 10(Q)\n- ✅ 支持Android 11(R)\n- ✅ 支持Android 12(S)\n\n## 效果展示\n![Image](GIF.gif)\n\n\u003e 你也可以直接下载 [演示App](https://raw.githubusercontent.com/jenly1314/AppUpdater/master/app/release/app-release.apk) 体验效果\n\n## 引入\n\n### Gradle:\n\n1. 在Project的 **build.gradle** 里面添加远程仓库\n\n```gradle\nallprojects {\n    repositories {\n        //...\n        mavenCentral()\n    }\n}\n```\n\n2. 在Module的 **build.gradle** 中添加依赖项\n\n```gradle\n\n    //----------AndroidX 版本\n    //app-updater\n    implementation 'com.github.jenly1314.AppUpdater:app-updater:1.2.0'\n    //app-dialog\n    implementation 'com.github.jenly1314.AppUpdater:app-dialog:1.2.0'\n\n```\n\n## 使用\n\n### 代码示例\n\n```Java\n    //一句代码，傻瓜式更新\n    new AppUpdater(context,url).start();\n```\n```Java\n    //简单弹框升级\n    AppDialogConfig config = new AppDialogConfig(context);\n    config.setTitle(\"简单弹框升级\")\n            .setConfirm(\"升级\") //旧版本使用setOk\n            .setContent(\"1、新增某某功能、\\n2、修改某某问题、\\n3、优化某某BUG、\")\n            .setOnClickConfirm(new View.OnClickListener() { // 旧版本使用setOnClickOk\n                @Override\n                public void onClick(View v) {\n                    new AppUpdater.Builder(context)\n                            .setUrl(mUrl)\n                            .build()\n                            .start();\n                    AppDialog.INSTANCE.dismissDialog();\n                }\n            });\n    AppDialog.INSTANCE.showDialog(context,config);\n```\n```Java\n    //简单DialogFragment升级\n    AppDialogConfig config = new AppDialogConfig(context);\n    config.setTitle(\"简单DialogFragment升级\")\n            .setConfirm(\"升级\")\n            .setContent(\"1、新增某某功能、\\n2、修改某某问题、\\n3、优化某某BUG、\")\n            .setOnClickConfirm(new View.OnClickListener() {\n                @Override\n                public void onClick(View v) {\n                    AppUpdater appUpdater = new AppUpdater.Builder(context)\n                            .setUrl(mUrl)\n                            .build();\n                    appUpdater.setHttpManager(OkHttpManager.getInstance()) // 使用OkHttp的实现进行下载\n                            .setUpdateCallback(new UpdateCallback() { // 更新回调\n                                @Override\n                                public void onDownloading(boolean isDownloading) {\n                                    // 下载中：isDownloading为true时，表示已经在下载，即之前已经启动了下载；为false时，表示当前未开始下载，即将开始下载\n                                }\n\n                                @Override\n                                public void onStart(String url) {\n                                    // 开始下载\n                                }\n\n                                @Override\n                                public void onProgress(long progress, long total, boolean isChanged) {\n                                    // 下载进度更新：建议在isChanged为true时，才去更新界面的进度；因为实际的进度变化频率很高\n                                }\n\n                                @Override\n                                public void onFinish(File file) {\n                                    // 下载完成\n                                }\n\n                                @Override\n                                public void onError(Exception e) {\n                                    // 下载失败\n                                }\n\n                                @Override\n                                public void onCancel() {\n                                    // 取消下载\n                                }\n                            }).start();\n\n                    AppDialog.INSTANCE.dismissDialogFragment(getSupportFragmentManager());\n                }\n            });\n    AppDialog.INSTANCE.showDialogFragment(getSupportFragmentManager(), config);\n\n```\n\n更多使用详情，请查看[app](app)中的源码使用示例或直接查看[API帮助文档](https://jenly1314.github.io/AppUpdater/api/)\n\n## 补充说明\n\n### app-updater\n\n*  不设置 **HttpManager** 时，默认使用 **HttpsURLConnection** 实现的 **HttpManager** 进行下载，如果想要使用 **OkHttpClient** 实现下载，需依赖 **okhttp** 库；（内部默认提供 **HttpManager** 和 **OkHttpManager** 两种实现）\n*  支持下载APK时，优先取本地缓存策略，避免多次重复下载相同的APK文件；（校验方式支持 **文件MD5** 或 **VersionCode** 比对）\n*  如需自定义更新App时通知栏中的相关文案信息；你只需在 **string.xml** 定义相同的名字进行覆盖即可（ **app-updater** 中的资源定义都是以 **app_updater** 开头）。\n*  不设置 **Notification** 时，默认使用 **NotificationImpl** 实现的，如果当前的通知栏的布局不满足你的需求，可通过参考 **NotificationImpl** 去自定义实现一个 **INotification** ；\n*  **AppUpdater** 中的日志统一使用 **LogUtils** 进行管理，通过 **LogUtils.setShowLog** 可以全局设置是否显示日志；需要定位 **AppUpdater** 内部日志信息时，只需过滤以 **AppUpdater** 开头的 **Log Tag** 即可。\n*  **AppUpdater** 的更多配置说明请查看 **AppUpdater.Builder** 或 **UpdateConfig**；方法上基本都有详细的说明。\n\n### app-dialog\n\n* **AppDialogConfig** 主要提供一些对话框配置，内部提供了一套默认的配置，你也可以通过 **AppDialogConfig** 对外暴露的方法，自定义对话框配置；**AppDialog** 主要负责对话框的显示与消失；通过 **AppDialog** 和 **AppDialogConfig**，你可以很容易的实现一个自定义对话框；\n* **AppDialog** 足够通用，其内部实现了一套最常见对话框，并给予一系列的默认配置，让使用者可以尽可能的通过少的配置就能实现功能；**AppDialog** 也足够抽象，对话框布局样式是可随意定制；\n* 基于以上几点，这里列个特别的场景说明：如需你想不通过自定义布局的方式定义对话框布局，同时默认的对话框的文字或按钮颜色不太符合你的需求场景，只想修改 **AppDialog** 内置默认对话框提示文字的颜色（包括按钮文字），你可以通过在 **colors.xml** 定义相同的名字进行覆盖即可（ **app-dialog** 中的资源定义都是以 **app_dialog** 开头）。\n\n## 混淆\n\n**app-updater** [Proguard rules](app-updater/proguard-rules.pro)\n\n**app-dialog** [Proguard rules](app-dialog/proguard-rules.pro)\n\n## 相关推荐\n\n- [RetrofitHelper](https://github.com/jenly1314/RetrofitHelper) 是一个支持配置多个BaseUrl，支持动态改变BaseUrl，动态配置超时时长的Retrofit帮助类。\n- [BaseUrlManager](https://github.com/jenly1314/BaseUrlManager) BaseUrl管理器，主要打测试包时，一个App可动态切换到不同的开发环境或测试环境。\n- [MVVMFrame](https://github.com/jenly1314/MVVMFrame) 一个基于Google官方推出的JetPack构建的MVVM快速开发框架。\n- [LogX](https://github.com/jenly1314/LogX) 一个轻量而强大的日志框架；好用不解释。\n\n\u003c!-- end --\u003e\n\n## 版本日志\n\n#### v1.2.0：2023-7-9\n* 更新Gradle至v7.3.3\n* 优化lint检测\n\n#### [查看更多版本日志](CHANGELOG.md)\n\n---\n\n![footer](https://jenly1314.github.io/page/footer.svg)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjenly1314%2Fappupdater","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjenly1314%2Fappupdater","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjenly1314%2Fappupdater/lists"}