{"id":20609644,"url":"https://github.com/blankj/aucframetemplate","last_synced_at":"2025-04-13T04:17:30.720Z","repository":{"id":109048769,"uuid":"196719492","full_name":"Blankj/AucFrameTemplate","owner":"Blankj","description":"AucFrame","archived":false,"fork":false,"pushed_at":"2020-05-08T18:27:04.000Z","size":145,"stargazers_count":255,"open_issues_count":1,"forks_count":55,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-04-13T04:17:21.060Z","etag":null,"topics":["android","androidutilcode","aucframe","frame"],"latest_commit_sha":null,"homepage":"https://t.zsxq.com/FmeqfYF","language":"Groovy","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/Blankj.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-07-13T12:32:14.000Z","updated_at":"2025-03-25T18:41:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"fa1c9ea3-b905-4315-963f-8286e9e2ac08","html_url":"https://github.com/Blankj/AucFrameTemplate","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Blankj%2FAucFrameTemplate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Blankj%2FAucFrameTemplate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Blankj%2FAucFrameTemplate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Blankj%2FAucFrameTemplate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Blankj","download_url":"https://codeload.github.com/Blankj/AucFrameTemplate/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248661712,"owners_count":21141451,"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","androidutilcode","aucframe","frame"],"created_at":"2024-11-16T10:14:07.077Z","updated_at":"2025-04-13T04:17:30.696Z","avatar_url":"https://github.com/Blankj.png","language":"Groovy","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AucFrame 之简介及学习\n\n## 简介\n首先，什么是 AUC 呢？在 QQ 群里的小伙伴们应该知道这个词，或者知道我的工具类的也应该能猜到是什么，没错，AUC 全称就是 [AndroidUtilCode](https://github.com/Blankj/AndroidUtilCode)，这个项目的生命周期已长达 3 年之久，star 数目前是 24k+，应该算是比较成功的一个开源项目了，基于它，我打造了一套自认为还不错的组件化架构 ———— **[AucFrame](https://github.com/Blankj/AucFrameTemplate)**，其优点如下所示：\n\n* 统一管理项目中的 Gradle\n* 自由选择调试模块\n* 自由选择需要的包\n* 自由切换源码和远程仓库\n* 业务模块互不依赖，完全解偶\n* 模块间通讯一学就会\n* 比 EventBus 更高效的模块内通讯\n\n接下来就让我们来一一揭开他的神秘面纱。\n\n## 预览\n架构么，肯定要开门见山，直接上图，不然说的再天花乱坠也无济于事，也就是所谓的 `no picture you say a j8`，AucFrame 的架构如下所示：\n![AucFrame](http://ww1.sinaimg.cn/large/b75b8776ly1g5byaor9aej20s10kl0uo.jpg)\n\n其项目中具体的工程结构如下所示：\n```\n└── AndroidUtilCode\n    ├── feature\n    │   ├── launcher\n    │   │   └── app\n    │   ├── main\n    │   │   ├── app\n    │   │   └── pkg\n    │   ├── mock\n    │   ├── subutil\n    │   │   ├── app\n    │   │   ├── export\n    │   │   └── pkg\n    │   └── utilcode\n    │       ├── app\n    │       ├── export\n    │       └── pkg\n    └── lib\n        ├── base\n        ├── common\n        ├── subutil\n        └── utilcode\n```\n\n基于此，我们可以设计出如下通用架构：\n\n![AucFrameGeneral](http://ww1.sinaimg.cn/large/b75b8776ly1g5byaxfsbuj20s10kptam.jpg)\n\n其工程结构如下所示：\n```\n└── ProjectName\n    ├── feature\n    │   ├── launcher\n    │   │   └── app\n    │   ├── feature0\n    │   │   ├── app\n    │   │   ├── export\n    │   │   └── pkg\n    │   ├── feature1\n    │   │   ├── app\n    │   │   ├── export\n    │   │   └── pkg\n    │   └── mock\n    └── lib\n        ├── base\n        ├── common\n        ├── rxjava\n        └── utilcode\n```\n\n对着架构图也许你也能撸出来一个，但其优雅程度肯定不及我撸的，具体如何优雅？最直接的就是 feature 下的所有模块的 `build.gradle` 都是空空如也，没有一行代码，甚至删了也无所谓，也就不需要你写哪个模块具体需要依赖什么，但确切的依赖关系，就是架构中所示，开发者可自由配置想要运行哪个 `app`，自由配置你所需要的 `pkg`，做到各业务可完全独立运行，下面就让我带领你如何优雅地撸出它来。\n\n\n## 学习\n该教程适合期望能优化自己工程架构的中高级开发人员，新手的话建议把 Gradle 摸清楚了再来学习即可，为了你更好更全面地了解及掌握 AucFrame，在这里我会一步步地搭建一个模板工程：[AucFrameTemplate](https://github.com/Blankj/AucFrameTemplate)，并教你如何搭建出该架构及背后的原理，方便你可以运用到你的项目中，或者在下个项目中快速使用，相关课程列表如下所示：\n\n0. AucFrame 之简介及学习（就是本节）\n1. AucFrame 之让你的 Gradle 更智能\n2. AucFrame 之统一管理 Gradle\n3. AucFrame 之解放 Gradle\n4. AucFrame 之模块间通信\n5. AucFrame 之模块内通信\n\n\n欢迎加入我的知识星球「**[基你太美](https://t.zsxq.com/FmeqfYF)**」，我会在星球中分享 [AucFrame](https://blankj.com/2019/07/22/auc-frame/) 框架、大厂面经、[AndroidUtilCode](https://github.com/Blankj/AndroidUtilCode) 更详尽的说明...一切我所了解的知识，你可以通过支付进入我的星球「**[基你太美](https://t.zsxq.com/FmeqfYF)**」进行体验，加入后优先观看星球中精华的部分，如果觉得星球的内容对自身没有收益，你可以自行申请退款退出星球，也没必要加我好友；**如果你已确定要留在我的星球，可以通过扫描如下二维码（备注：基你太美+你的星球昵称）加我个人微信，方便我后续拉你进群(PS：进得越早价格越便宜)。**\n\n![我的二维码](https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/wechat.png)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblankj%2Faucframetemplate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblankj%2Faucframetemplate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblankj%2Faucframetemplate/lists"}