Android 按功能/模块分包完整指南
Android 按功能/模块分包完整指南一、核心理念按功能模块组织代码和资源而不是按类型Java代码按模块建包packageXML资源按模块建目录res/layout_模块名二、完整项目结构示例电商App为例用户、订单、商品、购物车、消息app/ ├── src/ │ └── main/ │ ├── **java/com/example/app/** │ │ ├── **base/** # 基础层 │ │ │ ├── BaseActivity.java │ │ │ ├── BaseFragment.java │ │ │ ├── BaseAdapter.java │ │ │ └── BaseApplication.java │ │ │ │ │ ├── **common/** # 公共组件 │ │ │ ├── utils/ # 工具类 │ │ │ │ ├── DateUtils.java │ │ │ │ ├── FileUtils.java │ │ │ │ └── NetworkUtils.java │ │ │ ├── widget/ # 自定义控件 │ │ │ │ ├── TitleBar.java │ │ │ │ ├── LoadingView.java │ │ │ │ └── EmptyView.java │ │ │ └── constant/ # 常量 │ │ │ ├── ApiConstants.java │ │ │ └── SPConstants.java │ │ │ │ │ ├── **module_auth/** # 认证模块 │ │ │ ├── activity/ │ │ │ │ ├── LoginActivity.java │ │ │ │ └── RegisterActivity.java │ │ │ ├── fragment/ │ │ │ │ └── ForgetPasswordFragment.java │ │ │ ├── adapter/ │ │ │ │ └── AuthMethodAdapter.java │ │ │ ├── model/ # 数据模型 │ │ │ │ ├── User.java │ │ │ │ └── LoginRequest.java │ │ │ ├── network/ # 网络请求 │ │ │ │ └── AuthApi.java │ │ │ └── viewmodel/ # ViewModel │ │ │ └── LoginViewModel.java │ │ │ │ │ ├── **module_home/** # 首页模块 │ │ │ ├── activity/ │ │ │ │ └── MainActivity.java │ │ │ ├── fragment/ │ │ │ │ ├── HomeFragment.java │ │ │ │ └── DiscoverFragment.java │ │ │ ├── adapter/ │ │ │ │ ├── BannerAdapter.java │ │ │ │ └── HomeMenuAdapter.java │ │ │ └── model/ │ │ │ ├── Banner.java │ │ │ └── MenuItem.java │ │ │ │ │ ├── **module_user/** # 用户模块 │ │ │ ├── activity/ │ │ │ │ ├── ProfileActivity.java │ │ │ │ ├── SettingsActivity.java │ │ │ │ └── AddressActivity.java │ │ │ ├── fragment/ │ │ │ │ └── UserCenterFragment.java │ │ │ ├── adapter/ │ │ │ │ ├── UserOrderAdapter.java │ │ │ │ └── AddressAdapter.java │ │ │ └── model/ │ │ │ ├── UserInfo.java │ │ │ └── Address.java │ │ │ │ │ ├── **module_order/** # 订单模块 │ │ │ ├── activity/ │ │ │ │ ├── OrderListActivity.java │ │ │ │ └── OrderDetailActivity.java │ │ │ ├── fragment/ │ │ │ │ ├── OrderConfirmFragment.java │ │ │ │ └── OrderPayFragment.java │ │ │ ├── adapter/ │ │ │ │ └── OrderAdapter.java │ │ │ └── model/ │ │ │ ├── Order.java │ │ │ └── OrderItem.java │ │ │ │ │ ├── **module_product/** # 商品模块 │ │ │ ├── activity/ │ │ │ │ ├── ProductListActivity.java │ │ │ │ └── ProductDetailActivity.java │ │ │ ├── fragment/ │ │ │ │ └── ProductFilterFragment.java │ │ │ ├── adapter/ │ │ │ │ └── ProductAdapter.java │ │ │ └── model/ │ │ │ ├── Product.java │ │ │ └── Category.java │ │ │ │ │ ├── **module_cart/** # 购物车模块 │ │ │ ├── activity/ │ │ │ │ └── CartActivity.java │ │ │ ├── adapter/ │ │ │ │ └── CartAdapter.java │ │ │ └── model/ │ │ │ └── CartItem.java │ │ │ │ │ └── **module_message/** # 消息模块 │ │ ├── activity/ │ │ │ └── MessageActivity.java │ │ ├── adapter/ │ │ │ └── MessageAdapter.java │ │ └── model/ │ │ └── Message.java │ │ │ └── **res/** # 资源文件 │ ├── **layout/** # 基础布局 │ │ ├── activity_splash.xml │ │ └── fragment_base.xml │ │ │ ├── **layout_auth/** # 认证模块布局 │ │ ├── activity_login.xml │ │ ├── activity_register.xml │ │ └── fragment_forget_pwd.xml │ │ │ ├── **layout_home/** # 首页模块布局 │ │ ├── activity_main.xml │ │ ├── fragment_home.xml │ │ ├── fragment_discover.xml │ │ ├── item_banner.xml │ │ └── item_menu.xml │ │ │ ├── **layout_user/** # 用户模块布局 │ │ ├── activity_profile.xml │ │ ├── activity_settings.xml │ │ ├── fragment_user_center.xml │ │ ├── item_user_info.xml │ │ └── item_address.xml │ │ │ ├── **layout_order/** # 订单模块布局 │ │ ├── activity_order_list.xml │ │ ├── activity_order_detail.xml │ │ ├── fragment_order_confirm.xml │ │ ├── item_order.xml │ │ └── item_order_product.xml │ │ │ ├── **layout_product/** # 商品模块布局 │ │ ├── activity_product_list.xml │ │ ├── activity_product_detail.xml │ │ ├── fragment_product_filter.xml │ │ ├── item_product.xml │ │ └── item_category.xml │ │ │ ├── **layout_cart/** # 购物车模块布局 │ │ ├── activity_cart.xml │ │ └── item_cart.xml │ │ │ ├── **layout_message/** # 消息模块布局 │ │ ├── activity_message.xml │ │ └── item_message.xml │ │ │ ├── **layout_widget/** # 自定义控件布局 │ │ ├── view_title_bar.xml │ │ ├── view_loading.xml │ │ └── view_empty_state.xml │ │ │ ├── **layout_dialog/** # 对话框布局 │ │ ├── dialog_confirm.xml │ │ ├── dialog_loading.xml │ │ └── dialog_share.xml │ │ │ ├── **drawable/** # 通用图片 │ ├── **drawable_auth/** # 认证模块图片 │ ├── **drawable_home/** # 首页模块图片 │ ├── **drawable_user/** # 用户模块图片 │ │ │ ├── **values/** # 通用字符串 │ │ ├── strings.xml │ │ ├── colors.xml │ │ └── styles.xml │ │ │ ├── **values-auth/** # 认证模块字符串 │ │ └── strings_auth.xml │ │ │ ├── **values-user/** # 用户模块字符串 │ │ └── strings_user.xml │ │ │ └── **values-order/** # 订单模块字符串 │ └── strings_order.xml三、Gradle 配置android { // ... sourceSets { main { // Java 源码路径默认会自动识别可不配置 java.srcDirs [src/main/java] // 资源文件路径配置 res.srcDirs [ src/main/res, src/main/res/layout, src/main/res/layout_auth, src/main/res/layout_home, src/main/res/layout_user, src/main/res/layout_order, src/main/res/layout_product, src/main/res/layout_cart, src/main/res/layout_message, src/main/res/layout_widget, src/main/res/layout_dialog, src/main/res/drawable, src/main/res/drawable_auth, src/main/res/drawable_home, src/main/res/drawable_user, src/main/res/values, src/main/res/values-auth, src/main/res/values-user, src/main/res/values-order ] } } } // 简化写法Android Studio 4.0 支持自动识别 android { sourceSets { main { res.srcDirs [src/main/res] // 只需指定根目录子目录自动识别 } } }四、命名规范Java 包命名com.公司名.应用名.模块名.子模块 示例 com.example.app.module.auth.activity com.example.app.module.auth.fragment com.example.app.module.auth.model com.example.app.module.auth.network类命名前缀 功能类型命名规则示例Activity功能 ActivityLoginActivityFragment功能 FragmentUserCenterFragmentAdapter功能 AdapterProductAdapterModel/Bean功能名User, Order, ProductViewModel功能 ViewModelLoginViewModelApi功能 ApiAuthApiUtils功能 UtilsDateUtils布局文件命名模块_类型_功能[模块前缀]_[类型]_[功能].xml 示例 auth_activity_login.xml # 认证模块登录页面 home_fragment_main.xml # 首页模块主Fragment user_item_address.xml # 用户模块地址Item order_dialog_confirm.xml # 订单模块确认对话框 common_view_title_bar.xml # 公共标题栏常用模块前缀模块前缀示例认证auth_auth_activity_login.xml首页home_home_fragment_main.xml用户user_user_activity_profile.xml订单order_order_item_list.xml商品product_product_detail.xml购物车cart_cart_activity.xml消息message_message_item.xml公共common_common_dialog_loading.xml控件widget_widget_title_bar.xml五、代码中的引用方式// Java 中引用布局用法完全不变publicclassLoginActivityextendsBaseActivity{OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);// 会自动从 layout_auth 目录找setContentView(R.layout.auth_activity_login);}}// Adapter 中引用 Item 布局publicclassProductAdapterextendsRecyclerView.Adapter{OverridepublicViewHolderonCreateViewHolder(ViewGroupparent,intviewType){// 会自动从 layout_product 目录找ViewviewLayoutInflater.from(parent.getContext()).inflate(R.layout.product_item,parent,false);returnnewViewHolder(view);}}// Fragment 中引用布局publicclassHomeFragmentextendsFragment{OverridepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState){// 会自动从 layout_home 目录找returninflater.inflate(R.layout.home_fragment_main,container,false);}}六、多模块项目Module 级别分包对于超大型项目可以拆分为独立 ModuleMyApp/ ├── **app/** # 主Module │ ├── src/main/java/com/example/app/ │ │ └── MainActivity.java │ └── src/main/res/ │ └── layout/ │ └── activity_main.xml │ ├── **module_base/** # 基础Module │ ├── src/main/java/com/example/base/ │ │ ├── BaseActivity.java │ │ ├── BaseFragment.java │ │ └── utils/ │ └── src/main/res/ │ ├── layout/ │ │ └── base_activity.xml │ └── values/ │ └── strings_base.xml │ ├── **module_auth/** # 认证Module │ ├── src/main/java/com/example/auth/ │ │ ├── LoginActivity.java │ │ └── model/ │ └── src/main/res/ │ ├── layout/ │ │ ├── auth_activity_login.xml │ │ └── auth_fragment_register.xml │ └── values/ │ └── strings_auth.xml │ └── **module_order/** # 订单Module ├── src/main/java/com/example/order/ │ ├── OrderListActivity.java │ └── adapter/ └── src/main/res/ ├── layout/ │ ├── order_activity_list.xml │ └── order_item.xml └── values/ └── strings_order.xmlModule 间依赖build.gradle// app/build.gradle dependencies { implementation project(:module_base) implementation project(:module_auth) implementation project(:module_order) }七、最佳实践总结✅ 推荐做法Java按模块分包com.example.app.module_xxxXML按模块建目录res/layout_xxx/命名体现模块模块_类型_功能.xml公共代码放base/common包工具类放utils包❌ 避免做法所有Java类混在同一个包所有XML堆在layout目录命名无规则layout1.xml、test.xmlActivity和Adapter放在一起不区分优点✅查找方便修改某个功能所有相关文件都在同一模块✅团队协作不同人负责不同模块互不干扰✅代码复用公共组件放在base模块✅易于测试可以独立测试每个模块✅便于重构模块化程度高修改影响范围小缺点❌ 目录结构较深❌ 需要额外配置❌ 初学者可能不适应八、实用工具快速创建模块脚本# create_module.shmkdir-papp/src/main/java/com/example/app/module_$1mkdir-papp/src/main/java/com/example/app/module_$1/activitymkdir-papp/src/main/java/com/example/app/module_$1/fragmentmkdir-papp/src/main/java/com/example/app/module_$1/adaptermkdir-papp/src/main/java/com/example/app/module_$1/modelmkdir-papp/src/main/res/layout_$1mkdir-papp/src/main/res/values-$1touchapp/src/main/res/values-$1/strings_$1.xml使用./create_module.sh user创建用户模块九、总结按功能/模块分包的核心思想一个功能的所有相关文件Java XML 资源都放在一起就像整理房间按类型放所有衣服放一起、所有书放一起传统方式按功能放卧室放睡衣、书房放书、厨房放厨具模块化方式模块化方式更符合人的思维习惯当你要修改登录功能时只需要关注module_auth包下的所有文件而不需要在几千个文件中翻找。

相关新闻

大模型学习指南:小白程序员轻松入门,收藏这份系统学习路线!

大模型学习指南:小白程序员轻松入门,收藏这份系统学习路线!

本文系统介绍了学习大模型(LM/LLM)的要点,涵盖深度学习、NLP基础、Transformer架构、模型架构、训练技术、实践技能、提示工程、工程实践、评估与安全等方面。从入门到进阶,提供完整学习路径,强调理论与实践结合&#…

2026/7/8 22:48:58 阅读更多 →
理论价值判定公理---如何审视3.23.1理论的意义

理论价值判定公理---如何审视3.23.1理论的意义

文章是3.23.1理论的反思框架。 关于理论的实际意义,以及理论的基本元素和结构复杂度,从这个角度来说,不同的理论,其实它只要具备了基本元素、基础结构,然后一种相互之间的转化模式,这样一种描述的话&#x…

2026/7/9 0:20:27 阅读更多 →
收藏 | 从零入门ReAct Agent:掌握写流程到造智能体的核心技能

收藏 | 从零入门ReAct Agent:掌握写流程到造智能体的核心技能

本文深入浅出解析ReAct Agent的核心原理与工程价值,帮助开发者快速掌握从“写流程”到“造智能体”的关键跃迁。文章详细介绍了Function Calling、MCP和Skills的区别与最佳实践,阐述了它们在AI Agent工具调用中的核心作用及相互关系。通过Lynxe框架的实例…

2026/7/7 13:54:43 阅读更多 →

最新新闻

5步完成Honey Select 2游戏增强补丁的终极配置指南

5步完成Honey Select 2游戏增强补丁的终极配置指南

5步完成Honey Select 2游戏增强补丁的终极配置指南 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为Honey Select 2的日语界面感到困惑吗?HS2-…

2026/7/9 0:17:21 阅读更多 →
L9958与PIC32MX460F512L电机控制方案详解

L9958与PIC32MX460F512L电机控制方案详解

1. 为什么选择L9958与PIC32MX460F512L组合在电机控制领域,硬件选型直接决定了系统性能上限。L9958是STMicroelectronics推出的多通道H桥驱动器,具备高达40V/1.5A的驱动能力,集成电流检测与PWM接口。而PIC32MX460F512L作为Microchip的32位MCU代…

2026/7/9 0:15:19 阅读更多 →
Flutter---底部导航栏(2)

Flutter---底部导航栏(2)

效果图底部导航栏import package:flutter/material.dart; import package:my_flutter/http/second_page.dart;import first_page.dart;///底部导航栏 class DemoPage extends StatefulWidget {const DemoPage({super.key});overrideState<DemoPage> createState() > _…

2026/7/9 0:15:19 阅读更多 →
【AI速览】2026年7月最新AI编程工具横评:国产IDE(TRAE/Qoder)+国外CLI(Claude Code)+任务编排,小白VibeCoding生态首选搭配指南

【AI速览】2026年7月最新AI编程工具横评:国产IDE(TRAE/Qoder)+国外CLI(Claude Code)+任务编排,小白VibeCoding生态首选搭配指南

最近&#xff0c;整个AI编程圈被一枚“合规核弹”炸得地动山摇——Anthropic被实锤在Claude Code中植入了针对中国用户的隐蔽检测后门&#xff0c;工信部紧随其后亮出红牌&#xff0c;阿里闪电封禁。这一刻&#xff0c;AI发展的宏大叙事突然变得异常锋利且冷酷&#xff1a;我们…

2026/7/9 0:15:19 阅读更多 →
Unlock Music音乐解锁工具:3分钟让加密音乐文件重获自由

Unlock Music音乐解锁工具:3分钟让加密音乐文件重获自由

Unlock Music音乐解锁工具&#xff1a;3分钟让加密音乐文件重获自由 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: htt…

2026/7/9 0:15:19 阅读更多 →
推理服务的 GPU 资源池化管理:基于 CUDA MPS 的多模型混部与隔离策略

推理服务的 GPU 资源池化管理:基于 CUDA MPS 的多模型混部与隔离策略

推理服务的 GPU 资源池化管理&#xff1a;基于 CUDA MPS 的多模型混部与隔离策略 一、三张 A100 跑 5 个模型&#xff0c;GPU 显存碎片导致总有模型加载失败 在一个多模型推理服务的部署中。需要在 3 张 A100&#xff08;每张 80GB&#xff09;上部署 5 个模型。模型的显存需求…

2026/7/9 0:13:19 阅读更多 →

日新闻

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案&#xff1a;ESLyric-LyricsSource完全指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 还在为Foobar2000找不到高质…

2026/7/9 0:01:04 阅读更多 →
ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘&#xff1a;3个步骤打造专业级学术书籍 【免费下载链接】ElegantBook Elegant LaTeX Template for Books 项目地址: https://gitcode.com/gh_mirrors/el/ElegantBook 你是否曾经为学术书籍的封面设计而烦恼&#xff1f;想要一个既专业又美观的封…

2026/7/9 0:03:06 阅读更多 →
如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc&#xff1a;企业级数据库连接终极指南 【免费下载链接】pyodbc Python ODBC bridge 项目地址: https://gitcode.com/gh_mirrors/py/pyodbc 在当今数据驱动的商业环境中&#xff0c;企业级数据库连接已成为现代应用开发的核心需求。pyodbc作为一款强大…

2026/7/9 0:07:11 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools&#xff1a;5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里&#xff0c;参与了关于混合后量子密码学的讨论&#xff0c;应付端点攻击找茬的人&#xff0c;还参与留言板讨论后&#xff0c;发现“威胁模型”对多数人仍是陌生概念&#xff0c;且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”&#xff1a;我理解的渗透测试到底是什么&#xff1f;每次看到新闻里说某个大公司的数据被“黑”了&#xff0c;或者某个网站被攻击导致服务瘫痪&#xff0c;你是不是和我一样&#xff0c;心里会冒出两个念头&#xff1a;一是“这黑客真厉害”&#x…

2026/7/8 16:59:55 阅读更多 →

月新闻