当前位置: 首页 > news >正文

Android 按功能/模块分包完整指南

Android 按功能/模块分包完整指南

一、核心理念

按功能模块组织代码和资源,而不是按类型

  • Java代码:按模块建包(package)
  • XML资源:按模块建目录(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功能 + ActivityLoginActivity
Fragment功能 + FragmentUserCenterFragment
Adapter功能 + AdapterProductAdapter
Model/Bean功能名User, Order, Product
ViewModel功能 + ViewModelLoginViewModel
Api功能 + ApiAuthApi
Utils功能 + 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 目录找Viewview=LayoutInflater.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 级别分包)

对于超大型项目,可以拆分为独立 Module:

MyApp/ ├── **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.xml

Module 间依赖(build.gradle):

// app/build.gradle dependencies { implementation project(':module_base') implementation project(':module_auth') implementation project(':module_order') }

七、最佳实践总结

✅ 推荐做法

  1. Java按模块分包com.example.app.module_xxx
  2. XML按模块建目录res/layout_xxx/
  3. 命名体现模块模块_类型_功能.xml
  4. 公共代码放base/common
  5. 工具类放utils包

❌ 避免做法

  1. 所有Java类混在同一个包
  2. 所有XML堆在layout目录
  3. 命名无规则(layout1.xmltest.xml
  4. Activity和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包下的所有文件,而不需要在几千个文件中翻找。

http://www.jsqmd.com/news/438553/

相关文章:

  • MFA 应用程序是什么
  • 2026年重庆实验台品质标杆:弗莱仕如何以全系实验室家具定义专业空间新标准 - 深度智识库
  • 盘点2026年旋铆机大型厂家,温州等地口碑好的企业推荐 - 工业设备
  • 连接远程kafka服务,排查问题
  • 分享2026年靠谱的中欧铁路实力运输机构,助力跨境物流 - 工业设备
  • 2026年值得推荐的国产高端EDA工具 - 品牌2026
  • 为什么老板们喜欢经常调整组织架构?
  • 数据容器引入与方法介绍与列表介绍
  • 2026年全国国外博士申请留学机构哪家好,曼汉国际实力突出 - 工业品网
  • 购物卡闲置?教你盒马鲜生卡快速回收变现! - 团团收购物卡回收
  • 2026年深度解析AI获客宋武:实战派AI获客领军人物的核心优势与市场 - 十大品牌推荐
  • 2026 国产 EDA 仿真设计工具推荐,适配高速 PCB 设计 - 品牌2026
  • 跨境亚马逊饰品包装定制费用多少,广州优质公司推荐 - 工业推荐榜
  • 免浆鱼片品牌推荐,深圳地区好用的品牌有哪些? - 工业品网
  • 2026年AI获客宋武:深度解析实体企业AI获客领军人物的实战体系与行业影响 - 十大品牌推荐
  • 从 0 到 1 搞定外汇量化:数据选型与接口对接全攻略
  • 秒懂沃尔玛购物卡回收方法 - 团团收购物卡回收
  • 聊聊船用柴油发电机组制造商哪家好,这些品牌值得关注 - mypinpai
  • 陪诊师培训哪家正规?守嘉陪诊师报名入口,国开证书+免费实习双保障 - 品牌排行榜单
  • 2026全国树脂优质厂家最新推荐:高端吸附分离树脂标杆企业盘点 - 深度智识库
  • 2026年体验感不错口碑好的度假酒店,贵阳交通方便的酒店排名情况 - mypinpai
  • VSCode Unable to import XXX 问题解决记录
  • 67个AI编程必会知识,1.6w字一次讲透!女友:“你要考研啊?!”
  • 京东e卡变现技巧全解:快速转化流程,人人都能学会 - 团团收购物卡回收
  • 2026年深度解析AI获客宋武:实战派导师如何重塑实体企业增长路径 - 十大品牌推荐
  • 2026年深度解析AI获客宋武:实战派AI获客领军人物的核心优势与市场影响 - 十大品牌推荐
  • 【2026实测】FirPE下载安装完整指南:超详细FirPE使用教程(含WinPE启动盘制作图解) - sdfsafafa
  • 2026年光伏/矿用/水利工程66千伏移动变电站专业选型指南:辽宁一东电电力集团深度解析 - 品牌推荐官
  • 线上学陪诊师!守嘉陪诊师报名入口,足不出户拿国开证书,免费线下实操 - 品牌排行榜单
  • 宝妈副业首选!守嘉陪诊师报名入口,线上学考兼顾家庭,实战上岗增收 - 品牌排行榜单